Forum: FPGA, VHDL & Co. peak detection


von Mark W. (kram) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

Welche Moegelichkeiten gibt es in einem FPGA eine Max-Min Erkennung zu 
realisieren? Mir geht es erstmal nur ums Prinzip wie man so etwas 
realisieren kann und welche FPGA's da von der Performance her in Frage 
kaemen.

Ein 10MHz Ultraschall Signal, wie in Bild water2 zu sehen ist kommt mit 
der Haufigkeit 10kHz vor. Davon moechte ich nur die peaks detectieren 
und abspeichern. Das Ganze muss natuerlich in Echtzeit geschehen.
Das Signal wurde mit 100MHz gesampled.

Als peak wuerde ich jetzt mal jeden Wert definieren, wo der Vorgaenger 
und Nachfolder kleiner ist bzw. groesser fuer die negativen paeks.

Ich wuerde jetzt erstmal versuchen das fuer ein Inteval hinzubekommen 
und dann je nachdem wieviel Zeit das benoetigt entsprechend 
parallelisieren.

Wuerde mich auch ueber Hinweise, Literatur und links diesbezueglich 
freuen. Wenn, dann bevorzuge ich VHDL.

Gruss,
Mark.

von Gustl B. (-gb-)


Lesenswert?

Du hast es doch eigentlich schon beschrieben:

Man kann jetzt immer den neuen Wert mitseinem Vorgänger vergleichen, und 
wenn der neue Wert kleiner ist als sein Vorgänger, dann geht es abwärts. 
Andernfalls aufwärts.
Um dann den Punkt zu erkennen an dem sich das von steigend nach fallend 
ändert kann man sowas wie ein Vorzeichen-Signal basteln:

Vorzeichen <= + falls neuer_wert > alter_Wert;
andernfalls
Vorzeichen <= -.

Und dann ist ein Maximum wenn sich dein Vorzeichen von "+" ++++++------- 
nach "-" ändert. Und anders herum für ein Minimum.

Wenn du jetzt statt + und - eine 1 und 0 verwendest kannst du da schön 
eine steigende/fallende Flanke erkennen.

Das Problem:
Wenn die Werte von einem ADC kommen der auch nur minimal rauscht, 
bekommst du dauernd "Peaks". Ich mache das in meinem Oszi als Trigger, 
aber ich bilde über mehrere viele Werte den Mittelwert. Also ich bilde 
zwei Mittelwerte, einmal über die letzten 0 - 7 Werte, und dann nochmal 
über die letzten 8 - 15 Werte. Diese beiden Mittelwerte vergleiche ich 
dann.

Wenn du aber ein 1MHz Sgnal mit "nur" 100MHz abtastest kannst du 
natürlich nicht so viele Werte für den Mittelwerte verwenden.

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


Lesenswert?

Mark W. schrieb:
> Als peak wuerde ich jetzt mal jeden Wert definieren, wo der Vorgaenger
> und Nachfolder kleiner ist bzw. groesser fuer die negativen paeks.
Deine Definition ist unvollständig. Das was du als "Peaks" definierst, 
ist eigentlich der Punkt, wenn die Hüllkurve des Signals eine 
(adaptive?) Schwelle überschreitet.

Als einfache Frage: wie weit gehen die "Peaks", die du erkennen willst? 
ist das bei 82 immer noch ein "Peak"? Oder bei 74? Oder bei 90,5?
Sind diese Zahlen Zeitangaben?

> kommt mit der Haufigkeit 10kHz vor
Das bedeutet umgerechnet und auf Deutsch?
Alle 0,1ms wiederholt sich das Signal aus dem water2.jpg?
Und wo finde ich die 10MHz?

: Bearbeitet durch Moderator
von Mark W. (kram) Benutzerseite


Lesenswert?

Hallo,

@GB:

Die Werte kommen von einem 12 bit ADC mit 100 MHz Abtastrate, und ja das 
Rauschen wuerde ich da erstmal mit einfangen, aber da die Werte dann 
alle sehr klein sind, wuerden sie es gar nicht in den "Topf" der 50 
groessten Peaks schaffen. Nur wenn das eigentliche Signal aus 
irgendwelchen Gruenden nich da ist.
Das mit dem Vorzeichenwechsel ist eine guter Tip, im Grunde geht es mir 
um die erste Ableitung, wenn die 0 ist, dann habe ich meinen Wert. Aber 
dass laesst sich nicht so einfach auf digitale Elektronik uebertragen.

@Lothar:

