Forum: Mikrocontroller und Digitale Elektronik ARM7 ? Reicht die Performance ?


von Markus M. (dermarkus)


Lesenswert?

Hallo Forum,
in meinem aktuellen Projekt verwende ich einen Kalman Filter mit 10 
Zuständen, der mit 500Hz Filtertakt arbeitet. Der Filter rechnet 
ausschliessloch mit float Daten. Neben Floatingpoint Arithmetik ( +-*/ ) 
verwende ich auch eine handvoll von mathematischen Funktionen ( cos sin 
sqrt ).
Bisher existiert der Filter auf meinem PC unter Matlab. Jetzt würde ich 
ihn gern auf ein Embedded System bringen. Die Ein- / Ausgangsdaten würde 
ich vorzugsweise gern per I2C ein- / ausgeben.

Bisher habe ich ein 400Mhz Gumstix Modul für diese Aufgabe eingeplant. 
Hier hat man natürlich Overhead durch das BS.
Interessant wäre, ob eine ARM7 CPU die nötige Performance hätte so eine 
Aufgabe zu bewältigen.
Mit den ARM´s kenn ich mich bisher noch überhaupt nicht aus. Ich hab 
zwar schon einige Stunden gegoogelt und erste Grundlagen in Erfahrung 
gebracht, aber ich hab keine Ahnung ob die Performance reicht. 
Vielleicht habt ihr schon ähnliche Anwendungen gehabt und könnt mich 
beraten ?

Hier noch ein einige Anforderungen an die CPU:
- Min 128kB Flash
- Min 32kB Ram
- I2C Interface
- Möglichst wenige externe Komponenten
- Mit Hobby mitteln lötbares Gehäuse ( -> kein BGA oder sowas :D )

von Matthias (Gast)


Lesenswert?

Hi

zur genauen Abschätzung solltest du vielleicht mal die genaue Anzahl von 
Operationen angeben, die für die Filterberechnung gebraucht wird.
Ich kenne Kalman Filter nicht, habs aber gerade mal unter Wikipedia 
nachgeschlagen. So wie ich das sehe brauchst du also mindestens die 
Multiplikation einer 10x10 Matrix mit einem 10er Vektor, das entspricht 
100 Multiplikationen und Additionen. Eventuell auch noch mehr, ich weiß 
ja nicht welcher der restlichen Berechnungen auf der Seite du noch 
ausführen musst.

Das sind also mindestens 50k Floating Point Additionen und 
Multiplikationen. Das hört sich bei zB 70MHz Takt nach nicht allzu viel 
an, Problem des ARMs ist aber, dass er keine FPU hat, und darum solche 
Berechnungen recht umständlich über Softwarelösungen machen muss. Ich 
halte einen ARM7 dafür ungeeignet. Ein ARM9E würde wohl schon etwas 
besser gehen durch DSP Erweiterung mit MAC Befehl, aber ihm fehlt die 
Floating Point Unterstützung immer noch. Wenn ARM, dann würde ich einen 
mit FPU empfehlen, entweder die hauseigene FPU (Vector Floating Point 
(VFP)), oder zB die ARM9 Serie von Cirrus ab EP9302, die eine andere FPU 
(MaverickCrunch Coprocessor) mit integriert hat. Solche 
leistungsfähigeren Prozessoren haben aber kein integriertes Flash und 
Rom mehr.

Eventuell kann man den Algorithmus auch auf Festkomma umbauen, dann 
wirds eher was mit einem Prozessor ohne FPU. Ansonsten sind für 
Filteralgorithmen natürlich die DSPs gut geeignet. Aber auch hier sind 
die einfach zu handhabenden Typen nur Festkommafähig.

von Markus M. (dermarkus)


Lesenswert?

Hi Matthias,
die genaue Anzahl weiss ich so nicht. Die müsste ich erst nachrechnen, 
aber sie liegt deutlich über 100 da auch Matritzen miteinander 
multipliziert werden. Auf Festkomma möchte ich ungern umstellen, da es 
mir zu kompliziert ist. Ein ARM mit FPU wäre nett, aber sicher sehr sehr 
Hardware aufwendig. Ich denke ich bleibe dann beim Gumstix. Der 
verwendet einen XSCALE. Das ist doch auch ein ARM Kern ohne FPU (?). Ich 
hoffe ich kann das Problem dann einfach durch die hohe Taktrate 
erschlagen :D

von Hans W. (Firma: Wilhelm.Consulting) (hans-)


Lesenswert?

ein xscale ist ein arm... intel hat die dinger nur irgendwie 
erweitert... schau dir doch mal eine fixedpoint-lib an...

einer der ersten hits bei 
google:http://www.kvraudio.com/forum/viewtopic.php?t=161048

in übrigen bin ich der meinung das ein blackfin für sowas besser 
geeignet sein dürfte als ein arm... ist immerhin eine richtige dsp...

73

von Peter D. (peda)


Lesenswert?

Ich sach mal auch, entweder Du nimmst nen DSP mit FPU oder Du 
überwindest Deine Angst und optimierst den Algorithmus. So schlimm ist 
das garnicht.


Es empfiehlt sich eh, Abschätzungen über die benötigte Genauigkeit und 
den Wertebereich zu machen, sonst kann man auch bei float ganz schön auf 
die Nase fallen.

Wenn die Eingangsgrößen z.B. von nem 8Bit-ADC kommen, kann man auch 
nicht mehr Genauigkeit dazu schummeln.


Außerdem ist ein Kalman Filter ein iteratives Verfahren, d.h. man kann 
den Großteil der Ergebnisse einfach aus den vorherigen Berechnungen 
übernehmen.


Ich würde mich überhaupt nicht wundern, wenn bei geschickter Umstellung 
der Gleichungen sogar ein 8Bit-AVR ausreicht.


Peter

von Markus M. (dermarkus)


Lesenswert?

Noch eine Frage zum Blackfin. Ich habe gerade nachgeschlagen und der 
Blackfin hat auch keine FPU ? Wo ist dann der Vorteil von Blackfin 
gegenüber den ARM´s ?

von Matthias (Gast)


Lesenswert?

Blackfin ist so ein halber DSP, imho auch nicht umbedingt auf das was du 
machen willst optimiert. Er läuft bei hoher Taktfrequenz, und schafft 
pro Taktzyklus afaik 2 16Bit, oder sogar 4 8Bit Operationen parallel. 
Allerdings wie du schon sagtest, ist es auch ein Fixed Point Prozessor, 
und afaik auch keine Harvard Architektur wie die "richtigen" DSPs.
Ich würde vermuten, dass der Blackfin in der Beziehung Fixedpoint 
Signalverarbeitung ähnlich wie ein ARM11 ist, der ja auch DSP 
Erweiterungen und SIMD Unterstützung hat.
Die SHARC Reihe wäre wohl eher etwas, um schnelle Floating Point 
Berechnungen durchzuführen.

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.