Forum: Digitale Signalverarbeitung / DSP / Machine Learning Messdatenaufbereitung mit digitalen Filtern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Bert (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

für ein Uniprojekt musste ich die Profildicke entlang einer Linie von 
Beschichtungen auf einer rauen Oberlfäche messen. Anbei ein Plot der 
Messung. Die x-Achse stellt die abgefahrene Linie dar. Die y-Achse die 
Schichtdicke. Innerhalb dieser 25000µm langen Linie sind zwei Kanten wo 
eine Schicht anfängt und aufhört. Dazwischen ist die Schicht zwischen 
1µm und 3µm dick. Rein von der Profilaufnahme kann man nicht erkennen wo 
die Schicht anfängt und aufhört. Idealerweise würde ich gerne durch ein 
geeignetes digitales Filter alle Frequenzen rausfiltern, die nicht durch 
den Sprung dieser Beschichtung entstehen und am Ende an zwei Stellen 
einen Peak sehen an dem die Schicht plötzlich (also hochfrequent) um 
1-3µm zunimmt und pötzlich um 1-3µm abnimmt. Dazu bräuchte ich 
wahrscheinlich ein Hochpassfilter oder ein Bandpassfilter. Jetzt wäre 
meine Frage wie und mit welchen Hilfsmitteln ich das umsetzen kann. 
Leider habe ich softwaretechnisch wenig Erfahrung. Vlt. hat jemand auch 
zufällig ein passendes Beispiel bereit (evtl. für Python oder Octave) 
oder evtl. sogar eine ganz andere Software. Bin um jeden 
Umsetzungratschlag oder jede Hilfe dankbar!

Vielen Dank schon mal.

PS. Anbei auch noch die Messdaten in CSV Format

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Bert schrieb:
> Die x-Achse stellt die abgefahrene Linie dar.
Sieht tatsächlich sehr "abgefahren" aus :-)

Wie man das macht?

Fahrgeometrie und Fahrtempo bestimmen und damit herausbekommen, wie 
"steil" die Kante ist - also über wieviele Punkte sie sich verteilt. 
Dies in einen Filter einmodellieren, also faktisch eine Rampe.

Das was du "Hochpass" nennst, kommt dadurch hinein, dass die 
Rampenkoeffizienten im Mittel auf Null normiert werden müssen. Und ja 
streng genommen ist es ein Bandpass, weil die Rampe die Höhen, die kein 
Nutzsignal sind, unterdrückt.

Was an Koeffizienten rauskommt, sollte aussehen, wie ein tiefergelegter 
Sägezahn.

Und am Ende braucht es wahrscheinlich noch einen Filter in umgekehrter 
Orientierung, der das Ende erkennt.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Könnte man mit irgendeinem Kurvenfitting etwas anfangen? Wenn die 
Funktion ableitbar ist, könnte man hier den Wendepunkt bestimmen, und 
vielleicht hilft die erste Ableitung der Funktion weiter?

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Christoph db1uq K. schrieb:
> Könnte man mit irgendeinem Kurvenfitting etwas anfangen?
Die einmodellierte Kante ist praktisch ein fit, bei dem die zu findende 
Form fest ist, da bekannt und zudem die Gütefunktion, die man zum 
Optimieren bräuchte, permanent ausgegeben wird. Heraus kommt dann 
irgendwann ein peak, der das (ausreichen deutliche) Vorhandensein der 
Kante diagnostiziert. Um diesen Peak zu prozessieren nutzt man dann die 
Ableitungen, weil die Amplitude mitunter unbekannt ist.

> vielleicht hilft die erste Ableitung der Funktion weiter?
Faktisch ist der Kantenerkenner eine Ableitung, nur nutzt diese nicht 
rücksichtslos die zufällige Auflösung, die durch die Abtastung entsteht, 
indem sie Sample zu Sample vergleich, sondern die Distanz, die dem 
Problem eigen ist - hier eben die Kantensteigung.

von Christoph db1uq K. (christoph_kessler)


Angehängte Dateien:

Lesenswert?

Ich dachte, das kann man gaaanz einfach mit LibreOfficeCalc machen. Geht 
auch, aber mit ein paar Problemen. Vielleicht sollte man doch ein 
richtiges Mathematikprogramm benutzen.

Erst mal kann eine csv-Datei natürlich keine Kommazahlen enthalten, 
sondern mit Dezimalpunkt. Der Import des deutschen LibreOffice will aber 
Komma.

Dann stellt ich fest, dass die LibreOffice Hilfe nicht mehr 
funktioniert, seit mit dem Ubuntu-Update vom April der Firefox in der 
Snap-Version installiert wird. Der mag keine html-Hilfedateien die als 
Admin installiert wurden, was LibreOffice aber so macht. Es gibt einige 
Diskussionen dazu im Web, je nach Standpunkt mit Verfluchungen der 
Programmautoren.

Ok, hier also ein Diagramm mit eingetragener Polynom-Fitfunktion dritter 
Ordnung. Noch als Text:
f(x) = 7,40303448254372E-12 *x3 - 2,38277811534535E-07 *x2 + 
0,00335098831964075 *x + 683,995827050309

Das ist die Fitfunktion, die ins Diagramm eingetragen wurde.
Man kann die Formel auch in der Tabelle mit "LINEST" oder "RGP" 
berechnen lassen, RGP scheint der neuere Befehl zu sein, wird 
automatisch so korrigiert. Daraus müssten sich dann die Ableitungen 
berechnen und plotten lassen.
(Den Versionssprung von 7.3 auf 7.4 hat Ubuntu noch nicht vollzogen, 
vielleicht auch daher die Unterschiede der Doku.)

