Forum: Digitale Signalverarbeitung / DSP / Machine Learning Auswahl des richtigen dsp


von Joachim J. (felidae)


Angehängte Dateien:

Lesenswert?

Hi @ all,

Ich plane ein Projekt bei dem ich wohl auf einen Digitalen Signal 
Prozessor zurück greifen muss. Leider habe ich noch nie mit einem DSP 
gearbeitet, habe lediglich mal einen Blackfin gesehen. Da die 
Developmentboards sehr teuer sind wollte ich hier fragen welcher DSP für 
mein Projekt in frage kommt.

Anforderungen:

Ich möchte Video Daten von einer Parallele Kamera empfangen und 
auswerten.
im Moment verwende ich die AR0130 (12 bit Parallel, I²C Steuerung, 1.8V 
Signalpegel). Unter Umstände muss ich aber noch auf eine andere wechseln 
(wegen fps).

Ich möchte die empfangenen Bilddaten (geringe Auflösung rund 80000 pixel 
zu je 12bit) auswerten (Mittelwerte, FFT, Filterung, ...) und das mit 
einer Framerate von 60 bis eventuell 120fps.

Die durch die Auswertung gewonnen Daten( 10x 16bit variablen) möchte ich 
anschießend über Funk (z.b. Bluetooth) an einen PC später auch Handy 
übertragen.

Das ganze Projekt soll später mal mobil sein (Akku). Dass bedeute der 
Energieverbrauch sollte so gering wie möglich sein.

von Mark B. (markbrandis)


Lesenswert?

Joachim J. schrieb:
> Da die Developmentboards sehr teuer sind

Nicht unbedingt. Gibt auch im Bereich von so 100 bis 500 Dollar schon 
einiges an Auswahl. Eine Übersicht über Developer Boards und Preise gibt 
es zum Beispiel hier:
http://www.digikey.com/product-search/en/programmers-development-systems/evaluation-boards-embedded-mcu-dsp/2621773

Wenn es auch ein Mikrocontroller sein darf und nicht zwingend ein DSP 
sein muss, ist die Auswahl noch sehr viel größer.

> Ich möchte die empfangenen Bilddaten (geringe Auflösung rund 80000 pixel
> zu je 12bit) auswerten (Mittelwerte, FFT, Filterung, ...) und das mit
> einer Framerate von 60 bis eventuell 120fps.

Die zu verarbeitende Datenmenge wäre demnach:
(80000 * 12 Bit) / (8 * 1024 ) = 117,1875 KB pro Frame
bzw. das 60-fache davon: 6,8665 MB pro Sekunde

> Das ganze Projekt soll später mal mobil sein (Akku). Dass bedeute der
> Energieverbrauch sollte so gering wie möglich sein.

Wenn Du es super energiesparend haben willst, verzichte auf 
Bluetooth/WLAN und nimm lieber n Kabel ;-)

: Bearbeitet durch User
von Joachim J. (felidae)


Lesenswert?

Mark B. schrieb:
> Wenn es auch ein Mikrocontroller sein darf und nicht zwingend ein DSP
> sein muss, ist die Auswahl noch sehr viel größer.

Der Knackpunkt ist die große Datenrate und der Auswertealgorithmus. 
Zwischen jedem Frame werden Filterungen eingesetzt und mittelwerte 
berechnet und alle 1-2 Sekunden eine FFT ausgeführt und dessen Ergebnis 
wieder ausgewertet. anschießend werden die Ergebnisse übertragen. ein 
dsp ist nicht Pflicht, schien mir aber angebracht.

> Wenn Du es super energiesparend haben willst, verzichte auf
> Bluetooth/WLAN und nimm lieber n Kabel ;-)

Auf Grund des Einsatzgebietes komme ich an einer Funkübertragung leider 
nicht vorbei. Eine spätere Applikation soll dann auch mit einem Handys 
kommunizieren können. also Bluetooth ist wohl Pflicht.

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Joachim J. schrieb:
> Der Knackpunkt ist die große Datenrate und der Auswertealgorithmus.
> Zwischen jedem Frame werden Filterungen eingesetzt und mittelwerte
> berechnet und alle 1-2 Sekunden eine FFT ausgeführt und dessen Ergebnis
> wieder ausgewertet. anschießend werden die Ergebnisse übertragen. ein
> dsp ist nicht Pflicht, schien mir aber angebracht.

Nun, dann würde ich hergehen und überschlagsweise berechnen, wieviel 
Speicher und welche Rechenleistung der DSP haben soll. Also z.B.

Pro Frame:
Speicher für die Rohdaten (hier also ca. 120 KB) +
Speicher für die Mittelwertberechnung +
Speicher für die digitalen Filter (je nach Filterordnung)

Plus Speicher für die Fouriertransformation.

