Forum: Mikrocontroller und Digitale Elektronik microchip FFT example code


von Rüdiger (Gast)


Angehängte Dateien:

Lesenswert?

Ich schaue mir grad das Beispiel Programm von Microchip an und hätte 
dazu die ein oder andere Frage!!!
Ich habe vor ein Signal von 0-20000Hz zu analysieren, und auf einem LCD 
Display anzuzeigen. In dem Beispiel wird ein Eigangssignal von 1kHz 
verwendet, müsste ich in dieser Stelle mein eigenes Eingangsignal 
speichern???
Muss ich an den Twiggle Faktoren noch irgendetwas ändern, außer halt die 
Länge festzulegen???
Wo wird das Ergebnis der FFT gespeichert????
Oder bin ich komplett falsch davor und es wird mir der größte 
Frequenzanteil angezeigt:
/* Compute the frequency (in Hz) of the largest spectral component */
Ist das Beispiel überhaupt für mein Vorhaben geeignet, wie gesagt ich 
habe vor ein 0-20000Hz breites Frequenzspektrum zu untersuchen und die 
zugehörigen Amplitunden zu den jewahligen Frequenzanteilen 
herauszufinden.

Ich hoffe mir kann jemand von euch weiterhelfen, auch wenn meine Fragen 
evlt. ein bisschen bescheuert sein mögen!!!

von Gerhard (Gast)


Lesenswert?

Hi

"In dem Beispiel wird ein Eigangssignal von 1kHz
verwendet, müsste ich in dieser Stelle mein eigenes Eingangsignal
speichern???": ja

"Muss ich an den Twiggle Faktoren noch irgendetwas ändern, außer halt 
die
Länge festzulegen???" ? Welche Länge hast du denn vor ?

"Wo wird das Ergebnis der FFT gespeichert????": heisst FFTComplexIP 
nicht FFTComplex in place ? Also werden die Signaldaten von der FFT 
überschrieben.

ich bin jetzt nicht mehr so in der materie drin. das Beispiel sieht aber 
für mich schon aus, wie ne FFT. Also, sollte dein Vorhaben gelingen. 
Wenn ich mich recht erinnere gabs noch eine Vorgabe für die Daten. Steht 
da nicht noch irgendwo, dass die Werte kleiner +-0.5 sein müssen ?

Gerhard

von Rüdiger (Gast)


Lesenswert?

Äh ja, da steht auf jeden Fall dass die Daten innerhalb der fractional 
fixed-point range von [-0.5, +0.5] sein müssen.
Was bedeutet das genau ich hab bis jetzt immer nur mit Ganzzahlen 
gearbeitet zumindest wenn es um Mikrocontroller anwendungen ging, wenn 
ich jetzt keine Ahnung einen Wert einlese der 5V beträgt müsste ich 
diesen dann mit 0.1 multiplizeren oder wie muss ich das verstehen???
Das Signal sollte in 128 verschiede Frequenzspektren aufgeteilt werden.

von Rüdiger (Gast)


Lesenswert?

hmmmm

von Gerhard (Gast)


Lesenswert?

Hi

ja, fractional ist eine besondere Form der Fix-point Arithmetik. Dazu 
gibt hier einige Artikel. Als ich mich zum ersten mal mit dsPIC und FFT 
beschäftigt habe, bin ich da auch zum ersten Mal mit dem Begriff 
konfrontiert worden. 15 Bit-fractional wird auch mit 1.15-fractional 
bezeichnet. Der Wertebereich geht von +1 bis -1 (oder +0.999 bis -1 
schau mal bei wiki, da steht das genauer erklärt). Auf jeden fall 
bekommst du 16Bit-fractional, wenn du eine float-Zahl (die kleienr 1 
sein muss) mit 32768 (2hoch15) multiplizierst (aber schau mal bei wiki)
Auf jeden fall muss der gesamte Wertebereich deines Signals kleiner als 
+-0.5 sein, damit bei der FFT kein Müll rauskommt.
Für 128 verschiedene FFT-Werte brauchst du 256 "Messwerte", aber das 
weisst du vermutlich.

Gerhard

von Gerhard (Gast)


Lesenswert?

Hi
in dem Zusammenhang erscheinen mir die Zahlen im Beispiel etwas zu 
gross: 7fff ist doch +0.999 und 8001 ist wohl -1 ? Oder täusch ich mich 
da ?

Gerhard

von Rüdiger (Gast)


Lesenswert?

Ne ich glaub nicht, aber in der Readme steht (wenn ich es nicht falsch 
verstanden habe) dass das Input Signal noch einmal bearbeitet wird um in 
dem "richtigen" Wertebereich zu liegen!!!

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.