Forum: Mikrocontroller und Digitale Elektronik FFT mit 8 Bit Controller


von Jörg (Gast)


Lesenswert?

Hallo zusammen,
bevor ich mich nun lange einlese, wollte ich vorab mal fragen, ob es 
überhaupt denkbar ist, eine FFT mit einem 8 Bit PIC12Fx Controller (also 
kein DS PIC) durchzuführen. Und wie lange würde die Berechnung etwa 
dauern?
Die auszuwertende Messreihe ist etwa 20 ms lang und ich erwarte eine 
überlagerte Frequenz von 150 Hz bis 433 Hz. Die Abtastrate, also 
Taktfrequenz ist vom PIC12Fx vorgegeben (meines Wissens bis 32 MHz).
Für eine grobe Einschätzung wäre ich sehr dankbar!
Viele Grüße
Jörg

von Jürgen (Gast)


Lesenswert?

> 20 ms

Wieviele Meßwerte?

> 150 Hz bis 433 Hz

Möchtest du nur diese beiden Frequenzen auswerten?

von Wilhelm F. (Gast)


Lesenswert?

Jörg schrieb:

> eine FFT mit einem 8 Bit

Sowas fand ich vor Jahren mal im Internet zum 8051. Also wird es schon 
gehen.

Die Randbedingungen kenne ich jedoch nicht, weil ich das Thema nicht 
weiter verfolgte.

von Floh (Gast)


Lesenswert?

Schau dir mal Elm Chan an, der hat eine FFT für AVRs auf die Beine 
gestellt.

von Klaus Kaiser (Gast)


Lesenswert?


von Georg G. (df2au)


Lesenswert?

Falls es dir nur um das Erkennen zweier Frequenzen geht, google mal nach 
"Goertzel". Das Verfahren ist für schwache Rechner gut geeignet.

von Jörg (Gast)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die vielen schnellen Antworten. Nochmal zu meinen 
Rahmenbedingungen:
Bei der Frequenz habe ich mich vorhin einen Multiplikator vergessen. 
Tatsächlich variiert die Frequenz zwischen 3600 Hz und 10392 Hz 
stufenlos.
Ich gehe von mindestens 64 Messwerten aus. Besser wären wohl 128.

Am besten Zeige ich euch einfach das Signal, dass ich auswerten möchte. 
Dies ist jetzt eine besonders saubere Messung, teilweise habe ich aber 
auch sehr viel Rauschen dabei.

von Jörg (Gast)


Lesenswert?

Läge die Auswertung von 128 Messpunkten eher im Millisekunden- oder 
Sekunden-Bereich?

von .... (Gast)


Lesenswert?

Jörg schrieb:
> Läge die Auswertung von 128 Messpunkten eher im Millisekunden- oder
> Sekunden-Bereich?

Das schafft man im Millisekundenbereich schon.

von Dominik S. (dasd)


Lesenswert?

Hier mal ein kurzer Auszug aus dem Code der Elm Chan FFT bezüglich der 
Performance:

>> ; Points: Input, Execute, Output, Total: Throughput
>> ; 64pts: .17ms, 2.0ms, 1.2ms, 3.4ms: 19.0kpps
>> ; 128pts: .33ms, 4.6ms, 2.4ms, 7.3ms: 17.5kpps
>> ; 256pts: .66ms, 10.4ms, 4.9ms, 15.9ms: 16.1kpps
>> ; 512pts: 1.3ms, 23.2ms, 9.7ms, 34.2ms: 14.9kpps
>> ; 1024pts: 2.7ms, 51.7ms, 19.4ms, 73.7ms: 13.9kpps

von Steel (Gast)


Lesenswert?

Für 10kHz sind 128 Messwerte in 20ms schon ein bischen wenig...

von Jörg (Gast)


Lesenswert?

Super, danke! Jetzt habe ich zumindest mal eine Hausnummer.

Steel schrieb:
> Für 10kHz sind 128 Messwerte in 20ms schon ein bischen wenig...
Da hast du Recht. Ich habe mit meinen Werten im ersten Beitrag auch 
etwas gesponnen. Sorry dafür. Genau genommen müsste es genügen immer 
einen Wellenberg zu vermessen (in der Abbildung rot bei 1ms/Div) Also 
müsste ich 6-7 ms messen. Bei 10 KHz und 7 ms käme ich auf mindestens 
140pts. 256pts wäre also wohl besser. Die Länge des Wellenbergs ist 
konstant. Die Frequenz der Oberwellen variiert und ist zu ermitteln.

von Jürgen (Gast)


Lesenswert?

.... schrieb:
> Jörg schrieb:
>> Läge die Auswertung von 128 Messpunkten eher im Millisekunden- oder
>> Sekunden-Bereich?
>
> Das schafft man im Millisekundenbereich schon.

Hat der PIC12Fx überhaupt genügend RAM und eine Multiplikationseinheit? 
Für die angestrebte Frequenz werden es statt 128 eher 512 Werte werden.

von Jürgen (Gast)


Lesenswert?

Jörg schrieb:
> Da hast du Recht. Ich habe mit meinen Werten im ersten Beitrag auch
> etwas gesponnen. Sorry dafür. Genau genommen müsste es genügen immer
> einen Wellenberg zu vermessen (in der Abbildung rot bei 1ms/Div) Also
> müsste ich 6-7 ms messen. Bei 10 KHz und 7 ms käme ich auf mindestens
> 140pts. 256pts wäre also wohl besser. Die Länge des Wellenbergs ist
> konstant. Die Frequenz der Oberwellen variiert und ist zu ermitteln.

Wie oft wirst du deine Anforderungen noch geändert?

von Jörg (Gast)


Lesenswert?

Wie gesagt, am Anfang habe ich mich vertan. Sorry dafür. Jetzt sollte 
alles stimmen.

Ich wüsste nicht, dass der PIC12Fx eine Multiplikationseinheit hat.

Was das RAM anbetrifft hat der PIC12F1840 beispielsweise nur 256 Byte 
SRAM. Das bedeutet ja mit dem kann ich sowieso maximal 256 8-Bit 
Messwerte speichern, abzüglich der anderen benötigten Variablen. Sehe 
ich das richtig?
Ihr merkt sicher schon, dass ich noch Anfänger im Bereich bin, als 
verzeiht mir meine Unwissenheit...

von Dominik S. (dasd)


Lesenswert?

Das wird mit der Menge an RAM wohl nichts werden fürchte ich.
Ist schon eine Weile her, dass ich mich damit beschäftigt habe, aber 
wenn mich nicht alles täuscht brauchst du 4 mal so viel RAM wie du 
Samples hast (und dann hat der µC noch nichts anderes gemacht, keinen 
Stack, etc.).

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Jörg schrieb:
> Ich wüsste nicht, dass der PIC12Fx eine Multiplikationseinheit hat.

Dann wirst du die Elm-Chan-Zahlen mehr als verzehnfachen dürfen,
denn sie beziehen sich meines Wissens auf einen AVR mit
Hardware-Multiplizierer.

von Jörg (Gast)


Lesenswert?

Ok, danke für die Infos! Dann muss ich es wohl doch umdisponieren...

von PICfan (Gast)


Lesenswert?

Ein FFT mit einem PIC12F geht nicht.  Dafür hat Microchip viel bessere 
uCs.

Nehm ein 24er oder gleich ein dsPIC33f mit den FFT bibliotek und gut 
ist.  Mann wurde auch nicht an einem Formel 1 Rennen mit einem alten VW 
Käfer teilnehmen.  :-)

MfG
PICfan

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.