Bei der Rechenleistung dann ähnlich, also abschätzen wieviele 
Multiplikationen und Additionen man in jedem Zyklus (also pro Frame) 
benötigt.

Also 79999 Additionen und eine Division für den Mittelwert +
Operationen für die digitalen Filter je nach Filterordnung +
Fouriertransformation abhängig davon wieviele Punkte man verwendet.

Man kann das auch bis auf die siebte Stelle hinterm Komma ausrechnen, 
und dann zur Sicherheit Faktor 2 draufschlagen. ;-)

: Bearbeitet durch User
von Sascha (Gast)


Lesenswert?

Hallo,
also dann kommen ja auch eine Menge an Bildfilter Algo´s dazu.
Das ganze kann schon etwas Rechenleistung verbrauchen.

Deine CPU sollte auf jeden fall ein Camera IF Modul haben und Notfalls 
auch einen TFT-Display Anschluss, könnte sehr hilfreich sein beim 
Debuggen.

mein Vorschlag:
Cortex M4F z.B. ST STM32F429
Cortex M7F z.B. Atmel CM7 E70,V70 Reihe ansehen

Wenn die CPU ohne Flash auch sein kann würde ich einen Cortex A5 nehmen.

Wenn du aber full HD machen willst, wirds eng!

80000 Pixels würde ungefähr 320x240 QVGA entsprechen, das müsste noch 
machbar sein.

Gruß Sascha

von Joachim J. (felidae)


Lesenswert?

Überschlagen wir mal:

pro Frame:
Ich habe man an der Kamera gemessen

Frame rate: 102,56Hz
100 Zeilen mit je 990 Pixeln
5,1ms Übertragungszeit pro Frame
4,6ms Berechnungszeit Pro Frame
33,7us Übertragungszeit pro Zeile(990 Pixel/Zeile)
Pixelclok 29,33MHz

pro Pixeltakt werden 12bit eingelesen und zwischengespeichert
(interupt, 12bit einlesen, in Speicher schreiben, Pointer erhöhen(zeile 
spalte), ein bis zwei Eingänge abfragen) da kommt ganz schön was 
zusammen.

Ich könnte den Pixelclok, bei gleichbleibender Frame rate, auch 
verringern, aber dann wird die Übertragungszeit/Frame größer und die 
Berechnungszeit kleiner. 4,6ms ist viel Zeit aber ich weiß noch nicht 
wie aufwendig die Berechnung schlussendlich werden wir.

Zu welche Taktfrequenz würdet ihr mir raten? 200MHz/30MHz=6 Operationen 
ist wohl zu wenig.

Speicher:

100 Zeilen * 990 Spalten = 99000Pixel
16bit Variablen weil es 12bit Variablen nicht gibt:)
99000*16bit/2 = 792000 Byte = 792 KByte/Frame

Mittelwerte  voraussichtlich
2KByte

Filterung der Mittelwerte geschätzt
6KByte

variablen und Pointer pauschal
1KByte

FFT geschätzt
5KByte

summe gerundet: 810KByte


da das Programm und auch der exakte auswerte Algorithmus noch nicht 
Entwickelt sind, kann ich hier nur schätzen.

von D. H. (slyd)


Lesenswert?

Joachim J. schrieb:
> 99000*16bit/2 = 792000 Byte = 792 KByte/Frame


Du hast da mit Bit/Byte durcheinander gerechnet.


Je nach Algorithmus könnte ein 500MHz Blackfin das schon schaffen.
Ein Cortex-M4 packt es jedenfalls sicher nicht.


> habe lediglich mal einen Blackfin gesehen.
> Da die Developmentboards sehr teuer sind


eigenwerbung
Schau mal im Markt Forum nach Blackfin, vielleicht findest Du da ja was 
passendes.

von Joachim J. (felidae)


Lesenswert?

D. H. schrieb:
> Joachim J. schrieb:
>> 99000*16bit/2 = 792000 Byte = 792 KByte/Frame
>
>
> Du hast da mit Bit/Byte durcheinander gerechnet.
stimmt sorry  Denkfehler (2byte pro Var aber 8bit/Byte)
99000*16bit/(8bit/Byte) = 198000 Byte = 198 KByte/Frame

: Bearbeitet durch User
von Joachim J. (felidae)


Lesenswert?

D. H. schrieb:
> *eigenwerbung*
> Schau mal im Markt Forum nach Blackfin, vielleicht findest Du da ja was
> passendes.

Das Angebot ist echt gut 
Beitrag "[V] Blackfin DSP BF548, BF537, Industrie Module, BF533 Stamp, Evalboards, ICEbear USB JTAG" :)
Doch diese Jahr werde ich das nicht mehr entscheiden. Ich komme darauf 
vielleicht im nächsten Jahr nochmal zurück.

: Bearbeitet durch User
von Strubi (Gast)


Lesenswert?

