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.
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.
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
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
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.
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,
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,
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.
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)
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.