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 )
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.
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
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
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
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 ?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.