Forum: Compiler & IDEs C Einfache Signalanalyse


von Wolfgang K. (Gast)


Lesenswert?

Hallo,
Ich möchte mit meinem AVR ein Signal analysieren. Es handelt sich um 
einen "dreckigen" Sinus. Die Werte Werte stehen in einem Array. Ich 
möchte Periodendauer sowie die Werte der Minimas und Maximas ermitteln.
Bisher glätte ich die Werte mit dem gleitenden Mittelwert und 
"durchsuche" anschließend das Array nach Maximas mit einer if-Abfrage:
1
if(data[i - 1] <= data[i] &&  data[i + 1] <= data[i])
2
//Maxima gefunden
Die Periode ermittel ich mit dem Abstand zwischen zwei gefundenen 
Maximas.
Leider ist das Verfahren sehr ungenau. Um ungewollte Maximas zu 
eliminieren vergleiche ich data[i] mit dem Mittel der Folgewerte. Dies 
bringt zwar Besserung, ist aber immer noch unpräzise.

Wie gehe ich die Sache richtig an?
Nicht dass ihr mich falsch versteht, ich möchte von keinem eine fertige 
Lösung, aber es wäre toll wenn mir jemand den richtigen Weg zeigen 
könnte :-)

Grüße
Wolfgang

von Rolf M. (rmagnus)


Lesenswert?

Da bei einem Sinus um das Maximum herum in einem recht großen Bereich 
die Steigung nahe Null ist, ist es klar, daß man damit die Periodendauer 
nur sehr ungenau bestimmen kann. Das ist ja genau die Stelle, an der 
sich kleine Abweichungen am stärksten auswirken. Für die Periodendauer 
wären die Nulldurchgänge sicher besser geeignet.

PS: Der Plural von "Maximum" ist "Maxima".

von Detlef _. (detlef_a)


Lesenswert?

Ich mache nochmal Werbung für das Prony Verfahren:

Beitrag "Re: Phasenverschiebung messen (us Bereich)"

Das geht super. Man kriegt Amplitude/Frequenz/Phase wesentlich genauer 
als durch Abzählen der Nulldurchgänge, besser sogar als mit einer FFT.

Vorgehensweise: man berechnet vom Signal alle Summen aus aus einem Wert 
und dem übernächsten Wert. Trägt man diese Werte gegeneinander im 
Kooerdinatensystem auf ergibt sich eine Gerade. Die Steigung der Geraden 
ist proportional zum Cosinus der Frequenz. Hat man die Frequenz, lassen 
sich Amplitude und Phase bestimmen.

Wolfgang, stell mal deine Daten ein, dann hack ich das mal zusammen.

Cheers
Detlef

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.