Hallo,
ich versuche gerade am STM32F429 (an meinem Mini-Oszi-Projekt)
eine FFT Anzeige zu integrieren und habe dazu eine Frage
da ich mich mit FFT so gut wie gar nicht auskenne habe ich
als ersten Test einfach das fertige Beispiel von STM als "Vorlage"
genommen und in meinem Projekt implementiert (arm_fft_bin_example_f32.c)
dort gibt es ein "Input-Array" welches zu beginn mit Daten gefüllt ist,
das ein 10kHz Sinus mit weißem Rauschen entspricht.
Es stehen 2048 Werte in dem Array und jeder Zweite Wert ist eine "0"
Dieses Array wird dann per FFT in ein "Output-Array" mit 1024 Werten
umgerechnet
hier ein kleiner Ausschnitt von dem "Input-Array" :
was ich jetzt nicht verstehe ist :
warum ist jeder zweite Wert in dem "Input-Array" eine "0" ?
muss das so sein (also ist das eine Forderung damit die FFT richtig
berechnet wird) oder ist das einfach "Zufall" das jeder Zweite Wert die
Nulllinie schneidet ?
Gruss Uwe
>warum ist jeder zweite Wert in dem "Input-Array" eine "0" ?
Weil der Input aus komplexen Zahlen besteht.
Beim sampeln hast du aber nur Reale Werte. Der
Imaginärteil ist Null.
holger schrieb:> Beim sampeln hast du aber nur Reale Werte. Der> Imaginärteil ist Null.
ok, also muss ich, wenn ich das ganze richtig in meine Oszi-Software
integrieren will, ein Array aufbauen das so aussieht :
Uwe B. schrieb:> dort gibt es ein "Input-Array" welches zu beginn mit Daten gefüllt ist,> das ein 10kHz Sinus mit weißem Rauschen entspricht.>> Es stehen 2048 Werte in dem Array und jeder Zweite Wert ist eine "0">> Dieses Array wird dann per FFT in ein "Output-Array" mit 1024 Werten> umgerechnet> was ich jetzt nicht verstehe ist :>> warum ist jeder zweite Wert in dem "Input-Array" eine "0" ?
Weil bei der Eingabe in der Zeit-Domäne in diesem Fall keine irrationale
"j"-Komponente existiert und deshalb alle Koeffizienten in der
y-Richtung der Ebene Null sind. Die Eingabe stellt nämlich (wie auch die
Ausgabe) Punkte in einer Ebene dar, bestückt mit Werte_paaren_.
> muss das so sein
In dieser Anwendung schon.
> also ist das eine Forderung damit die FFT richtig> berechnet wird
Definitiv ja.
Und bei der Auswertung der Ergebnisse in der Frequenzdomäne ist auch in
deiner Anwendung die "j"-Komponente in den meisten Fällen wohl ungleich
0 und muß dementsprechend korrekt berücksichtigt werden.
c-hater schrieb:> Und bei der Auswertung der Ergebnisse in der Frequenzdomäne ist auch in> deiner Anwendung die "j"-Komponente in den meisten Fällen wohl ungleich> 0 und muß dementsprechend korrekt berücksichtigt werden.
Danke für den Hinweis...leider weis ich nicht was du damit meinst :-(
ich hab das ganze jetzt mal umgesetzt (siehe Bilder) aber da scheint was
nicht zu stimmen
die Bilder zeigen einmal die Version M1 (die ich zuerst hatte)
in denen das komplette "Input-Array" mit ADC-Messwerten gefüllt ist
und die Version M2 in der im "Input-Array" nach jedem Messwert eine "0"
steht
(beides per Debugger überprüft)
das Testsignal ist einmal ein 10kHz Sinus und einmal ein Rechteck
(aus einem sehr, sehr schlechten selbstgebauten Generator ;-(
das "Input-Array" hat 512 Einträge das "Output-Array" 256
(damit es auf die Anzeige passt, die nur 320 Pixel breit ist)
so wie es aussieht ist in der Version M2 das Output-Array in der Mitte
gespiegelt...das scheint mir so nicht stimmen zu können
"any idea ?"
Hi,
doch das stimmt. Du solltest dich mal mit der Fourier-Transformation im
allgemeinen und mehr noch mit der Darstellung der sinusoiden Funktionen
im Komplexen beschäftigen und dem ganzen Themengebiet. Dann wär Dir das
absolut klar. Was Du siehst sind negative und positive Frequenzanteile.
Aber, tschulligung, für ein Forum ist das einfach zuviel, das alles zu
erklären. Zu dem Thema findest Du bestimmt eine ganze Reihe von
Video-Tutorials auf Youtube, z.B. von Jörn Loviscach (ich hoffe den
schreibt man so...).
Gruß
S.