Hallo @ all Ich habe einen AT91SAM9263. Der µC läuft mit ca.240MHz. Ich soll mal abschätzen wie lange so eine FFT von 1024 Punkten auf so einem µC benötigt. Ich weiß es gibt dafür DSP Prozessoren. Ist es möglich eine FFT von 1024 Punkten innerhalb von 1ms zu berechnen?
Der Berechnungsaufwand liegt doch bei N*Log(N). Demnach ist der Berechnungsaufwand für 1024 Punkte 1024*Log(1024)= 3082 Ein µC mit 240 Millionen Rechenzyklen pro Sekunde hat demnach bei 1000FFTs pro Sekunde 240k Zyklen für eine FFT zeit. Das sollte doch ausreichen. Oder habe ich hier einen Denkfehler?
Ganz so einfach ist es nicht. Die Komplexität ist N*log(N), aber das entspricht nicht der Anzahl der Rechenoperationen oder Takte, sondern ist nur (ungefähr) proportional dazu. Wie viele Takte du brauchst ist von der Implementierung abhängig, also Int vs. Float, Wortbreite, Prozessor, Speicheranbindung. Am besten suchst du dir eine FFT-Bibliothek für ARM und schaust in die Doku oder probierst es einfach aus. ARM bietet hier eine an, optimiert allerdings nur für ARM11 und Cortex-A8: http://www.arm.com/products/multimedia/openmax/index.html
Hört sich sehr interessant an. Ich habe mal auf der Seite nachgeschaut. Dort habe ich die OpenMAX DL v1.0.2 release for ARM11 and ARM Cortex-A8 processors Funktionen gefunden. Dort ist auch eine FFT-Funktion implementiert. Jedoch habe ich doch ein ARM9 Kern (AT91SAM9263). 1. Funktioniert das denn überhaupt mit der für ARM11 erstellten Funktion? 2. Kann man dies kostenlos runterladen und benutzen? 3. Ich verwende den IAR-Compiler. Kann ich die Funktionen einfach einbinden? 4. Gibt es für die FFT-Funktionen aus Beispiele?
Johann schrieb: > Jedoch habe ich doch ein ARM9 Kern (AT91SAM9263). > > 1. Funktioniert das denn überhaupt mit der für ARM11 erstellten > Funktion? Eher nicht, da im ARM11 Prozessor erhebliche Erweiterungen des Befehlssatzes gegenüber ARM9E zu finden sind. Ohne den Code angesehen zu haben bin ich mir sicher, dass man diese Erweiterungen ausgenutzt hat. Insbesondere SIMD Instruktionen. > 4. Gibt es für die FFT-Funktionen aus Beispiele? Im ARM System Developer's Guide findest Du Beispiele für diverse DSP Algorithmen mit ARM7 und ARM9 CPUs. Gruß Marcus http://www.doulos.com/arm/
Johann schrieb: > Jedoch habe ich doch ein ARM9 Kern (AT91SAM9263). > > 1. Funktioniert das denn überhaupt mit der für ARM11 erstellten > Funktion? Hab's mir gerade angesehen: Nein, definitiv nicht. > 3. Ich verwende den IAR-Compiler. Kann ich die Funktionen einfach > einbinden? Siehe 1. Davon abgesehen sind gerade die Assembler-Routinen sehr auf RealView Compiler Tools abgestimmt. Wird also etwas Handwarbeit erfordern. Gruß Marcus http://www.doulos.com/arm/
Mal rechnen: FFT 1024 Punkte mal 10 stages der FFT (N*log(N)!) mal 2 Multiplikationen mal 4 weils komplexe Multiplikationen sind mal 1000 weils nach ner Millisekunde fertig sein soll macht ca 82Mio. Dein Prozessor läuft mit 240MHz, das heißt Du hast 3 Instruktionen pro Multiplikation, das dürfte m.E. nicht ausreichen. Cheers Detlef
FFT gehört nicht gerade zu meinem täglich Brot, aber im von mir vorgeschlagenen Buch (S. 314) wird für eine 1024 Punkt Radix-4 FFT auf einem ARM9E core eine Zyklenzahl von 66.196 angegeben. Rundet man das Ganze wegen eines möglicherweise sub-optimalen Speicherzugriffs vielleicht auf 100000 Zyklen/FFT, dann sollte da durchaus noch Luft sein. Gruß Marcus http://www.doulos.com/arm
ARM wiederum ist nicht mein täglich Brot, aber kann es sein, dass der von Dir genannte ARM nen Coprozessor hat? Der vom OP genannte hat nicht mal nen integer-Hardware Multiplizierer, soweit ich da gesehen habe, der muß die Multiplikation emulieren. Wie dem auch sei. Cheers Detlef
Guten Morgen Detlef _a schrieb: > ARM wiederum ist nicht mein täglich Brot, aber kann es sein, dass der > von Dir genannte ARM nen Coprozessor hat? Der vom OP genannte hat nicht > mal nen integer-Hardware Multiplizierer, soweit ich da gesehen habe, der > muß die Multiplikation emulieren. Keinen Coprozessor in diesem Sinne. Der ARM9E Kern hat einen Multiplizierer, der bei 16bit Operanden/32bit Ergebnis einen Taktzyklus benötigt. Sogar der ARM7TDMI hat einen Multiplizierer (allerdings nich single-cycle). Wie kommst Du darauf, dass er gar keinen hätte? Ziel der Entwicklung der ARMv5TE Architektur des ARM9E Kerns war explizit die Beschleunigung typischer DSP Algorithmen. Alle Atmel SAM9 enthalten den ARM9EJ-S Kern, soweit ich das sehen kann. Gruß Marcus http://www.doulos.com/arm/
>>Alle Atmel SAM9 enthalten den ARM9EJ-S Kern, soweit ich das sehen kann.
So ist es, ARM9EJ-S ist in dem Atmel verbaut, der hat aber keine
eingebauten Multiplizierer. Falls ich die übersehen haben sollte, bitte
ich um einen link, ich habe mir das Technical Reference Manual
angeschaut.
Cheers
Detlef
Detlef _a schrieb: > So ist es, ARM9EJ-S ist in dem Atmel verbaut, der hat aber keine > eingebauten Multiplizierer. Falls ich die übersehen haben sollte, bitte > ich um einen link, ich habe mir das Technical Reference Manual > angeschaut. Alle ARM9EJ-S haben einen eingebauten Multiplizierer. http://infocenter.arm.com/help/topic/com.arm.doc.ddi0222b/CACJFHHE.html http://infocenter.arm.com/help/topic/com.arm.doc.ddi0222b/I1028296.html Gruß Marcus http://www.doulos.com/arm/
Ähm, möchte nochmal nachhaken. OP betreibt diesen Atmel: >>Ich habe einen AT91SAM9263. Dazu auf der Produktpage: http://www.atmel.com/dyn/products/product_card.asp?part_id=4056 "The AT91SAM9263 microcontroller-based system-on-chip embeds a 200 MIPS ARM926EJ-S-based processor." Auf der gleichen Seite stehen zwei links, einer zu einem "ARM926EJ-S Technical Reference Manual", einer einer zu einem "ARM9E-S Technical Reference Manual" . In letzterem Dokument ist von Multiplizierern die Rede, in dem ARM926EJ-S Technical Reference Manual steht aber von Multiplizierern nichts, das hatte ich mir angeschaut. Was ist denn der Unterschied zwischen ARM926EJ-S und ARM9E-S ? Dein link zeigte zu Dokumenten zu einem ARM9EJ-S, anscheinend noch ein weiterer Typ, auch mit Multiplizierer. Die ARMs gibts ja wohl in verschiedenen Geschmacksrichtungen. Hat der im Atmel verbaute einen Multiplizierer? Cheers Detlef
Detlef _a schrieb: > "The AT91SAM9263 microcontroller-based system-on-chip embeds a 200 MIPS > ARM926EJ-S-based processor." > > Auf der gleichen Seite stehen zwei links, einer zu einem "ARM926EJ-S > Technical Reference Manual", einer einer zu einem "ARM9E-S Technical > Reference Manual" . In letzterem Dokument ist von Multiplizierern die > Rede, in dem ARM926EJ-S Technical Reference Manual steht aber von > Multiplizierern nichts, das hatte ich mir angeschaut. Was ist denn der > Unterschied zwischen ARM926EJ-S und ARM9E-S ? Dein link zeigte zu > Dokumenten zu einem ARM9EJ-S, anscheinend noch ein weiterer Typ, auch > mit Multiplizierer. ARM9E-S, bzw. ARM9EJ-S sind Kerne. Letzterer mit nativer Java Bytecode Verarbeitung (Jazelle). Ansonsten sind beide identisch. Diese Kerne beinhalten immer einen Multiplizierer. ARM926EJ-S ist eine Makrozelle, die einen ARM9EJ-S enthält und ihn insbesondere um Caches, MMU, TCM erweitert. Daher die vielen Querverweise auf unterschiedliche Dokumente. Einerseits werden dadurch Redundanz und Fehler durch Copy&Paste vermieden, andererseits schafft man damit auch Verwirrung bei denen, die sich nicht täglich damit beschäftigen. Manchmal wird auch von einem ARM926EJ-S Kern geredet, was genaugenommen nicht richtig ist, aber meistens egal :-) > Die ARMs gibts ja wohl in verschiedenen Geschmacksrichtungen. Hat der im > Atmel verbaute einen Multiplizierer? Ja, in jedem Fall. Gruß Marcus http://www.doulos.com/arm/
Aha, wieder was dabeigelernt, thx. Mit dem Multiplizierer sollte dann die benötigte Rechenleistung ausreichen, wenn er eine Multiplikation in 1 oder zwei cycles schafft, ist aber auf Kante genäht. 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.