Messwert Glättung - Amplitudenfehler

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
piratos
User
Beiträge: 12
Registriert: Dienstag 26. Oktober 2021, 11:03

Hallo,

ich untersuche ein stark verrauschtes Signal. Es wird eine Temperatur gemessen. Das Rauschen ist proportional zur Rotationsgeschwindigkeit einer Maschine. Die Maschine beschleunigt und bremst im Laufe der Messung.

Anbei ein kleines Beispiel meines Problems. Blau sind die gemessenen Temperaturwerte. Bei dem grünen Signal wird ein gleitender Mittelwert mit konstanter Schrittweite angewendet.

Ich möchte meine Messwerte glätten, aber die maximale Amplitude soll aber möglichst wenig beeinflusst werden.

Eine Möglichkeit wäre eventuell einen gleitenden Mittelwert mit variabler Schrittweite in Abhängigkeit der Drehzahl anzuwenden. Die Glättung sollte aber im besten Fall unabhängig von einem Drehzahlsignal erfolgen.

Wäre hier ein Butterworth-Filter sinnvoll?
scipy.signal.butter: Ich habe mir die Funktion zur Bestimmung der Filterkoeffizienten angeschaut. Hier wird mir leider nicht ganz klar, wie ich das Problem angehen muss. Bräuchte ich eine Bandsperre zwischen der minimalen und maximalen Drehfrequenz der Maschine?

Oder gibt es eine bessere Herangehensweise für mein Problem?

Vielen Dank im Voraus und ein schönes Wochenende,
Jeff

Bild
https://ibb.co/CPP7Zym
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Meine Signalverarbeitungskenntnisse sind leider noch nicht ganz so weit gediehen, wie ich mir das wuensche. Darum kann ich zu Butterworth-Filtern nichts jenseits von Wikipedia sagen. Was ich aber seltsam finde ist, dass du die maximale Amplitude nicht beeinflussen willst. Wenn man das physikalisch betrachtet, dann wuerde diese Anforderung bedeuten, dass man irgendwie weiss, dass die Stoerung immer nur die Temperatur negativ (im Sinne von es wird kaelter gemessen als es ist) beeinfluss wird. Ist das so? Das kann ich mir schwer vorstellen. Und so sehen auch die Kurvon oben nicht aus, der Peak, dem ein Fitting der linken Kurve in die Rechte entspricht, liegt ja etwa bei 300. Nicht bei 350, wie er in den Daten zu sehen ist.

So wie ich die BW-Filter verstehe, sind das ja "nur" sehr scharfe Tiefpassfilter. Das ist an sich eine nette Eigenschaft. Aber das garantiert ja auch keine Spitzenwertuebernahme.
piratos
User
Beiträge: 12
Registriert: Dienstag 26. Oktober 2021, 11:03

Ich messe die Rotor-Oberflächentemperatur einer rotierenden Maschine. Der Rotor besteht aus 4 Polen und 4 Pollücken. Die Pole sind deutlich wärmer, als die Lücke und innerhalb eines Poles habe ich die Befestigung und den Pol an sich. Am Rand der Befestigung ist es am wärmsten.

Mich interessiert hauptsächlich die Poltemperatur an sich. Mit einem Mittel aus Pol- und Polbefestigungstemperatur könnte ich auch leben, aber die kältere Lücke interessiert mich quasi nicht. Bei einer Mittelwertbildung verfälscht der niedrige Wert mit dann die eigentlich wichtige Poltemperatur. Die Maximalwerte sind mir wichtig.

Anbei nochmal ein nahe herangezoomtes Bild der Temperatur eines Poles.

Durch die Erwärmung der Maschine erwärmen sich natürlich auch die Pollücken, deswegen kann ich nicht einfach die Minimalwerte "abschneiden." Und durch die Beschleunigung der Maschine, habe ich immer weniger Messwerte pro Pol und eine unklarere Auflösung zwischen Pol und Lücke.

Ich hoffe das verdeutlicht mein Problem ein wenig.

Bild
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Na dann wuerde ich das anders machen. Du kannst ja anhand der Maximalwerte gut die Durchgaenge deines Rotors bestimmen. Und dann einfach die Polluecken rauswerfen. Die verbleibenden Daten sollten sich dann auf die Poltemperatur mitteln.

Dazu kannst du zb einen Tiefpass benutzen, der so entworfen ist, dass er deine sicherlich bekannte maximale Drehzahl / Sekunde * der Anzahl der Pole als Grenzfrequenz hat. Dadurch sollte sich eigentlich das Signal so gut glaetten, dass du die Peaks detektieren kannst, und die dazwischenliegenden Pits ignorieren. Auch zum Thema "peak detection" gibt es sicherlich so manche interessanten Verfahren.
derElch
User
Beiträge: 33
Registriert: Sonntag 25. Februar 2018, 13:14

__deets__ hat geschrieben: Montag 4. April 2022, 16:36 ... Auch zum Thema "peak detection" gibt es sicherlich so manche interessanten Verfahren.
@piratos
Wie von __deets__ schon erwähnt, schau dir dazu das Paket Scipy Signal an. Das könnte dazu recht gut passen
piratos
User
Beiträge: 12
Registriert: Dienstag 26. Oktober 2021, 11:03

Danke @__deets__ und @derElch für die Antworten und Mühe.

Der Ansatz hat ganz gut funktioniert, dass ich das Signal mit einem Tiefpass der vierfachen Synchronfrequenz glätte. Die Höhen der Polschrauben konnte ich so rausfiltern. Danach nehme ich die Hüllkurve des Signals, welche dann ziemlich genau meinen Polmitteltemperaturen entspricht. Das ist fast überall ausreichend genau. Die Daten sollen in einem nächsten Schritt eigentlich mit Datenintervallen von 200 Werten auf einem Arduino MKR mit einem Takt von 10Hz geglättet. Deswegen versuche ich komplexere Funktionen aus solchen Modulen zu vermeiden.

Es gibt noch ein Problem. Zu Beginn der Messung dreht die Maschine mit 30Hz, dann wird sie bis zum Stillstand heruntergebremst und fährt dann wieder hoch auf 30Hz. An dem beigefügten Bild erkennt man nun die Stelle ganz gut, an der der Tiefpass nicht greift, bzw. die Maschine sehr langsam dreht. Hättet ihr vielleicht noch eine Idee, wie ich das vermeiden kann, ohne ein Drehzahlsignal in die Glättung mit einzubeziehen?

Bild
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ohne Drehzahl sehe ich da an sich schwarz. Aber die Frage ist, ob man die ggf aus den Daten in einem ersten Pass extrahieren kann. Das kann aber nur gelingen, wenn die Temperaturdifferenz schon hoch genug ist, so dass man an der Wellenform diese Drehzahl ablesen kann.

Ein Weg könnte zb ein Kalmanfilter sein, den man auf die peaks loslässt, und der eine Hypothese über die Geschwindigkeit hält, und die updated. Diese Peakvorhersage kann man dann natürlich auch gleich wieder zur Filterung der Pole benutzen.

Einfacher ist aber natürlich ein positionsfeedback von der Welle.
piratos
User
Beiträge: 12
Registriert: Dienstag 26. Oktober 2021, 11:03

Alles klar, ich verstehe. Danke nochmal.

Auf dem Microcontroller bestimme ich die Drehzahl aus den Temperaturwerten mit einer Phasenregelschleife. Ich hatte nur gehofft, dass ich die Glättung unabhängig davon machen kann. Dann werde ich die Drehzahl einbeziehen.

Viele Grüße
Antworten