Forum: Digitale Signalverarbeitung / DSP / Machine Learning Vektorrechner?


von jörn (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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.

von jörn (Gast)


Lesenswert?

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

von Matthias (Gast)


Lesenswert?

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.

von jörn (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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.

von Thomas W. (Gast)


Lesenswert?

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