Methoden zur Identifikation von Minima in "Echtzeit"

#7050635
Lesenswert?

Hallo zusammen,

ich habe eine Frage:
Welche Methoden kennt ihr, die gängig sind, Minima in einem 
fortlaufenden Messsignal mit einem Mikrocontroller zu identifizieren. 
Ich bin leider etwas unbedarft und benötige eine V0, damit ich weiß 
wonach ich am besten suchen/recherchieren soll. Vielleicht kennt ihr 
sogar einen Ansatz, der direkt dazu passt.

Ziel ist das Finden des Zeitpunkts der Minima, um die Zeitdifferenz 
zwischen diesen berechnen zu können. Das soll in „Echtzeit“ passieren, 
um diese direkt weiter nutzen zu können. Mich interessieren nur 
Zeitdifferenz, die eigentlichen Messwerte der Minima sind für mich 
uninteressant.

Das normierte Messsignal sieht ungefähr wie folgt aus, wobei der Wert 
des Minimums immer etwas variiert (siehe Anhang).


Die Abtastrate beträgt 50 kHz, wobei das Auftreten der Minima etwa mit 5 
kHz erfolgt. Also sollte das Nyquist-Shannon-Abtasttheorem eingehalten 
sein.

Ich würde mich freuen, wenn ihr mir ein wenig weiterhelfen könnt. 😊
Ich wünsche euch schon mal einen schönen Ersten Mai!
Angehängte Dateien:
#7050689
Lesenswert?

Danke für die Antworten.

sagjanur schrieb:
> Das ist wie an der Börse :
> Ein Minimum (oder Maximum) kann man erst hinterher erkennen ...

Ja das ist mir bewusst. Darum habe ich das Echtzeit auch in 
Anführungszeichen gesetzt.

Das Bild zeigt einen aufgenommenen Signalverlauf. Ich denke, dass 
grundsätzlich muss ein Zeitfenster definiert sein muss, in dem das 
Minimum gesucht wird. Optimalerweise sollte es so gewählt sein, dass nur 
ein Minimum enthalten ist. Entsprechend müsste ich dann nur ein 
"globales" Minimum finden.

Da die Messwerte geringfügig rauschen, was gibt es für weitere 
Möglichkeiten?
Gast #7050747
Lesenswert?

> if ( x[n-2] > x[n-1] && x[n] > x[n-1] )

> 1) Problem Rauschen muss bedacht werden.

Den Einfluß des Rauschens kann man verringern, wenn man statt -1 und -2 
eine größere Schrittweite d nimmt (also -d und -2d, im Endeffekt ein 
Resampling auf fs/d).  d sollte passend gewählt werden, so dass genügend 
viele Resampling-Punkte innerhalb dieser Sinus-Halbwellen liegen.
Gast #7050831
Lesenswert?

Etwas aufwendiger, dafür aber mit Rauschfilter:
Du kannst dein Signal per Bestapproximation lokal
approximieren, z.B. mit Polynomen von Grad 3.
Damit erhälst du die Koeffizienten (p0,p1,p2,p3),
anhand derer du schnell entscheiden kannst, ob
und WO!! ein Minimum oder Maximum vorliegt.

Aber Achtung:
1. je Wert ist eine Approximation zu berechnen
2. für benachbarte Werte sind die Approximanten
   iE gleich. Das Problem lässt sich aber z.B.
   durch ein Flag lösen, dass beim ersten Extremum
   gesetzt und erst nach z.B. k Werten wieder
   gelöscht wird.
3. Ein berechnetes Extremum kann evtl. auch vor dem
   aktuellen Werte liegen. In diesem Fall: ignorieren

Das ganze habe ich schon öfters für Spektrenanzeigen
gemacht, wo ja auch die Maxima interessieren.
Gast #7050887
Lesenswert?

Gustl schrieb:
> Oder gleich zwei gleitende Mittelwerte. Man guckt sich z. B. immer 16
> Samples an und zieht dabei für die Steigung den Mittelwert der ersten 8
> Samples vom Mittelwert der letzten 8 ab.

Das ist aber ein sehr störanfälliges Filter.
Besser wäre ein richtiger Tiefpass, als Filter gegen Rauschen.
Wenn die Schwinungsfrequenz= Krümmung bekannt ist, kann man auch diesen 
Sinus lokal einpassen.
#7050958
Lesenswert?

Bongo schrieb:
> Das ist aber ein sehr störanfälliges Filter.

