Verfasst am: 22.01.2016, 16:23
Titel: Was macht Hilbert? konkreter Anwendungsfall
Hallo Leute.
Ich habe einen Draht, denn ich mit Schwingung belaste (Zug und Druck im Wechsel). Irgendwann reißt er und die Daten nehme ich mit nem Oszi auf und werte sie in Matlab aus.
Nun habe ich einen abnehmen Kraftverlauf bis zum Riss.
Einmal dargestellt als "normales" Signal und einmal aber mit Hilbert. Die Hilbert Funktion habe ich angewendet, weil ein Kollege mir das gezeigt hat und meinte das würde Sinn machen. Sieht auch optisch besser aus, dass die Kraft geringer wird bis zum Bruch und das geht schon mehr in Richtung klassicher Wöhler Kurve.
Nun weiß ich allerdings leider nicht was genau die Hilbert funktion macht? Ich brauche keine mathematischen Formeln oder ähnliches, sondern nur die Funktionsweise in einfachen Begriffen erklärt. Für mich sieht dass so aus, also ob die Hilbertfunktion die Linke Funktion die Beträge nimmt und dann teilt und als positives Signal wieder ausspuckt??
Die riesigen Grafiken machen die Frage sehr unübersichtlich und haben eigentlich gar nichts mit dem Problem zu tun, oder?
Die eigenmtliche Frage ist nur, was die Hilbert Funktion macht. Hilft Dir dabei die Dokumentation des Befehls
hilbert
nicht weiter? Hast Du schon die entsprechenden WikiPedia-Seiten durchgelesen?
An sich hat die Frage keinen Bezug zu Matlab, deshalb verschiebe ich sie in den Off-Topic-Bereich.
Gruß, Jan
Verschoben: 23.01.2016, 23:03 Uhr von Jan S Von Programmierung nach Off Topic
die Graphen haben insofern damit zu tun, dass der linke Graph das normale Signal ist und der rechte Graph eben der Graph mit hilbert(x) Funktion.
Im prinzip muss ich nicht unbedingt wissen, was die Funktion mathematisch genau macht und das verstehen, sondern ich muss in einfachen Worten wissen was sie mit meinem Signal macht. Daher habe ich die beiden Signale als Bild mit eingefügt.
Danke für deine Antwort.
Nur irgendwie komm ich mit den Werten dann auf der Y Achse nicht klar. Im linken sind es peak to peak ca. 16 MPa und bei der Hilberttransformierten dann nur noch peak-peak ca. 6MPa am Anfang. Kann mir jemand erklären warum das so ist?
Ich finde den Hilbert-Verlauf sehr hilfreich, da dieser schon recht nahe an eine Wöhlerkurve dran kommt, die ich am Ende rausbekommen möchte. Nur leider kann ich mit den Werten nichts anfangen?!
Also ich habe einen Zeitvektor t und ein bereits gefiltertes Signal Signal_filt.
Hier die beiden Codes des nachstehenden Screenshots:
Code:
NN = t*300; %%Schwingspielanzahl: Zeit * Frequenz
figure('Name','Originalsignal Kraftverlauf','NumberTitle','off');
plot(NN,Signal_filt);
grid on, title('Originalsignal Kraftverlauf'), xlabel('Schwingspielanzahl'),ylabel('Kraft in Newton');
figure('Name','Envelope mit Hilbert','NumberTitle','off');
yy = hilbert(Signal_filt);
env2 = abs(yy);
plot(NN,env2);
grid on, title('Hilberttfunktion Kraftverlauf'), xlabel('Schwingspielanzahl'),ylabel('Kraft in Newton');
Dieser Code ergibt das Original und die dazu gehörige Hilberttransformierte:
Jetzt sehe ich ja auf dem Original eine Peak-Peak Kraft von -10 bis 20Newton, also insgesamt 30 Newton während ich bei der Hilberttransformierte nur ca. 5 bis 20 Newton Peak to Peak sehe, also ca. 15 Newton.
Jetzt ist meine Frage, was bei der Hilberttransformierten Falsch ist, weil da müsste ja eigentlich die selbe Newton Zahl rauskommen?
Wäre schön wenn du nochmal antworten könntest.
Lies doch einfach den von mir oben verlinkten Artikel nochmal gründlich durch und setze das so um, wie es da beschrieben wird. Dann sollte auch was sinnvolles rauskommen :)
Dein Signal ist periodisch. Deine Messung ist genau eine Periode lang. Problem gelöst ;)
Und was die Funktion angeht: behandle Deine Messreihe einfach so, als wäre es eine Funktion der Zeit. Du hast für jeden Zeitpunkt einen Wert gegeben. Ob da nun irgendeine Berechnungsvorschrift (z.B. y = sin(t) + t) dahintersteckt oder einfach nur Zahlenwerte, ist egal.
Die Hilbert-Transformierte berechnet Dir
hilbert
schon richtig. Das hast Du ja auch schon entsprechend da stehen. Du rechnest dann nur falsch weiter. Die letzte Zeile des Artikels ist hier wichtig:
Zitat:
If the values of f(t) and h(t) are in arrays, calculate the envelope function with |f(t) + i h(t)|.
i
ist die komplexe Einheit, die Du in Matlab mit
1i
oder
1j
bekommst.
okay habe den code jetzt umgeschrieben.
bezogen auf deinen verlinkten artikel ist mein f(t) = Signal_filt
h(t) die Hilberttransformierte und i = die imaginäre einheit von h(t), welche ich durch imag(h(t)) ermittle. der code sieht nun so aus:
Code:
NN = t*300; %%Schwingspielanzahl: Zeit * Frequenz
figure('Name','Originalsignal Kraftverlauf','NumberTitle','off');
plot(NN,Signal_filt);
grid on, title('Originalsignal Kraftverlauf'), xlabel('Schwingspielanzahl'),ylabel('Kraft in Newton');
figure('Name','Envelope mit Hilbert','NumberTitle','off');
yy = hilbert(Signal_filt);
ii = imag(yy); % komplexe Einheit von yy (hilberttransformierte)
env2 = abs(Signal_filt + ii.*yy); %Envelope berechnet sich aus: |f(t)+i*h(t)| bzw. hier: |Signal_filt + ii * yy|
plot(NN,env2);
grid on, title('Hilberttfunktion Kraftverlauf'), xlabel('Schwingspielanzahl'),ylabel('Kraft in Newton');
Wenn ich mir das jetzt so anschaue, passen die peak-peak Kräfte schon wieder besser, aber noch nicht ganz. Ist denn die Berechnung jetzt wenigstens richtig?
Wobei ich mir gerade nicht ganz sicher bin, ob das für die Berechnung von Peak-Peak-Werten so richtig sinnvoll bzw. richtig ist. Die Einhüllende fährt ja auf den Spitzen entlang. Im Prinzip suchst Du ja die obere Einhüllende und die untere Einhüllende und daraus dann die Differenz.
Du könntest Versuchen, die Einhüllende der positiven Werte zu berechnen und die Einhüllenden der negativen Werte und die beiden dann voneinander zu subtrahieren. Aber ich glaube nicht, dass da was vernünftiges bei raus kommt...
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.