Ich möchte von 1024 Werte eine FFT berechnen. Mein vorgehen ist wie folgt. Ich sample mir 1024 Werte und speicher diese ab. Anschließend berechne ich die FFT. Da ich die Werte mit einem AD-Wandler digitalisiere habe ich nur den Realteil zur Verfügung. Aus diesem errechne ich dann die FFT. Nun zu meiner Frage. Wie viele Werte hat mein Ergebnis? 1. besteht mein Ergebnis aus 512 reellen und 512 imaginären Werten? --> 1024 Werte 2. besteht mein Ergebnis aus (512 reellen und 512 imaginären Werten) + 1 -->1025 Werte? 3. Wie ist das Ergebnisarray angeordnet? 3.1 y[0] = Reateil y[1] = Imaginärteil 3.2 y[0] = bis y[511] = Realteil y[512] bis y[1023]= Imaginärteil 4. Ist das 0 Element (y[0])des Ergebnisarrays der DC-Anteil? Besteht der DC-Anteil auch aus einem Realteil und Imaginärteil?
>>Nun zu meiner Frage. Wie viele Werte hat mein Ergebnis? 1024 komplexe Werte >>3. Wie ist das Ergebnisarray angeordnet? Das hängt von der FFT ab, die Du nutzen willst. >>4. Ist das 0 Element (y[0])des Ergebnisarrays der DC-Anteil? ja >>Besteht der DC-Anteil auch aus einem Realteil und Imaginärteil? Nein, der ist rein reel, DC hat keine Phase. Der Nyquistanteil der FFT (Index 512 wenn man bei 0 zu zählen anfängt) ist auch rein reel. http://de.wikipedia.org/wiki/Diskrete_Fourier-Transformation : >>>>> Wie bei der Fourier-Transformation gelten auch für die DFT gewisse Symmetriegesetze. So wird ein reelles Signal im Zeitraum zu einem hermiteschen Signal im Frequenzraum: <<<<< Die Beträge der FFT-Koeffizienten sind spiegelsymmetrisch, die Phasen punktsymmetrisch. Deswegen reicht es aus, von den komplexen 1024 Ergebniswerten einer Transformation eines reellen 1024 Punkte Zeitsignals nur 512 Realteile und 512 Imaginärteile abzuspeichern, also wieder 1024 reelle Zahlen: FFT ist 'in place'. Cheers Detlef
Also wenn ich ein reelles Siganl aus 1024 Punkte habe bekomme ich als Ergebnis ein Signal aus 512 Realteile und 512 Imaginärteilen. Was ich dann nicht verstehe ist wenn der DC-Anteil nur aus einem Reateil besteht, dann habe ich doch eine ungerade Anzahl an Werten für die Betragsbildung. z.B. y[0] = DC-Anteil y[1] bis y[1023] ist dann für die Betragsbildung. Dies ist aber eine ungerade Anzahl an Elementen. Ich habe mal mit Labview so eine FFT simuliert. Dort habe ich mir ein Sinussignal erzeugt. Die FFT zeigt mir nun einen schönen Peak im Spektrum. Auf dem Mikrokontroller mache ich das gleiche. Nun unterscheiden sich die Amplituden jedoch. Amplitude_1: 6979,44 Amplitude_2: 13,6317 Amplitude_1/Amplitude_2 = 0,00195313 Ich habe bereits versucht die Amplitude_1 mit 1/wurzel(N) wobei N = 1024 ist zu multiplizieren. Jedoch sind meine beiden Amplituden nicht gleich. Die Frequenzen sind jedoch identisch.
1/0,00195313=512, die Amplituden der beiden FFTs sind mit 512 skaliert. Der Skalierungsfaktor ist ne Frage der Konvention, machen die einen so, die anderen anders. Wie ich schon sagte: >>>3. Wie ist das Ergebnisarray angeordnet? >>Das hängt von der FFT ab, die Du nutzen willst. gerne mal wirds so gemacht: y[0] ist der DC Anteil, rein reel, y[1] ist der Nyquistanteil, rein reel, die y[2]-y [1023] sind paarweise die real/imag Komponenten der 511 Frequenzen. Muß Du kucken, was labview oder der uController zurückliefert. Cheers Detlef
Also kann ich y[0] und y[1] so lassen wie sie sind? Warum skalliert denn jeder seine FFT unterschiedlich. Ich dachte immer das ist 1/Wurzel(N) oder Wurzel(N). Diesmal scheint es ja 1/(N/2) zu sein. Gibt es für die Skalierung feste Vorschriften? Auf jedenfall schon mal vielen Dank für die super Infos
>>Also kann ich y[0] und y[1] so lassen wie sie sind?
Das ist eine Vermutung, ich habe keine Ahnung wo labview und Deine uC
Implementation die Daten hinschreiben.
Drei Tests machen:
1) eine einzige Sinuswelle in die 1024 Werte schreiben, bißchen
pasenverschoben: sin(2*pi*(0:1023)/1024+pi/2), wo stehen die real(imag
Komponente nach der Transformation ? (Das hast Du ja schon gemacht)
2) Reiner DC. Wo steht die Einzelkomponente?
3) Nyquist: -1,1,-1,1,-1,............... . Wo steht die nach der Trafo?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.