Forum: Digitale Signalverarbeitung / DSP / Machine Learning FFT auf AT91SAM9263


von Johann (Gast)


Lesenswert?

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?

von Johann (Gast)


Lesenswert?

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?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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

von Johann (Gast)


Lesenswert?

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?

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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/

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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/

von Detlef _. (detlef_a)


Lesenswert?

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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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

von Detlef _. (detlef_a)


Lesenswert?

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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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/

von Detlef _. (detlef_a)


Lesenswert?

>>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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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/

von Detlef _. (detlef_a)


Lesenswert?

Ä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

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

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/

von Detlef _. (detlef_a)


Lesenswert?

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
Noch kein Account? Hier anmelden.