Ja. Du kannst die Mittelwerte jeweils über mehr Samples machen.

Bongo schrieb:
> Besser wäre ein richtiger Tiefpass, als Filter gegen Rauschen.

Kann man. Dadurch wird aber auch die Latenz größer.

Bongo schrieb:
> Wenn die Schwinungsfrequenz= Krümmung bekannt ist, kann man auch diesen
> Sinus lokal einpassen.

Auch das geht. Kostet aber Rechenleistung.
Die Lösung ist vermutlich irgendein Kompromiss aus Rechenleistung, 
Latenz, Qualität des Ergebnisses, ...
_____________________

Und auch danke für die negativen Bewertungen oben. Da haben wohl Manche 
noch nicht verstanden, dass man auch numerisch ableiten kann, nennt sich 
Differenzenquotient.
Gast #7051096
Lesenswert?

Gustl B. schrieb:
> Bongo schrieb:
>> Besser wäre ein richtiger Tiefpass, als Filter gegen Rauschen.
>
> Kann man. Dadurch wird aber auch die Latenz größer.

Nö, das hängt nur von der Zahl der Samples ab, die betrachtet werden. 
Der "richtige" Tiefpass entsteht durch passendes Wichten der Samples, 
also des Einpassens der Tiefpassantwort. Das erzeugt mehr Rechenleistung 
aber nicht mehr Latzenz.
Gast #7051226
Lesenswert?

Nein. Wenn du eine niedrige Grenzfrequenz haben willst brauchst du einen 
Tiefpass der auf einen längeren Zeitraum wirkt. Also entweder mehr 
Samples oder niedrigere Samplerate.

Aber du hast zum Teil Recht, denn wenn die Anzahl der zu betrachtenden 
Samples gleich ist, dann ist ein "richtiger" Tiefpass steilflankiger als 
der gleitende Mittelwert.
Die Anführungszeichen deshalb weil ka auch der gleitende Mittelwert ein 
FIR Filter ist, nur haben eben alle Koeffizienten den Wert 1, das ist 
also einfach zu rechnen.
#7052146
Lesenswert?

Alternative zum separaten Filtern gegen Rauschen und dann ableiten, kann 
man das auch kombinieren, z.B. durch Savitzky Golay Filter. Da fittet 
man lokale Polynome und nimmt davon analytisch die Ableitung. Das kann 
als FIR Filter formuliert werden. Einziger Parameter ist dann die 
Fensterlänge.

Du musst im Prinzip nur die Koeffizienten ablesen/berechnen und als 
normales FIR Filter implementieren. Die Abtastrate muss fix sein. Das 
Ergebnis dann auf Nulldurchgang, ggf. mit leichter Hysterese prüfen. Ist 
natürlich dann immer um die Hälfte der Filterlänge verzögert.

Siehe z.B.
https://dsp.stackexchange.com/questions/54539/what-exactly-is-savitzky-golay-differentiation-filter
https://de.wikipedia.org/wiki/Savitzky-Golay-Filter
http://www.statistics4u.info/fundstat_eng/cc_savgol_coeff.html
Gast #7052534
Lesenswert?

Gustl schrieb:
> Nein. Wenn du eine niedrige Grenzfrequenz haben willst brauchst du einen
> Tiefpass der auf einen längeren Zeitraum wirkt.
????
Es ging darum, dass deine Aussage war:

Bongo schrieb:
> Gustl B. schrieb:
>> Bongo schrieb:
>>> Besser wäre ein richtiger Tiefpass, als Filter gegen Rauschen.
>>
>> Kann man. Dadurch wird aber auch die Latenz größer.

Ich schrieb zuvor, die Samples mit den Koeffizienten zu wichten, statt 
nur den gleitenden Mittelwert zu nehmen. Dadurch ändert sich nichts an 
der Latenz.
Gast #7059554
Lesenswert?

Max S. schrieb:
> Mich interessieren nur
> Zeitdifferenz, die eigentlichen Messwerte der Minima sind für mich
> uninteressant.

Max S. schrieb:
> Die Abtastrate beträgt 50 kHz, wobei das Auftreten der Minima etwa mit 5
> kHz erfolgt.

Also hast du so etwa 10 Samples pro Periode, macht 5 pro Halbwelle. Das 
ist nicht sehr fein aufgelöst, folglich wirst du um eine 
Sinus-Approximation im einfachsten Falle nicht drumherum kommen.

Hmm, das riecht für mich danach, daß man lieber die Nulldurchgänge 
berechnet als das Ergebnis an den Minima festmachen zu wollen.