Peaks sollen alle Maxima und Minima (auch lokale) sein. So wie bei Bild 
"water3" bei ca. 60 us. Bild water3 ist ein Auszug von Bild water2, nur 
die ersten beiden Echos.

Die Zeitachse ist in us und die Werte achse in mV. Erkennen wollte ich 
die 50 groessten peaks. Ich wollte onhne Erkennungsschwelle auskommen, 
wenns geht.

Ja, alle 100 us wiederholt sich das Signal. Die Echos sind breitbandig 
und haben eine Frequenz von 10 MHz, gut zu sehen in Bild water3, welches 
ein Auszug von water2 ist und nur die ersten zwei Echos darstellt.

Gruss,
Mark

von Gustl B. (-gb-)


Lesenswert?

Deine erste Ableitung wäre Null wenn der neue Wert gleich dem alten Wert 
ist. Aber das wird wohl kaum eintreten. Daher finde ich das mit 
steigend/fallend recht brauchbar und leicht umsetzbar.

Die Steigung selbst ist ja (neuer Wert minus alter Wert) geteilt durch 
1.
Du kannst da jetzt z.B. die letzten 0-3 Werte nehmen und die letzten 4-7 
Werte und die jeweils mitteln. Und dann mit den Mittelwerten die 
Steigung berechnen, also (M_1-M_2)/4.

Du kannst auch Steigungen zwischen zwei nicht benachbarten Werten 
nehmen. Also ich meine, dass du bei jedem Takt die Steigung zwischen dem 
neuen Wert (=Wert 0) und dem alten Wert 3 berechnest mit 
(Wert_0-wert_3)/4.
Dann bekommst du bei jedem Takt zwar eine recht ungenaue Steigung, aber 
du kannst dann über die z.B. letzten paar Steigungswerte mitteln.

Eine Steigung von 0 wirst du aber nur sehr selten bekommen, da solltest 
du dir Schwellen setzen, also >-0.1 und <0.1 oder so. Ich würde das 
direkt mit dem Vorzeichenwechsel machen.

von Fpgakuechle K. (Gast)


Lesenswert?

Lothar Miller schrieb:
> Mark W. schrieb:
>> Als peak wuerde ich jetzt mal jeden Wert definieren, wo der Vorgaenger
>> und Nachfolder kleiner ist bzw. groesser fuer die negativen paeks.
> Deine Definition ist unvollständig. Das was du als "Peaks" definierst,
> ist eigentlich der Punkt, wenn die Hüllkurve des Signals eine
> (adaptive?) Schwelle überschreitet.
>
> Als einfache Frage: wie weit gehen die "Peaks", die du erkennen willst?
> ist das bei 82 immer noch ein "Peak"? Oder bei 74? Oder bei 90,5?
> Sind diese Zahlen Zeitangaben?
>
>> kommt mit der Haufigkeit 10kHz vor
> Das bedeutet umgerechnet und auf Deutsch?
> Alle 0,1ms wiederholt sich das Signal aus dem water2.jpg?
> Und wo finde ich die 10MHz?

Ich schätzte da der TO Ultraschall erwähnt hat, das es sich hier um 
einen Anordung zur zerstörungsfreien Materialprüfung mit Ultraschall 
handelt.

10 MHz beziehen sich wohl auf den Ultraschall den der Sender (Prüfkopf) 
, vermutlich Piezo, erzeugt. Der Piezo wird mit Spannungspulsen ca 120V 
angeregt und sendet dann einen Sinusburst (länge im ns/us Bereich) von 
10 MHz aus. ein solcher Spannungspuls wird regelmäßig und zwar mit der 
pulse repitition rate PPR von 10 Khz erzeugt.

Diese ultraschallsignale laufen im medium Material und werden an 
Ungänzen (Wand, Störstellen) reflektiert. Dieses Echo erzeugt im Piezo 
beim Auftreffen eine Spannunng, umgekehrt zu dem Effekt bei der 
Anregung.

Zeichnet man diese auf, bspw mittels ADU mit hoher Samplerate (z.B. 100 
MHz) kann damit die Entfernung über die Schallgeschwindigkeit bestimmt 
werden. Die jeweiligen Maxima von Sendesignal und Echos werden dazu als 
korrospondierende Zeitmarken aufgefasst.

Die 10 MHz ergeben sich aus Material und Fertigung des Piezo und 
elektrisch nicht beeinflußbar. Es gibt Prüfköpfe von 0.2  bis zu 50(?) 
MHz - höhere Ortsauflösung, allerdings dämpfen viele materialen 
(Korngröße) diese Signal stark. Bei 10 MHz tippe ich auf Stahl, für 
Gußeisen scheint es mir schon zu hoch.
 Das es sich um Ultraschall für Medizintechnik handelt, schließe ich 
aus, da dort mit Doppler statt mit Reflexionsecho gearbeitet wird.


Der TO möge mich berichtigen wenn ich falsch liege.

MfG,

von Fpgakuechle K. (Gast)


Lesenswert?

Gustl Buheitel schrieb:

> Man kann jetzt immer den neuen Wert mitseinem Vorgänger vergleichen, und
> wenn der neue Wert kleiner ist als sein Vorgänger, dann geht es abwärts.
> Andernfalls aufwärts.
> Um dann den Punkt zu erkennen an dem sich das von steigend nach fallend
> ändert kann man sowas wie ein Vorzeichen-Signal basteln:


Hinweis:  schaut man sich die Bilder genau an, erkennt man einen 
Phasensprung, also der erste Burst beginnt mit einer pos. Halbwelle 
(Anstieg)
während das direkte Echo (folgender Burst) mit der neg. beginnt. Um den 
Extremwert pro Burst zu bestimmen sollte man also beide Fälle negatives 
und positives Extrame detektieren. Also nicht nur auf Wechsel steigend, 
fallend sondern auch auf Wechsel fallend/steigend achten.

MfG,

von Gustl B. (-gb-)


Lesenswert?

Du hättest vielleicht noch etwas weiter lesen sollen:

Gustl Buheitel schrieb:
> Und dann ist ein Maximum wenn sich dein Vorzeichen von "+" ++++++-------
> nach "-" ändert. Und anders herum für ein Minimum.
>
> Wenn du jetzt statt + und - eine 1 und 0 verwendest kannst du da schön
> eine steigende/fallende Flanke erkennen.

von Sigi (Gast)


Lesenswert?

Die Maxima lassen sich relativ einfach berechnen:

1. berechne den fortlaufenden sinus/cosinus-Spektralwert (freq=10MHz),
   Fensterlänge in water3: 40 Pixel ??
2. quadriere diese Spektralwerte und addiere sie zusammen
   => du erhälst relativ saubere Berge statt der Sinusausschläge
2. berechne den fortlaufenden Mittelwert (Fensterlänge hier ca. 250ns,
    d.h. d.h. 20 Pixel, freq = 20MHz) => du erhälst sehr saubere Berge
3. bestimme fortlaufend Maxima (Fensterlänge hier ca. 250ns, d.h.
   freq = 20MHz), dazu ist aber ein Schwellwert notwendig

Das Ganze lässt sich auf dem kleinsten CycloneII (EP2C5) locker
implementieren. Benötigt werden ca. <= 4 Multiplier, 4 BlockRAMs
und ein wenig Logik-LAs. (oder der 2-kleinste Spartan3)

von Holger (Gast)


Lesenswert?

Erst mal so was ich gefunden habe.

Sobel Operator Simplified
https://www.youtube.com/watch?v=iendD-Iqoog
(->Note that this is not the correct implementation of the Sobel 
operator, but instead just a quick and easy way of visualizing what it 
does.

Hint: edge detectors are roberts, prewitt and sobel
Hint: Canny Edge Detector
         Hysteresis Thresholding

Array [x][y]
http://crcv.ucf.edu/source/fundamental_matrix


Lecture 03 - Edge Detection
https://www.youtube.com/watch?v=lC-IrZsdTrw


http://crcv.ucf.edu/courses/CAP5415/Fall2012/Lecture-3-EdgeDetection.pdf

http://crcv.ucf.edu/people/faculty/shah.html

Gruss Holger.

von Fpgakuechle K. (Gast)


Lesenswert?

Interesante Links, mir ist aber  nicht ganz klar wie eine 
Kantendetektierung a la Sobel in einem (zweidinesionalen) Bild 
(Amplitude = f(x,y) ) eine Kennwertextraktion aus einer 
(eindimensionalen) Zeitreihe (Amplitude = f(t)) erleichter?

MfG

Holger schrieb:
> Erst mal so was ich gefunden habe.
>
> Sobel Operator Simplified
> https://www.youtube.com/watch?v=iendD-Iqoog
> (->Note that this is not the correct implementation of the Sobel
> operator, but instead just a quick and easy way of visualizing what it
> does.

von Mark W. (kram) Benutzerseite


Lesenswert?

Hallo,

@FPGA-Kuechle:
Danke fuer den ausfuehrlichen Hintergrund.

@alle anderen:
Danke fuer die links und Informationen.

Gruss,
Mark

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.