von Jürgen S. (engineer) Benutzerseite


Lesenswert?

Christoph db1uq K. schrieb:
> Das ist die Fitfunktion, die ins Diagramm eingetragen wurde.
Das geht mit Excel auch, aber dann ist es ja dem Programm überlassen, 
nach welchen Kriterien es fittet, z.B. "kleinste Quadrate". Du steckst 
auch willkürlich die Annahme hinein, dass die Krümmung, die die Funktion 
mitbringt, zufällt der entspricht, welche sich durch 
Verfahrgeschwindigkeit + Auflösung / Abtastung ergibt. Das ist ja nicht 
automatisch der Fall.

Du hast jetzt optisch eine X3 genommen, aber eine 4 wäre sicher besser, 
weil diese die lokalen Krümmungen besser nachvollzieht. Eine zu grobe 
Funktion laboriert an dem Problem, dass sehr weit entfernte Stellen 
"mitbestimmmen", wie genau sie in einem Bereich trifft. Allein optisch 
würde ich schon wenigstens 3 Wendepunkte mehr erkennen, wenn ich das Fit 
mit dem Mittelwert des Originals vergleiche. Probiere mal eine 6. Eine 7 
wäre gfs auch noch besser, aber eine 15 sehr wahrscheinlich nicht, weil 
sie zu sehr dem Rauschen folgt. Angenommen, die 7 würde passen - dann 
kommt jemand auf die Idee, fährt das Ding anders oder nichtlinear durch 
und man liegt wieder in der Wiese. Zudem kann das Polynom so ohne 
Weiteres nur in Ganzzahlen klettern. Der Filter ist im Rahmen der 
Auflösung aber an praktisch jede Kante anzupassen.

Dasselbe Problem hat man mit Bildverarbeitungsfiltern: Kantenerkennung 
mit Sobel kann man haken, wenn man nur einfach stumpf von Pixel zu Pixel 
guckt.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Christoph db1uq K. schrieb:
> Ok, hier also ein Diagramm mit eingetragener Polynom-Fitfunktion dritter
> Ordnung. Noch als Text:
> f(x) = 7,40303448254372E-12 *x3 - 2,38277811534535E-07 *x2 +
> 0,00335098831964075 *x + 683,995827050309

Und was lernen wir daraus über die Kantenlage?

Genau gar nichts.
Und in den Bereichen nahe 0 und um 12000 wird zudem die Kurvenform nicht 
getroffen.

Bert schrieb:
> Rein von der Profilaufnahme kann man nicht erkennen wo
> die Schicht anfängt und aufhört.

Also brauchst du ein Modell, dass auf Basis von Lage und 
Schichtcharakteristiken den Messvorgang modelliert (inkl. 
Sensorauflösung) und dann die Parameter variiert, bis es passt. Der 
Solver von LibreOffice ist dein Freund.

Über den Spung in den Daten bei 800 solltest du dir allerdings vorher 
Gedanken machen (unsaubere Messbereichsumschaltung?)

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich denke, am Ende soll eine Kurve herauskommen, die aus drei 
Geradenstücken besteht, die genau an den Schichtgrenzen abknicken. Das 
ist sicher nicht exakt möglich.
Vielleicht könnte man ein paar Probestücke erst mit dem Profilmessgerät 
vermessen und dann durchsägen und optisch mit dem Mikroskop vermessen. 
Damit könnte man die Kurve dann kalibrieren. Selbst dann wäre das nur 
für sehr ähnliche Fälle richtig.

: Bearbeitet durch User
von Jürgen S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Christoph db1uq K. schrieb:
> Ich denke, am Ende soll eine Kurve herauskommen, die aus drei
> Geradenstücken besteht,
3 Pro Knick, oder?

Also Strecke 1, Steigung / Übergang, Strecke 2
und später wenn es wieder runter geht.

Vor allem braucht man mal gute Messdaten! Erstens sind dort 
(Export-)fehler in den Dezimalstellen drin und ich sehe zweitens auch 
nur einen Knick, wenn ich es prozessiere. Offenbar ist das der Übergang 
in den erhabenen Bereich.

> mit dem Mikroskop vermessen
Sehr interessantes Stichwort. :-)

Bei dem Thema kommt dann noch eine weitere Variable (und wenn es sehr 
stark vergrößert, eine zweite) ins Spiel die bei der Festlegung des 
Filters zu berücksichtigen / zu messen wäre. Wenn es ein 2D-Problem 
wäre, dann gibt es noch eine dritte :-)

Da gehe ich aber aus gewissen Gründen aber nicht drauf ein, wie man 
dafür welchen Filter baut.

Für hier fände ich es am Einfachsten, die Position der Kante zu 
bestimmen und mit den Messdaten zu korrelieren.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>Mikroskop
Das Problem jeder zerstörungsfreien Prüfung. Aufsägen und nachschauen 
ist immer genauer.
Man arbeitet mit Testkörpern aus möglichst demselben Material, in das 
Teststellen eingebaut sind, z.B. statt "irgendeinem" Riss ein schmaler 
Sägeschnitt, den man optisch vermessen kann. Daher auch mein Vorschlag 
mit den Probekörpern.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.