Liebe Freunde der gehobenen Signalverarbeitung, immer mal wieder möchte/muss man Frequenz, Amplitude und Phase eines Sinussignals aus Abtastwerten bestimmen. Ich habe ein Matlab script angehängt, das genau dies tut. Ich habe das Verfahren auch schon in dem einen oder anderen post empfohlen. Das Hauptaugenmerk liegt dabei auf der Frequenzbestimmung. Wenn man die Frequenz schon von vorneherein kennt gibt es besseres, z.B. Goertzel. Dieses Verfahren bestimmt die Frequenz mit. Das Verfahren stammt von Prony http://en.wikipedia.org/wiki/Prony%27s_method es ist für die Anwendung reduziert auf eine einzige Frequenz. Dann wird es recht anschaulich: Die Differenzengleichung eines ungedämpften diskreten Systems lautet sig(n+1)=2*cos(w)*sig(n)-sig(n-1); Das ist eine lineare Gleichung in den Abtastwerten für den Term 2*cos(w). Die löse ich mit linearer Regression für das überbestimmte Gleichungssystem. Die herangezogenen Abtastwerte müssen nahe bei Nyquist/Halbe liegen, i.e. bei 4 Abtastungen pro Welle, sonst wird die Numerik zu schlecht. Das ist in dem script duch die FFT berücksichtigt, die zunächst die ungefähre Frequenz bestimmt. Ich hoffe, das das script vielen nützlich ist, gerne feedback. math rulez! Cheers Detlef
:
Bearbeitet durch User
Liebe Frequenzschätzer, jetzt geht das auch mit Signalen, die einen DC Offset haben. math rulez! Cheers Detlef
Hallo Detlef, das sieht sehr interessant aus. Deine vereinfachte Formel sieht schon fast minimalistisch aus! Mich würde interessieren, wie du zu der Formel genau gekommen bist. Ist der Weg und die Erklärung in einer Lektüre zu finden oder hast du das händisch gemacht?
Hallo Detlef Es hat geklatpp nochmal vielen Dank mfg Jens
Wieviel von einer Periode eines Sinus wird benötigt, damit die Werte zuverlässig stimmen?
"zuverlässig stimmen" ist ein weites Feld. Theoretisch reichen 3 beliebige Werte, bei hoher Abtastrate also nur ein kleinert Teil einer Sinuswelle. Praktisch benötigt man mehr, abhängig vom SNR ca. 1 Welle. Cheers Detlef
Detlef _. schrieb: > Die herangezogenen Abtastwerte müssen nahe bei Nyquist/Halbe liegen, > i.e. bei 4 Abtastungen pro Welle, sonst wird die Numerik zu schlecht. Wie soll man dieses Kriterum sicherstellen? Das ermöglicht doch, dass völlig falsche Werte in die Rechnung einfliessen. ??
Ich habe das Ding auf manchen Wunsch hin nach C migriert: https://github.com/DetlefSchuecker/Fit-Sinewave Viel Spass 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.