Moin, im Rahmen eines Projektes müssen viele 8bit-Werte von einander subtrahiert und addiert werden und auch mal der Median einer Liste gebildet werden. Optimal für eine schnelle Abarbeitung wären da natürlich SIMDs. Leisten das im Controllerbereich nur DSPs oder gibt es schnelle Mikrocontroller mit solchen Funktionen (Sind die dann auch besser?)? Und können die mir auch beim Median helfen? Ich bin nämlich noch unschlüssig, ob ich mit einem DSP wirklich gut beraten wäre. Gruß, jörn
Bei reinen 8bit Additionen und Subtraktionen hilft ein DSP Kern nicht viel. Es gibt auch normale Mikrocontroller die solche Operationen genau wie ein DSP in einem einzigen Takt schaffen. Wirklich von Vorteil wären hier Prozessoren mit 2 oder mehr Kernen, diese sind aber soweit ich weiß nur unter DSPs verbreitet, also wäre das ein Grund für sie. Eventuell kann man schauen, ob man vielleicht 2 oder 4 der 8Bit Werte in einen 32Bit Wert stopft und mit diesen rechnet. Dadurch kann man die Sache auf 32Bit Systemen unter Umständen beschleunigen, allerdings funktioniert das ja nur wenn alle Werte die gleiche Operation benötigen, und wenn man sich sicher ist keinen Überlaub innerhalb der 8bit Werte zu erzeugen. Median würde auf einem DSP auf jeden Fall schneller gehen, da man hier die MAC Anweisung verwenden kann, die eine Multiplikation und eine Addition in einem Taktschritt ausführt. Damit braucht der DSP für die Mittelwertberechnung nur genau so viele Schritte wie du Werte hast, über die du mitteln willst. Es gibt auch normale Mikrocontroller mit DSP Erweiterungen, ich denke zB die schnelleren ARM Kerne oder PowerPCs. Bei 8bit Werten funktioniert eventuell auch ein dsPIC.
Ich dachte es mir eigentlich so, dass ich einen Prozessor mit 32 Bit Registerbreite verwenden und dann via SIMD immer jeweils vier Byte gleichzeitig subtrahiere. Ich habe mir mal den Blackfin genauer angeschaut und der scheint in der Richtung einiges mitzubringen. Deine Median-Funktion habe ich auch gefunden, bin aber nicht ganz zufrieden damit. Ich wollte Rauschen dadurch unterdrücken, dass ich eine Reihe von Wertem um den zu mittelnden sortiere und daraus dann die Mitte auswähle. Bringt der Blackfin für so ein Vorhaben auch schon Instruktionen mit? Und wie muß ich mir das Sofwaredesign mit GCC vorstellen? Verwendet der die SIMD-Operationen oder muß man die entsprechenden Funktionen in Assembler schreiben? Gruß, jörn
hi ob das mit den 4x8 bit operationen statt 1x32bit operationen funktioniert weiß ich leider nicht. Dazu müsste im Prinzip die ALU des Prozessors umschaltbar sein, um genau zu sein müsste bei den einzelnen Addern das Carry abgeschaltet werden und dann 4 statt 1 carry flag erzeugt werden. Eventuell kannst du mal in die Assemblerbefehlssätze der in Frage kommenden Prozessoren schauen, ob die so etwas anbieten. Für die Prozessorauswahl solltest du schauen, wieviel von den Additionen und Subtraktionen du in welcher Zeit brauchst. Oder eben genauer erläutern, was das ganze tun soll. Der Blackfin ist sicherlich schon ziemlich schnell, aber vielleicht brauchst du so etwas auch garnicht, sondern kannst mit etwas einfacherem und billigerem arbeiten? Wie du mitteln willst kann ich mir gerade nicht vorstellen, kannst du das evtl mal an einem Beispiel verdeutlichen? Ob der gcc vorhande SIMD Befehle benutzt, wenn man nur in C schreibt, hängt wohl stark von der Implementierung des entsprechenden gcc ab. Kann dir nicht sagen, welcher gcc da wie gut ist. Für optimale Performance lohnt es sich unter Umständen schon kritische Stellen in ASM zu schreiben.
Die Performance eines Blackfin brauche ich wohl mindestens. In einer Reihe von Datenblättern habe ich auch diese SIMD-Funktionen gefunden. Auch den entsprechenden Median-Filter habe ich gefunden, auch wenn die Implementierung vielleicht etwas langsam war. Vielleicht gibt es ja Prozessoren, die diesen Filter begünstigen. Er ist zur Unterdrückung von Rauschen in Signalen gedacht. Hier nun das Beispiel: Als Siganl eine Reihe von Spannungswerten mit einer deutlichen Kante, allerdings verrauscht: 1 2 2 4 2 3 2 7 6 8 7 2 7 6 8 7 7 usw. Der Filter nimmt nun um den zu mittelnden Wert eine Reihe von Daten, hier mal die 2 (eindeutig ein Rauschen) : 6 8 7 2 7 6 8, sortiert das: 2 6 6 7 7 8 8 und nimmt das mittlere Element: 7. Dadurch kann kantenstabil (die Signalkante im obigen Beispiel bliebe erhalten.) geglättet werden, während Fehler bei einer einfachen Mittelung "verschmiert" werden. Da dieser Filter vielleicht recht Gängig ist, könnte es sein, das einige DSPs diesen bereits implementieren oder wenigstens die Soertierfunktioenen. Ist das so? Gruß, jörn
Kaum, höchstens als Funktion in C. Eigentlich geht man an so etwas anders heran: Das Eingangssignal wird zunächst mittels eines analogen TP in seiner Frequenz berschränkt (Anti Aliasing). Dafür reicht im Falle eines Blackfin locker ein TP 1. Ordnung, da der ziemlich schnell abtasten kann. Man muss dann die Grenzfrequenz nur niedrig genug legen. Dieses Signal kann man dann nach dem Abtasten über ein FIR bzw. IIR-Tiefpass (Entwurf mit Matlab oder diverser Freeware) jagen und danach je nach Bedarf immer noch ein Down-Sampling vornehmen. Genau auf so etwas sind die meisten DSPs optimiert. Das dafür etwas Handarbeit (Coding) nötig ist, liegt in der Natur der Sache - wäre auch schlimm, wenn es jeder könnte :-) Wer hat dich auf die Idee mit dem Median-Filter gebracht? Der gängigen Literatur entspricht das eigentlich eher nicht.
Medianfilter haben durchaus ihre Berechtigung. Sie sind zwar nichtlinear und eignen sich nicht um normales Rauschen zu unterdrücken, liefern aber sehr gute Ergebnisse, wenn es darum geht sporadische Störungen zu unterdrücken. Beispiel: {6 8 7 200 7 6 8} Median liefert 7, Mittelwert 35. Oft verwendet werden solche Filter in der Bildverarbeitung, siehe: http://de.wikipedia.org/wiki/Medianfilter Das Beispiel "Median-Bildfilterung eines Bildes mit weißen Störpixeln" ist schon beeindruckend, mach sowas mal mit nem linearen Filter. Gruß, Thomas
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.