Tach,

für die 1.8V I/O musst du ev. auf einen der neueren Typen (BF51x) 
zurückgreifen. Ansonsten kann ich nach rund 10 Jahren Kamerabau mit 
gutem Gewissen Fazit ziehen: Für die meisten nicht 0815-Entwicklungen 
hat der Blackfin die Nase vorn und ist unterm Strich in der Entwicklung 
am günstigsten. Wenn Stromsparaspekte noch dazukommen, gibt's eigentlich 
kaum eine Alternative bei optimaler (minimaler) mW/MIPS. Nur der 
Toolwirrwarr und der inhomogene Support von ADI ist mühsam, das kann TI 
etwas besser, die Inhomogenitäten findet man dort eher auf dem Chip :-)
Zur FFT gibt es für den Blackfin einiges an asm-optimierten libraries,
allenfalls muss man noch die 2D-Sachen etwas optimieren, aber die 
Einarbeitung in bfin-assembler lohnt sich eh.

Grüsse,

- Strubi

von Frank K. (fchk)


Lesenswert?

Joachim J. schrieb:

> Das ganze Projekt soll später mal mobil sein (Akku). Dass bedeute der
> Energieverbrauch sollte so gering wie möglich sein.

Ich würde bei diesen Anforderungen ein FPGA wählen. Der Vorteil ist, 
dass bei Bildverarbeitung viel parallel ablaufen kann, und da ein FPGA 
letztendlich nur programmierte Logik ist, wo ohnehin alles parallel 
abläuft, kommt dies Deiner Aufgabe sehr entgegen.

Sämtliche Anbieter von Industriekameras (ich weiß es von Basler, AVT und 
IDS sicher) haben intern ein gar nicht so fettes FPGA, wo die 
aufwändigen Dinge per Logik erledigt werden und die Kommunikation per 
Softcore implementiert ist. Dazu ein DRAM-Chip für den Softcore und die 
Buffer und ggf ein Gigabit-Ethernet-PHY zum Rausschaufeln der Daten. 
Diese Hersteller verwenden alle auch nur die üblichen, am Markt 
erhältlichen Bildsensor-Chips.

Schau Dir mal als Beispiel das hier an:
https://de.ids-imaging.com/store/produkte/kameras/ui-5581le.html

Da siehst Du, wie so eine Kamera von innen aussieht. Vorne der Sensor 
von Aptina, auf der Rückseite ein Altera-FPGA (mit Aufkleber), ein 
RAM-Chip von Hynix, ein Gigabit-Ethernet-PHY, Magnetics, RJ45 und etwas 
Kleinkram.

So, wenn die Profis das alle so machen (und das machen sie), dann 
solltest Du Dir wirklich überlegen, ob Du gute Gründe zusammen bekommst, 
um es anders zu machen. "Keine Ahnung" ist kein hinreichender Grund!

fchk

von D. H. (slyd)


Lesenswert?

Strubi schrieb:
> für die 1.8V I/O musst du ev. auf einen der neueren Typen (BF51x)
> zurückgreifen.

Der Sensor kann auch 2.8V.
Ansonsten Levelshifter.

von Strubi (Gast)


Lesenswert?

Frank K. schrieb:
> Joachim J. schrieb:
>
>> Das ganze Projekt soll später mal mobil sein (Akku). Dass bedeute der
>> Energieverbrauch sollte so gering wie möglich sein.
>
> Ich würde bei diesen Anforderungen ein FPGA wählen. Der Vorteil ist,
> dass bei Bildverarbeitung viel parallel ablaufen kann, und da ein FPGA
> letztendlich nur programmierte Logik ist, wo ohnehin alles parallel
> abläuft, kommt dies Deiner Aufgabe sehr entgegen.
>

Hast Du dir denn die Anforderungen oben mal durchgelesen?
- Stromsparend (!)
- Bluetooth-Komm.
- Etwas komplexere Operationen wie FFT

Es gibt also hier keinen Grund ein FPGA zu nehmen, warum die Sache 
unnötig verkomplizieren?

> So, wenn die Profis das alle so machen (und das machen sie), dann
> solltest Du Dir wirklich überlegen, ob Du gute Gründe zusammen bekommst,
> um es anders zu machen. "Keine Ahnung" ist kein hinreichender Grund!
>

Die Profis bauen ihre intelligenten Kameras sehr oft auf 
Blackfin-Systemen auf, ein grosser z.B. ist Cognex. FPGAs machen nur 
Sinn, wenn man eine lineare schnelle Verarbeitungspipe braucht (wie 
Debayering oder Vorfilterung).
Ein paar "Profis" mit grossem Namen bauen in der Tat komplexe Systeme 
mit UDP-Stacks und GenIcam auf FPGAs auf, aber das sind oft 
von-hinten-durch-die-Brust-Designs, die muss man nicht unbedingt 
nachmachen. Stromsparend ist da schon mal nix mehr, und die 
Entwicklungskosten sollte man auch mit einrechnen.

