Forum: Digitale Signalverarbeitung / DSP / Machine Learning Vorteile eines DSPs


von Tobias K. (saibot1)


Lesenswert?

Zuerst: Ich habe noch nie mit einem DSP gearbeitet. Mein Wissen 
beschränkt sich in etwa auf den Wikipedia Artikel zu DSPs.

Angenommen ich habe eine Aufgabe bei der mit 100 KHz Frequenz ein 
analoger Wert gemessen, durch ein paar FIR Filter gejagt, auf 
irgendwelche Randbedingungen überprüft, und dann sofort wieder 
ausgegeben wird.

Hat dann ein DSP große Vorteile gegenüber z.B. einem 32-bit ARM Cortex 
M3 Microcontroller @ 100MHz ?

Oder anders gefragt: Was ist, abgesehen von ein paar kleinen 
Optimierungen, die wirkliche Stärke eines DSP?

Ob ich die Messwerte einzeln verarbeiteten will, oder ob es z.B. möglich 
sein wird 100 Messwerte auf einmal verarbeiten, darüber bin ich mir noch 
nicht ganz im Klaren. Das System muss halt eine sehr kurze Reaktionszeit 
haben.

Tobias

von Floh (Gast)


Lesenswert?

Tobias K. schrieb:
> Oder anders gefragt: Was ist, abgesehen von ein paar kleinen
> Optimierungen, die wirkliche Stärke eines DSP?

Du hast es schon erkannt, der Vorteil eines DSPs ist die Spezialisierung 
auf "digital signal processing".
Dadurch ist ein DSP bei gleicher Befehlsrate leistungsfähiger als ein 
"normaler" Prozessor bei Signalverarbeitungsproblemen.

Ob man dann wirklich einen Spezialisten oder doch lieber einen 
dementsprechend schnelleren Generalisten holt, um eine Aufgabe zu 
erledigen, hängt von den restlichen Vorgaben ab (Kosten, Stromverbrauch, 
Gehäuße, zusätzliche Aufgaben...)
:-)

von Tobias K. (saibot1)


Lesenswert?

Wie kann ich denn grob abschätzen welchen Geschwindigkeitsvorteil der 
DSP bringt? Muss man dafür die genaue Funktionsweise kennen?

Geht es hier eher um Faktor 2 oder Faktor 10 oder 100?

von Thomas (Gast)


Lesenswert?

Wenn der ARM schnell genug für die Aufgabe ist, dann solltest du auch 
den ARM nehmen.
Außer den Geschwindigkeitsoptimierungen für DSP Aufgaben hat ein DSP 
nämlich nur Nachteile gegenüber einem normalen Controller.
Das fängt beim Preis und der Peripherie an und hört bei der Einarbeitung 
auf.

von Frank K. (fchk)


Lesenswert?

Tobias K. schrieb:
> Wie kann ich denn grob abschätzen welchen Geschwindigkeitsvorteil der
> DSP bringt? Muss man dafür die genaue Funktionsweise kennen?
>
> Geht es hier eher um Faktor 2 oder Faktor 10 oder 100?

Das hängt von Deinen Algorithmen ab. Typische DSP-Erweiterungen sind:

- Multiply-and-Accumulate: x=x+a*b als Einzelbefehl in einem Taktzyklus. 
Das wird besonders bei Filteralgorithmen benötigt. Bei den meisten 
Standardprozessoren braucht man dafür 2-3 Befehle

- Saturierung anstelle überlauf. Heißt also: Ein Registerinhalt bleibt 
beim Überlauf beim höchsten positiven Wert kleben, anstelle auf 0 oder 
-1 umzukippen.

- Unterstützung von Festkommaformaten.

- Unterstützung von Ringpuffern bei der Adressierung

- Unterstützung von Bit-Reverse bei der Adressierung (für FFT nützlich)

Wenn Deine Algorithmen davon profitieren, dann kannst Du einen großen 
Nutzen durch die Implementierung auf einem DSP ziehen.

PS: Wenn Du jetzt einen Cortex M3 hast, kannst Du Dir auch den M4 
anschauen.

fchk

von Tobias K. (saibot1)


Lesenswert?

