mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Detlef _. (detlef_a)


Angehängte Dateien:

Bewertung
2 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht lesenswert
Liebe Frequenzschätzer,

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

math rulez!
Cheers
Detlef

von John D. (profdok)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Detlef

Es hat geklatpp

nochmal vielen Dank
mfg

Jens

von Nepomuk (Gast)


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

von Detlef _. (detlef_a)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

??

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.