Hallo, hoffe es gibt hier Experten, die mir helfen können das Phasenspektrum einer FFT zu bekommen. Ich benutze gerade die TI-FFT-Library und rechne eine komplexe FFT eines zweikanaligen Eingangssignals (I & Q-Kanal). Nun möchte ich gerne das Phasenspektrum berechnen. Kurz: Wie geht das? Wie trenne ich Imaginär und Realteil? Damit könnte ich dann die Phase per arctan berechnen, oder? Ich sehe immer nur das Amplitudenspektrum. Danke im Voraus Christian
Hi >Damit könnte ich dann die Phase per arctan berechnen, oder? ja >Ich sehe immer nur das Amplitudenspektrum. was heißt das? Die library sollte Dir doch Real/Imagteil liefern. Wenn Du daraus die Amplitude berechnen kannst, sollte das mit der Phase doch auch gelingen ?! Ratlos. Bißchen mehr infos kämen gut. Cheers Detlef
Hi, also mehr Infos zu meinem Problem: Im Prinzip müsste die FFT-library mir Real/Imaginärteil liefern, aber wo finde ich diese? Ich schreibe momentan die komplette 512er FFT in ein Array und schaue mir dieses als Graph an. Es ist das Amplitudenspektrum, ziemlich sicher. Ich benutze die RFFT32-Funktion und die RFFT32_ACQ-Funktion zum einlesen. Nun lese ich aus dem FFT-Handbuch, dass eigentlich bei dieser Funktion die Werte in folgender Form eingelesen werden: I-Kanal-Samples in die geraden Speicherzellen und Q's in die ungeraden. Das mache ich also. Das Problem ist nun der Output. Aus dem Handbuch glaube ich zu erkennen, dass diese Funktion den "Real Part" in die ersten N/2 Speicherstellen und den "Imag Part" in den Rest schreibt. Meinem Spektrum sehe ich aber an, dass es einfach nur ein komplexes Amplitudenspektrum ist. Das erkenne ich daran, dass wenn ich einen Kanal abschalte, ich die Spiegelfrequenz sehe und sonst nicht. Ich hoffe ich hab das bisher alles richtig verstanden. Wie komme ich nun an den Imaginär und Realteil und damit an die Phase? Woran sehe ich zB dass es sich nun um den Imag Teil handelt? Gibt andere Möglichkeiten an die Phase zu kommen? Weil der DSP ja für einen arctan bestimmt auch einige Zeit braucht (mit der IQ-Math libraray). Freu mich über Hilfe Christian
Hallo Christian,
>Ich schreibe momentan die komplette 512er FFT in ein Array und >schaue
mir dieses als Graph an.
11111111111>>>
Du kuckst Dir die Ergebnisse in dem array an, auf das magptr zeigt?
magptr aus diesem komischen struct? Das sind vermutlich die Magnitudes,
wenn man dem Namen trauen darf. Die FFT ist 'inplace', wenn ich die
doku richtig verstanden habe, d.h. die FFT-Ergebnisse stehen in dem
array, in das Du Deine Zeitsamples reingeschrieben hast.
2222222222>>>
'real fft' heißt bei ti, daß ein Zeitsignal von N-samples fft-iert
werden soll, dazu reicht eine N/2 FFT. 'Complex fft' heißt, daß der
Imaginärteil des 'Zeitsignals' auch betrachtet wird, dann braucht man
für N samples auch ne N-Punkte FFT.
3333333333>>>>
I/Q - Kanal: Du weiß, was Du tust? I/Q (inphase, quadrature phase) hat
mit imaginär und real nix zum tun! Das sind zwei Zeitsignale. Du kannst
zwei Zeitsignale mit je N Punkten in einer einzigen N-Punkte-FFT
gemeinsam verarbeiten, dazu ist aber etwas Vorverarbeitung notwendig.
Bin in die doku nicht soweit eingestiegen, daß ich weiß, ob die lib das
kann.
Vorschlag: Probleme trennen. Erstmal reinen Sinus mit der lib richtig
fft-ieren, dann die 'realfft' kucken, dann die gemeinsame FFT-Tierung
zweier Zeitsignale testen. Auch mal überlegen, ob Du die lib wirklich
nutzen willst oder Dir nicht ne FFT selber machst. Die beiden Wege sind
vielleicht gleich langwierig, bei dem einen hast Du hinterher ti's
cryptische Einlassungen verstanden, beim anderen die FFT von der Pike.
Da würde ich letzteres vorziehen.
Cheers
Detlef
Hi nochmal, danke erstmal für die Hilfe. I und Q Kanal haben meiner Meinung nach sehr wohl was mit Real und Imaginärteil zu tun. Der I Kanal repräsentiert den Realteil des Signals und der Q Kanal das um 90° gedrehte Signal und damit den Imaginärteil. Diese taste ich simultan ab und schiebe sie wie beschrieben in die FFT. Ich bin erst mal beruhigt, dass ich nicht der einzige bin, der nicht zu 100% durch das TI Handbuch steigt. Vielleicht ist die Idee mit der eigenen FFT nicht so schlecht. Ich habe bisher die TI-FFT bevorzugt, da ich dachte, dass diese wohl auf Assembler-Ebene optimiert sei und somit sehr schnell ist. A propros array, ich arbeite nicht mit der magnitude Funktion. Ich rechne nur die FFT und schreibe die Ergebnisse aus dem ipcb in ein eigenes Array. Das alles funktioniert ja auch wunderbar und hat schon etliche Std gekostet bis hierhin. Deshalb würde ich gerne hier weitermachen. Ein reiner Sinus läuft super, alles kein Problem, aber den Imaginärteil seh ich auch da nicht. Und in der TI-Beschreibung steht auch immer, dass oft nur der Realteil benötigt wird und dass man doch die magnitude berechnen soll. Will ich aber alles nicht..... Ich scheine doch ein spezielles Problem zu haben. Sie Phase scheint nicht so viele Signalverarbeiter zu interssieren.... Bin weiterhin für jede gute Idee dankbar Christian
> Ein reiner Sinus läuft super, alles kein Problem, aber den > Imaginärteil seh ich auch da nicht. häh? Reiner Sinus liefert Real/Imaginärteil abhängig davon, welche Phase er hat, wie er 'im Fenster liegt'. Wenn das nicht geht, läuft überhaupt nix super. Cheers Detlef
Hallo nochmal, natürlich is nix super, sonst würd ich ja hier nicht nachfragen. Ich hab nun meinen ADC mal mit einem Sinussignal gespeist, das TI-handbuch bemüht und das Signal im Frequenzbereich nach Real und Imaginärteil getrennt (hoffe ich zumindest:-)). Dazu hab ich die Werte mit geradem Index von den ungeraden getrennt, anschließend die geraden in den ersten Teil eines 512er Arrays gepackt und Rest in die andere Hälfte. Das Ergebnis hab ich mal als pdf angehängt. Sieht meiner Meinung nach gar nicht so verkehrt aus. Die Frequenz des Sinussignals beträgt genau 1/4 der Abtastfrequenz. Ich frage mich nur warum das Sinussignal immer genau so im Fenster liegt, dass ich immer einen Imaginärteil und einen Realteil bekomme? Müsste das nicht irgendwann mal nur zu einem Real oder nur zu einem Imaginärteil führen, weil das Fenster sich ja nicht idealerweise immer ein wenig verschiebt? Fragen über Fragen... Gruß Christian
>Fragen über Fragen... stimmt >Ich hab nun meinen ADC mal mit einem Sinussignal gespeist, Das ist die FFT eines realen Signals!? Das sieht aus wie synchrone Abtatung, also DAC und ADC Takte fest gekoppelt oder synthetisches Signal. So rauschfrei, nicht mal nen Pixelchen hin und her auf der Nulllinie (Nullinie?). Kann ich nicht glauben. Fetter DC-Offset dabei. >Die Frequenz des Sinussignals beträgt genau 1/4 der Abtastfrequenz. Die FFT eines Sinus Amplitude 1 mit 1/4 Abtastfrequenz i.e. 4 Abtastwerte pro Vollwelle im 512er Fenster hat alle Realteile 0, imag[128] ist -256, imag[512-128] = 256 (C Zählung, also 0..511), also nur zwei Spitzen und nicht 4. Phasenverschiebung von 90° macht aus dem Sinus nen Cosinus, Realteile zweimal positiv und Imaginärteile alle 0. So muß der aussehen. Deine Bilder verstehe ich nicht, Du sprichst von zwei Signalen, zu sehen sind aber 3. Das ist nen Problem mit der blöden ti-lib. Cheers Detlef
>>
Du kannst
zwei Zeitsignale mit je N Punkten in einer einzigen N-Punkte-FFT
gemeinsam verarbeiten, dazu ist aber etwas Vorverarbeitung
notwendig.<<
Nö, vorbereitet muss da gar nichts werden. Zwei reelle Signale x1 und
x2 mit einer komplexen FFT is nur
x3[n] = x1[n] + j*x2[n]
Dann
x3[n] -> FFT -> X3
Und nu kann man die Spektren der beiden Signale aus X3 rausfummeln.
>> aus X3 rausfummeln
Das meinte ich mit Vorverarbeitung. Ist aber doch wohl eher ne
Nachverarbeitung.
Cheers
Detlef
Tag nochmal, ich hab mich nochmal mit der TI-Library rumgeärgert und bei ner 128er FFT, einer Abtastfrequenz von 5 kHz ein Sinussignal mit 625 Hz abgetastet und transformiert. Die Abbildungen zeigen das Ergebnis. Die Kurven laufen so hin und her. Links hab ich den Realteil, also von Index 0 bis 128, und rechts den Imaginärteil. Das müsste es sein oder?? Jetzt müsste ich nur noch die Phase berechnen. Kann ich da einfach die IQmath Library mit der arctan-Funktion benutzen oder muss ich da noch was beachten? Gruß Christian
Hm, 8 Abtastwerte/Welle sind 16 volle Wellen auf Deine Fensterbreite, also müßte peak bei Index 16 sein, bei Dir ist er bei 8?! Aber schön spiegelsymmetrisch die Realteile und punktsymmetrisch die Imaginärteile, das ist gut. Sind wieder drei Signale dargestellt? Was ist denn da für nen fetter Störer bei Index 56 (?). Für Index 8 wäre das die 7. Oberwelle, ungewöhnlich. Hast Du einen Funktionsgenerator dran? Oder ist das Signal synthetisch, dann ist der fette Zacken falsch. Phase kannst Du einfach mit arctan berechnen, das sollte ok sein, die IQmath Library ist mir unbekannt. Viel Glück Detlef
Ein letztes Mal Hallo, wollte nur kurz ein großes DANKE sagen. Die Kiste läuft vom allerfeinsten. Die Phase bzw. die Phasendifferenz zweier Signal wird exakt ausgegeben. Hab ne Menge gelernt. Bis zum nächsten Mal vielleicht.... ;-)
Kannst du bitte mal den Code reinstellen wie du das ganze implementiert hast?
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.