OK, Danke für die Antworten. Das hört sich für mich eher nach einem 
Geschwindigkeitsvorteil von 2 bis 5 an. Dafür lohnt sich für mich die 
Einarbeitung nicht.
Außerdem bedeutet das, dass man um Code-Optimierung so oder so nicht 
herum kommt. Mit ausreichend Optimierung müsste das Problem auch mit 
einem ARM lösbar sein.

von Dietrich (Gast)


Lesenswert?

Hallo,

ein großer Nachteil bei der DSP-Programmierung ist, dass man die 
wesentlichen Algorithmen, die oben schon genannt wurden, quasi nur in 
Assembler effizient schreiben kann, da die meisten Compiler nicht auf 
jeden Spezialbefehl eines DSP optimiert sind und daher nur 
Standardalgorithmen verwenden.

Bei manchem Hersteller löst sich das Problem teilweise durch in 
Assembler geschriebene Bibliotheken für den jeweiligen DSP.

Wenn du allerdings den Cortex-M3 schon kennst und trotzdem 
DSP-Funktionen nutzen willst, würde sich vielleicht ein Umstieg auf 
Cortex-M4 (DSP- und FPU-Erweiterung) lohnen.

MfG

von Helmut S. (helmuts)


Lesenswert?

> Angenommen ich habe eine Aufgabe bei der mit 100 KHz Frequenz ein
analoger Wert gemessen, durch ein paar FIR Filter gejagt, auf
irgendwelche Randbedingungen überprüft, und dann sofort wieder
ausgegeben wird.

Gerade die Echtzeitverabeitung ist die Stärke des DSP. Die DSPs erlauben
verschiedene Interrupt-Prioritäten zu setzen und sind zusätzlich so 
ausgelegt, dass der höchst-prioritisierte Interrupt garantiert 
spätestens nach x-hundert Nanosekunden bedient wird. Das wird du 
eventuell auf deinem Cortex-X nicht finden. Schau mal im Datenblatt.

von Frank K. (fchk)


Lesenswert?

Tobias K. schrieb:
> OK, Danke für die Antworten. Das hört sich für mich eher nach einem
> Geschwindigkeitsvorteil von 2 bis 5 an. Dafür lohnt sich für mich die
> Einarbeitung nicht.

Ich vergaß noch:
- Unterstützung mehrerer Adressräume (Programmcode, X-Daten, Y-Daten), 
so dass das Laden von Koeffizienten und Daten bei Filtern gleichzeitig 
passieren kann.

> Außerdem bedeutet das, dass man um Code-Optimierung so oder so nicht
> herum kommt. Mit ausreichend Optimierung müsste das Problem auch mit
> einem ARM lösbar sein.

ARM ist für so etwas schon gar nicht schlecht ausgestattet. Das Problem 
ist C. Die für Filter so wichtige Sättigungsarithmethik etwa kennt C 
nicht. Punkt. Wenn Du das brauchst, wirst Du auf Assembler-Ebene gehen 
müssen. Gleiches gilt für die Bitreverse-Adressierung. Unter C nicht 
verfügbar. Eine optimale FFT gibts also nur mit Assemblercode. (*)

Glücklicherweise gibts Hilfe. Schau in die aktuellen CMSIS-Bibliotheken:

http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php

(*) ARM löst das im CMSIS durch den Einsatz von compilerspezifischen 
Intrinsics, die dann geeigneten Code erzeugen. Gut, wenn man nicht nur 
den Prozessor macht, sondern auch einen Compilerbauer gekauft hat 
(Keil).

fchk

von Tobias K. (saibot1)


Lesenswert?

Das hört sich ja ganz gut an.

Der ARM uC ist ein NXP LPC1769. Dafür gibt's auch folgende Appnote die 
ich mir noch zu Gemüte führen muss:
http://www.nxp.com/documents/application_note/AN10913.pdf

Auszug:

DSP library for LPC1700 and LPC1300

The DSP library has been developed as a commonly used set of DSP 
functions optimized for the NXP Cortex-M3 LPC1700 and LPC1300 family 
products.

The library is supplied as a static library project with source code in 
LPCXpresso (Code Red), Keil and IAR versions, and can also be linked 
into any ARM-EABI tool chain as a binary library.

DSP library functions
•Biquad filter
•Fast Fourier transform
•Dot product
•Vector manipulation
•FIR filter
•Resonator
•PID controller
•Random number generator