Hier eine brutale Linearversion: Immer dann, wenn das Vorzeichen 
gewechselt hat, eine Linie zum vorherigen Sample berechnen und deren 
Nulldurchgang ausrechnen. Das kostet keine Winkelfunktionen sondern nur 
die Grundrechenarten. Ja, ich weiß, sowas ist wohl das Gegenteil von 
schön.

Andererseits halte ich es für eine augesprochen ungünstige Sache, den 
Zeitpunkt von Extrema als Basis für Nachfolgeberechnungen ermitteln zu 
wollen. Eben weil der Anstieg dort durch 0 geht.

So, und noch was zur erwartbaren Latenzzeit: Bei nur 10 Samples pro 
Periode muß man mit wenigstens 10% der Periode als Latenzzeit rechnen. 
Dazu kommt noch die Zeit für's Rechnen, wofür nur insgesamt 200µs zur 
Verfügung stehen. Da hat man auf vielen DSP keine Zeit für wirklich 
umfängliche Berechnungen, sondern nur für ein eher schlankes 
Verfahren.

W.S.
Gast #7061693
Lesenswert?

Ich würde in einem 10 samples breiten Fenster eine quadratische 
Regression berechnen, also die Halbwelle als Parabel approximieren. Als 
Kriterium für das Minimum würde ich die minimale Fehlerenergie 
verwenden. Damit erreichst Du subsample Auflösung. Der Aufwand ist paar 
Multiplikationen und zwei Divisionen per sample, sollte gehen.

Nochmal langsam:

Du löst für die 10 xn und die 10 yn das überbestimmte Gleichungssystem
a*xn^2+b*xn+c=yn mit minimalen Fehlerquadraten. Das ist eine 
quadratische, keine lineare Regression. Die a,b,c sind die Parameter der 
Parabel. Diese Parabel hat ihr Minimum xm bei der Nullstelle der 
Ableitung: 2*a*xm+b=0 . Dort ist das Extremum der Parabel im Fenster. 
Liegt denn das Fenster korrekt? Das berechnest Du über die 
Fehlerenergie, die quadratische Abweichung der Messwerte vom Fit: Summe 
über 1..10 (a*xn^2+b*xn+c - yn)^2 . Die Fehlerenergie hat ein Minimum 
wenn die Parabel am besten 'passt'. Wenn man eins danebenliegt ist auch 
nicht schlimm, das holt der fit wieder raus.

Lad mal die Daten hoch, dann probier ich das mal aus.

math rulez !
Cheers
Detlef
#7061711
Lesenswert?

Detlef A schrieb:
> Ich würde in einem 10 samples breiten Fenster eine quadratische
> Regression berechnen, also die Halbwelle als Parabel approximieren.

Wenn das Signal rauscharm ist, kann man auch den tiefsten Punkt, den 
davor und den danach direkt für eine Näherungsparabel nutzen. Zeitliches 
und wertliches Minimum ergeben eine einfache geschlossene Formel.
Gast #7062868
Lesenswert?

Detlef _. schrieb:

> W.S. schrieb:
>> Da ist bei deinem Beispiel auch immer ein Maximum dabei.
>
> Genau darum gehts', das hast Du verstanden. Die 10 statt
> der 3 machen Dir die Ergebnisse besser.

Nee.
Wir reden von 10 Samples pro Periode , also pro Vollwelle .

Dein Vorschlag läuft aber, wenn ich Dich richtig verstehe,
darauf hinaus, die maximale Zahl Samples je Halbwelle zu
verwenden. Das wären im vorliegenden Fall fünf Punkte.
Gast #7069523
Lesenswert?

Egon D. schrieb:
> Nee.
> Wir reden von 10 Samples pro Periode , also pro Vollwelle .
>
> Dein Vorschlag läuft aber, wenn ich Dich richtig verstehe,
> darauf hinaus, die maximale Zahl Samples je Halbwelle zu
> verwenden. Das wären im vorliegenden Fall fünf Punkte.

Da kommt dann irgendwie sowas hier raus:
https://www.desmos.com/calculator/fw0jrqxqqd

Solange der "Sinus" Achsensymmetrisch um sein Minimum ist, ist das 
tatsächlich für den Fit egal. Lediglich die Breite der Parabel und die 
Ordinate des gefitteten Minimums werden davon beeinflusst. Beides 
interessiert den TO aber nicht. Man kann es zumindest mal versuchen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren