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
> 20 ms Wieviele Meßwerte? > 150 Hz bis 433 Hz Möchtest du nur diese beiden Frequenzen auswerten?
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.
Falls es dir nur um das Erkennen zweier Frequenzen geht, google mal nach "Goertzel". Das Verfahren ist für schwache Rechner gut geeignet.
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.
Läge die Auswertung von 128 Messpunkten eher im Millisekunden- oder Sekunden-Bereich?
Jörg schrieb: > Läge die Auswertung von 128 Messpunkten eher im Millisekunden- oder > Sekunden-Bereich? Das schafft man im Millisekundenbereich schon.
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
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.
.... 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.
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?
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...
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.).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.