The Cortex-M3 has several attributes that make it deliver excellent DSP 
performance:
•1-cycle 32x32 -> 32 signed multiplication
•2-cycle (32x32)+32 -> 32 signed multiply accumulate
•Cortex-M3 is Harvard in having a separate data port to memory and 
instruction port to memory

von Frank K. (fchk)


Lesenswert?

Tobias K. schrieb:
> Das hört sich ja ganz gut an.
>
> Der ARM uC ist ein NXP LPC1769.

Ist das schon fest? Ansonsten sind die STM32F4 geeigneter für Dich.

> Dafür gibt's auch folgende Appnote die
> ich mir noch zu Gemüte führen muss:
> http://www.nxp.com/documents/application_note/AN10913.pdf

Ich würde eher CMSIS nehmen, weil das herstellerneutral ist.

Und denke dran, dass der Compiler für die Performance auch sehr wichtig 
ist. gcc ist hier nur zweite Wahl.

fchk

von Thomas (Gast)


Lesenswert?

> gcc ist hier nur zweite Wahl.
Das ist zwar richtig, aber die in der AN beschriebene Bibliothek ist in 
Assembler optimiert, von daher wahrscheinlich nicht weiter tragisch.

von Tobias K. (saibot1)


Lesenswert?

Frank K. schrieb:
>> Der ARM uC ist ein NXP LPC1769.
>
> Ist das schon fest? Ansonsten sind die STM32F4 geeigneter für Dich.

Für den NXP LPC1769 habe ich jemanden der sich damit auskennt (ich 
selber habe damit noch nichts gemacht).
Mein Plan: Ich versuche erstmal den Algorithmus dafür zu implementieren 
und wenn die Leistung trotz Optimierung nicht ausreicht, dann weiß ich 
wo ich mehr bekommen kann :)

von Olaf (Gast)


Lesenswert?

> Gerade die Echtzeitverabeitung ist die Stärke des DSP. Die DSPs erlauben
> verschiedene Interrupt-Prioritäten zu setzen und sind zusätzlich so
> ausgelegt, dass der höchst-prioritisierte Interrupt garantiert
> spätestens nach x-hundert Nanosekunden bedient wird. Das wird du
> eventuell auf deinem Cortex-X nicht finden. Schau mal im Datenblatt.

Also das erlaubt ja selbst ein nun wirklich mickriger R8C13. Und ein 
multiplay-accumulate Befehle hat er auch. Trotzdem wuerde den wohl 
keiner als DSP bezeichen.
Ich wuerde sagen ein Controller der keine priorisierbaren Interrupts hat 
ist ganz einfach Murks.

Olaf

von fddgddg (Gast)


Lesenswert?

Olaf schrieb:
> Ich wuerde sagen ein Controller der keine priorisierbaren Interrupts hat
> ist ganz einfach Murks.

AVR?? ^^

von Martin S. (strubi)


Lesenswert?

Moin,

Um mal wieder etwas Verwirrung zu stiften :-)
Bei den "cutting edge"-Architekturen wie z.B. Blackfin und neueren 
Cortexen verschwimmt der Unterschied zwischen DSP und uC zunehmend.
Vorreiter ist hier der Blackfin, den man wohl als Hybriden bezeichnen 
darf (oder deutsch: eierlegende Wollmilchsau). Also so ein Mischmasch 
von allem, was gut ist: Parallele Befehle, breiter Bus für paralleles 
Fetch/Store, Cache, smarte Pipeline, damit man die Anzahl benutzter 
Zyklen innerhalb der Schleifen gut im Griff hat. Dazu kommt noch ne sehr 
effektive DMA-Engine für Streaming ohne CPU-Last und ohne Datenverlust. 
Vorteil ist bei der Architektur, dass sich die Jungs von Intel viele 
Gedanken nicht nur über wichtige Fixkomma-Arithmetik-Primitiven, sondern 
auch eine lesbare Assembler-Syntax gemacht haben.
Im Endeffekt würde ich mir jedoch beim Einstieg keine grossen Gedanken 
über die Architektur machen. Gewonnen hast Du oft schon mit der Wahl 
eines Chips, den man in GCC gut programmieren kann - das macht den Code 
prinzipiell schon gut wiederverwertbar und erleichtert das schnelle 
Portieren.
Meistens entscheidet eh die Verfügbarkeit der Eval-Boards :-)

Gruss,

- Strubi

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.