Cheers,

- Strubi

von PittyJ (Gast)


Lesenswert?

Ich habe auch ein paar Profi-Kameras von AVT und Baumer auf dem 
Schreibtisch. Die werden teilweise so warm, dass man sie kaum anfassen 
kann.
Und FPGAs sind nicht gerade fürs Stromsparen bekannt.

Ich würde das umgekehrt aufziehen. Alles erst mal auf einem großen 
Prozessor berechnen Intel/Arm. Und wenn alle Algorithmen laufen, dann 
berechnen/messen, welche CPU-Leistung wirklich benötigt wird und dann 
erst eine passende kleine CPU wählen.
Evtl muss da ja auch noch ein RTOS oder Mini-Linux drauf laufen. Das 
sollte auch bedacht werden.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PittyJ schrieb:
> Ich würde das umgekehrt aufziehen. Alles erst mal auf einem großen
> Prozessor berechnen Intel/Arm. Und wenn alle Algorithmen laufen, dann
> berechnen/messen, welche CPU-Leistung wirklich benötigt wird
Ich würde das genau so machen. Es ist sinnlos, sich von vorn herein auf 
etwas festzulegen, ohne zu wissen, was man überhaupt braucht. Bitte 
beachten: ich unterscheide hier braucht unbedingt von will!

: Bearbeitet durch Moderator
von Joachim J. (felidae)


Lesenswert?

Frohes neues Jahr:) da bin ich wieder

PittyJ schrieb:
> Ich würde das umgekehrt aufziehen. Alles erst mal auf einem großen
> Prozessor berechnen Intel/Arm. Und wenn alle Algorithmen laufen, dann
> berechnen/messen, welche CPU-Leistung wirklich benötigt wird und dann
> erst eine passende kleine CPU wählen.
> Evtl muss da ja auch noch ein RTOS oder Mini-Linux drauf laufen. Das
> sollte auch bedacht werden.

genau so habe ich jetzt angefangen. ich habe mir ein DART-MX6 von 
Variscite besorgt. Diese hat sogar eine Schnittstelle für eine Parallele 
Kamera. Damit werde ich das erste Bildmaterial aufnehmen und auswerten 
und den Algorithmus entwerfen.

Ich gehe aber davon aus, dass die hohe Übertragungsrate der Kamera die 
Taktfrequenz vorgibt. Der Algorithmus wird klein und kompakt.
Erst werden die rund 80000 Pixel mit Hilfe von Mittelwertberechnung 
verringert auf rund 1500 werte. Dann eventuell ein filter. Aus diesen 
1500 werten wird der erste Messwert abgeleitet. Danach werden die 1500 
werte zu einem zusammengefasst. Dieser eine Messwert (100/s) wird 
gespeichert und dann mit 1000 werten (t=10s) in die FFT geschickt. Im 
Anschluss kann man weitere Messwerte ableiten.

Ich erwarte das der Algorithmus nicht viel Rechenleistung benötigen 
wird. Die Kamera hingegen sendet 12bit pro Pixel Paralel und der 
Pixelcolck wird wohl bei 20-30MHz liegen. (80000 Pixel/Bild 100 
Bilder/s)

Ich habe auch schon an so was wie DMA gedacht aber nichts gescheites 
gefunden. Ein paralleler Port mit 12bit der abwechselnd in zwei 
Speicherbereiche schreibt. Während das eine Bild in den ersten 
Speicherbereiche geschrieben wird, wird das andere im anderen 
Speicherbereiche ausgewertet. Bei 100 Bilder/s ist zur Auswertung viel 
Zeit, so das eine recht kleine Taktfrequenz reichen würde(z.B.50MHz).

: Bearbeitet durch User
von Sascha (Gast)


Lesenswert?

Hallo Joachim, ein Camera Interface der Controller macht alles genau das 
was du willst. Sie haben eine DMA, erzeugen die Clocks und übernehmen 
die 12 Bit Parallel zur DMA bis in den Speicher. Dazu sortieren oder 
konvertieren sie auch noch die Pixeldaten nach RGB in verschiedene 
Formate.
Nach jedem Frame kannst du dir einen Interrupt erzeugen lassen, und die 
neue Adresse des übernächsten Frames im Speicher angeben. Was will man 
mehr.


Stichwort: Camera IF, Camera Interface.

Einfach mal Datenblätter studieren.


gruß Sascha


Nur mal so als Beispiel:
http://www.atmel.com/images/Atmel-11296-32-bit-Cortex-M7-Microcontroller-SAM-E70Q-SAM-E70N-SAM-E70J_Datasheet.pdf

PS. es gibt auch noch bessere ISI-Interface.

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.