Forum: Projekte & Code Frequenz, Amplitude und Phase eines Sinussignals bestimmen


von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

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
von Detlef _. (detlef_a)


Angehängte Dateien:

Lesenswert?

Liebe Frequenzschätzer,

jetzt geht das auch mit Signalen, die einen DC Offset haben.

math rulez!
Cheers
Detlef

von John D. (profdok)


Lesenswert?

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?

von Jens (Gast)


Lesenswert?

Hallo Detlef

Es hat geklatpp

nochmal vielen Dank
mfg

Jens

von Nepomuk (Gast)


Lesenswert?

Wieviel von einer Periode eines Sinus wird benötigt, damit die Werte 
zuverlässig stimmen?

von Detlef _. (detlef_a)


Lesenswert?

"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

von Mirko (Gast)


Lesenswert?

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.

??

von Detlef _. (detlef_a)


Lesenswert?

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
Noch kein Account? Hier anmelden.