Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Fachkräfte:
Entwicklungsingenieur (m/w) für modellbasierte Softwareentwicklung
Modellbasierte Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Softwareentwickler (m/w) für automatische Codegenerierung
Softwareentwicklung mit MATLAB/Simulink und dSPACE TargetLink im Bereich Fahrwerkregelsysteme
Elektronische Fahrwerksysteme GmbH - Ingolstadt

Applikationsingenieur (w/m) Testsysteme HIL-Simulation
Projektierung von Hardware-in-the-Loop-Systemen (Hardware und Software) in Kundenprojekten
dSPACE GmbH - Paderborn

Ingenieure (m/w) Funktionsentwicklung für Automatisiertes Fahren
Entwicklung von Software Funktionskomponenten für assistierte und automatisierte Fahrfunktionen
Continental AG - Frankfurt

Hardware Entwickler (m/w)
Bestückung, Inbetriebnahme, Planung und Durchführung von Tests
Innoventis GmbH - Würzburg

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Was macht Hilbert? konkreter Anwendungsfall

 

Richard
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.01.2016, 16:23     Titel: Was macht Hilbert? konkreter Anwendungsfall
  Antworten mit Zitat      
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??
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 10.481
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.01.2016, 23:02     Titel: Re: Was macht Hilbert? konkreter Anwendungsfall
  Antworten mit Zitat      
Hallo Richard,

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
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 23.01.2016, 23:03 Uhr von Jan S
Von Programmierung nach Off Topic
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.01.2016, 11:18     Titel:
  Antworten mit Zitat      
Hallo Jan,

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2016, 20:25     Titel:
  Antworten mit Zitat      
Ich schätze, Dein Kollege wollte Dir sagen, dass Du die Einhüllende mit der Hilberttransformation bestimmen kannst. Da hat er auch recht. Wie das geht, steht hier: http://zone.ni.com/reference/de-XX/.....rt_transform_oscillating/

Lässt sich auch ganz leicht herleiten, wenn man weiß, dass die Hilberttransformation ein Signal um 90° verschiebt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 17:12     Titel:
  Antworten mit Zitat      
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?!
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2016, 18:47     Titel:
  Antworten mit Zitat      
Poste doch mal Deinen aktuellen Code, bei dem Du die 6 MPa rausbekommst. So ohne Glaskugel ist das sonst ein bisschen schwer...
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2016, 17:36     Titel:
  Antworten mit Zitat      
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.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2016, 18:38     Titel:
  Antworten mit Zitat      
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 :)
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2016, 18:48     Titel:
  Antworten mit Zitat      
mit dem kurzen artikel kann ich leider nicht das Gewünschte anfangen. Ich habe ja keine Funktion gegeben noch ist mein Signal periodisch.

Daher kann ich auch nicht die Hilbertfunktion mit der gegebenen Anleitung bilden??
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2016, 19:18     Titel:
  Antworten mit Zitat      
Ok. Verstehe.

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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2016, 09:58     Titel:
  Antworten mit Zitat      
moin danke für deine antwort.

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');



Der Plot nun so:




Also jetzt ist die Hilbert irgendwie noch falscher als am Anfang weil da viel zu hohe Newton Zahlen rauskommen. Habe ich etwas falsch gemacht?
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.01.2016, 19:17     Titel:
  Antworten mit Zitat      
help imag
vs.
help i

Du musst Dir schon wenigstens ein bisschen Mühe geben, zu verstehen, was Du da tust und was Du erreichen willst. Sonst hat das alles keinen Sinn.
Private Nachricht senden Benutzer-Profile anzeigen
 
Richard
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 19.01.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.01.2016, 10:40     Titel:
  Antworten mit Zitat      
Das Problem ist, das bei bei der Berechnung für die Envelope ein Operator fehlt. Im Link steht einfach nur

If the values of f(t) and h(t) are in arrays, calculate the envelope function
with |f(t) + i h(t)|.

aber da steht kein Operator zwischen i und h(t). Wenn nichts dort steht dann multipliziert man ja in der Regel. Habe den Code also umgeschrieben:


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 + 1i.*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');


Und erhalte folgende, bessere Graphen:




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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.129
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.01.2016, 23:02     Titel:
  Antworten mit Zitat      
Ja, Berechnung passt jetzt.

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...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.