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


von Sebastian B. (mircobolle)


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

von Sebastian B. (mircobolle)


Lesenswert?

vielleicht doch zu konfus? :-)

lg

von Fraller S (Gast)


Lesenswert?

Ich versteh die Frage, Antwort würde ich auch gerne wissen...

von Sebastian B. (mircobolle)


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

von MB (Gast)


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?

von Michael L. (Gast)


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

von Michael (Gast)


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

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.