www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik [C/C++] Phasenerkennung eines Signals


Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.

ich beschäftige mich gerade etwas mit der Theorie hinter der FFT. Ein 
Punkt der FFT ist ja je Filter die Phase der Eingangssamples zu drehen 
und dann die Werte aufzusummieren. Also Phasenrichtig aufzusummieren, 
damit am Ende ein Vektor herauskommt.

Jeder Samplewert besteht ja aus Imaginär (I) und Realteil (Q)...

Sagen wir mal der ADC liefert Werte mit 32 kHz. Nun kommt der Trick, 
dass man so tut als würden die Werte von einem 8 kHz ADC kommen.. diese 
kennzeichne ich im Strom mal mit "x".... einer zweiten 8 kHZ der 90° 
Phasenversetzt zum ersten läuft wäre auch in dem Strom enthalten: diesen 
kennzeichne ich mal mit "o"

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
 x   o           x   o           x   o
 ---->
 90°

xo werden dann immer als Vektoren angesehen. Also aus 320 
Eingangssamples bleiben dann nur noch 80 Vektoren ...

----

Das heißt also, dass der x-Strom z.b. für den Sinusanteil (I) und o für 
den Cosinusanteil (Q) steht?

Aus diesen 2 Werten kann man ja Amplitude und Phase ermitteln.

amplitude = sqrt( (o*o) + (x*x) )
Phase = arcsin (x / amplitude )

So kann ich also die Phase für jedes Wertepaar berechnen?
Und dann ganz "einfach" über Differenzbildung der aufeinanderfolgenden 
Phasen erhalte ich dann den Phasenversatz??

----

Wie werden denn in der FFT Phasendrehungen realisiert? Z.b. wenn ein 
Sample für einen bestimmten Filter um 90 Grad gedreht werden muss??


Hoffe das ganze war jetzt nicht ganz so konfus wie es mir gerade 
vorkommt :-)

liebe grüße

Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht doch zu konfus? :-)

lg

Autor: Fraller S (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versteh die Frage, Antwort würde ich auch gerne wissen...

Autor: Sebastian B. (mircobolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fraller S wrote:
> Ich versteh die Frage, Antwort würde ich auch gerne wissen...

Guten Morgen,

da bin ich ja froh, dass ich nicht der Einzige bin :-)

Vielleicht findet sich ja noch jemand der hier ein bissl "Licht ins 
Dunkel" bringen kann ;-)

lg

Autor: MB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie werden denn in der FFT Phasendrehungen realisiert? Z.b. wenn ein
Sample für einen bestimmten Filter um 90 Grad gedreht werden muss??

Könntest du das bitte etwas konkretisieren?

Autor: Michael Lenz (hochbett)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,


> Wie werden denn in der FFT Phasendrehungen realisiert? Z.b. wenn ein
> Sample für einen bestimmten Filter um 90 Grad gedreht werden muss??

unter Verwendung der FFT werden Phasendrehungen normalerweise durch 
Multiplikation der Spektren mit

  exp(j phi)      bzw.     exp(-j phi)

und anschließender Rücktransformation durchgeführt.

Die Multiplikation mit exp(j phi) entspricht einer Drehung des 
Fourierkoeffizienten um den Winkel phi.

Es ist dabei unbedingt zu beachten, daß die Fourierkoeffizienten mit den 
negativen Frequenzen (bzw. den Frequenzen > f_Abtast/2 - das ist ja 
dasselbe) in die entgegengesetzte Richtung gedreht werden wie die 
Fourierkoeffizienten zwischen 0 und f_Abtast/w.

Das kannst Du Dir recht einfach überlegen, wenn Du die Formel für die 
kontinuierliche Fouriertransformation diskretisierst.

Für positive und negative Frequenzen dreht der Zeiger in die 
entgegengesetzte Richtung.

Was mit der Frequenz f0=0 und f1=f_Abtast/2 passiert, müßtest Du Dir 
nochmal genauer anschauen; das vergesse ich immer; es kommt nämlich 
darauf an, ob Du eine geradzahlige oder ungeradzahlige Anzahl von 
Abtastwerten hast.

Willst Du nur eine 90°-Phasendrehung durchzuführen, schaust Du am besten 
nach einem Paket, das die sogenannte "Hilberttransformation" dürchführt.

In Matlab/GNU-Octave kannst Du die Funktion hilb(...) bzw. hilbert(...) 
verwenden, um eine 90° Phasendrehung durchzuführen. Dann kannst Du 
schonmal schauen, wie sich das auswirkt.


Gruß,
  Michael

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ehrlich gesagt verstehe ich die ganze Beschreibung nicht so richtig.

Einen einzelnen "Samplepunkt" kann man sowieso nicht in der Phase 
verschieben, da es hier keinen Bezug gibt.

Nimmt man ein peridisches Signal f(x) zu dem man eine Frequenz angeben 
kann, ist eine Phasenverschiebung einfach zu realisieren => zeitliche 
Verschiebung der Funktion.

Bei einem komplexen Gemisch mehrerer Frequenzen ist die 
Phasenverschiebung nicht mehr so einfach. Eine einfache zeitliche 
Verschiebung des Signals resultiert in unterschiedlichen 
Phasenverschiebungen je Frequenz. Dadurch ändert sich in der Regel auch 
die "Signalform".

Beispiel_1: Ein komplexes Signal besteht aus den Frequenzen f1 und f2 
mit f2 = 10 * f1. Verzögert man das Signal so, dass f1 eine 
Phasenverschiebung von 18° erfährt, so wird f2 um 180° verschoben.

Beispiel_2: Ein Rechtecksignal enthält die Grundfrequenz sowie alle 
ungradzahligen Harmonischen (3,5,7,9,11,...).
Eine zeitliche Verschiebung liefert wieder ein Rechtecksignal nur.
Eine Phasenverschiebung jeder einzelnen Phase jedes Frequenzanteils um 
90° (d.h. phi_1 = 90°, phi_3 = 90°, phi_5=90°) liefert ein völlig andere 
Signalform (siehe Wikipedia - hilbert transformation).

Solltest Du vorhaben ein Signal mit der vierfachen Datenrate abzutasten 
und dann die Infomationen von zwei verschiedenen Zeitpunkten zu nehmen, 
hast Du noch lange keine Fouriertransformation geschweige denn eine 
Phasenverschiebung von 90° realisiert!

Die FFT ist schon relativ komplex zu rechnen! Da braucht man schon etwas 
Rechenpower. Die eigentliche Idee kann man sich anhand der Formel 
verdeutlichen:
Im Prinzip stellt die Summe über den Term "e^jwt" (Integral bei der 
kontinuierliche Fourier-Transf.) einen "Frequenzselektor" dar.
Man nimmt seine Eingangssamples, multipliziert diese mit einer 
Sinusfolge fester Frequenz und Summiert alle Produkte auf. Enthält das 
Eingangssignal genau diese Frequenz, dann liefert die Summe ein von Null 
verschiedenes Ergebnis. Ist eine etwas andere Frequenz enthalten liefert 
die Summe (in etwa) null, da der Sinus orthogonal zu sich selbst ist, 
wenn sich die Kreisfrequenzen unterscheiden.

Durch die Rechnung mit einem komplexen Argument liefert die 
Fouriertransformation zusätzlich die "Phasenverschiebung" bei jeder 
einzelnen (diskreten) Frequenz.


Was genau möchtest Du jetzt eigentlich machen?

Gruß Michael

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.