Hallo Leute, ich habe ein überlagertes Signal aus 2 oder mehr Sinus-signalen. Jetzt muss ich die äußere Hüllkurve bestimmen (siehe Anhang). Bei einer einfachen Sinusschwingung mache ich das indem ich die Maximas bestimme und dann interpoliere. Problem dabei (siehe Anhang) ist, dass bei der überlagerten Schwingung ja auch nicht nur die äußeren Maximas sondern alle Maximas gefunden werden. Führt dann zu einer verhubbelten Hüllkurve. Ich will jetzt aber eine schöne glatte Kurve. Mir fällt leider kein Kriterium ein wie ich das MATLAB (ich arbeite mit MATLAB) beibringen soll. Die erste Idee war einfach wieder die MAximas der verhubelten Hüllkurve zu bestimmen. Allerdings führt das in einigen Fällen zu einer einzigen oder 2 Geraden mit einem Eck (unerwünscht). Falls jemand eine Idee hat bin ich sehr dankbar
nutze google. Matlab sollte Möglichkeiten mitbringen, nicht nur linar sondern 2. oder 3. Grades, oder mit Splines zu interpolieren. dazu sammelst du die Stützpunkte der ersten Hüllkurve in einem Vektor
Also das mit den maximas der Absolutbeträge hat wirklich was geholfen, danke. @P.P.: habe mich vllt nicht deutlich ausgedrückt. Aber wenn zwischen 2 gewollten Stützstellen, also den absoluten Maximas, noch 4 "falsche" liegen, ist es eigentlich total egal wie ich interpoliere, weil ich die Stellen ja nicht haben will :-)
du könntest die Max und Min-Peaks ermitteln, interpolieren und beide Kurven subtrahieren.
Chris M. schrieb: > Hallo Leute, ich habe ein überlagertes Signal aus 2 oder mehr > Sinus-signalen. > > Jetzt muss ich die äußere Hüllkurve bestimmen (siehe Anhang). Bei einer > einfachen Sinusschwingung mache ich das indem ich die Maximas bestimme > und dann interpoliere. Dann wende DeinenAlgorithmus doch einfach zweimal hintereinander an.
mehr oder weniger massiv bandpass filtern, dann bleibt nur der Traeger uebrig. In matlab ist das eine Matrix-Vektor multiplikation.
Fitten mit:
Oder Fourier Transformieren und die beiden Frequenzen bestimmen und bandpassfiltern. Oder die Hüllkurve der Hüllkurve bestimmen.
Beim Fitten muss er aber vermutlich in die beiden Sinuse noch einen Phasenversatz fitten. Das wird wohl aufwaendig.
Chris M. schrieb: > Also das mit den maximas der Absolutbeträge hat wirklich was geholfen, > danke. Duerfte aber falsche Ergebnisse liefern, auch wenn sie auf den ersten Blick gut aussehen. Die Abklingzeit duerfte deutlich zu lang sein dadurch.
Bei nicht abklingenden Schwingungen nimmt man normalerweise die Hilbert Trafo: http://de.mathworks.com/help/signal/ug/envelope-extraction-using-the-analytic-signal.html Wie gut das hier funktioniert müsstest du mal ausprobieren. Was passiert, wenn du in die Maxima nur eine abklingende E-Fkt fittest?
Also ihr habt mir schon sehr weitergeholfen. Die eingehüllte Kurve sieht sehr schön aus. Jetzt will ich das ganze mathematisch beschreiben und habe versucht eine Kurve anzufitten (fit(x,y,...)) Was nur bedingt gut funktioniert. Vorne ist es praktisch eine e-Funktin aber hinten ist es dann ein sehr langer praktisch linearer Teil. Jemand eine Idee wie ich sowas möglichst perfekt "gefittet" bekomme?
Chris M. schrieb: > Vorne ist es praktisch eine e-Funktin aber hinten ist es > dann ein sehr langer praktisch linearer Teil. Jemand eine Idee wie ich > sowas möglichst perfekt "gefittet" bekomme? Mit einer e-Funktion und einer zusätzlichen Geraden (Offset, Steigung) ;-) Der lange lineare Teil deutet auf einen zweiten Prozess hin, der dir in das abklingende Signal reinstreut.
Ok also ich muss mich nochmal melden. Es ist so gesehen eine E-Funktion, das Geraden ähnliche Stück wirkt nur aufgrund der Größe der Werte linear, verläuft aber eigentlich genauso expontentiell. Mein neues Problem: Ich muss das ganze mathematisch beschreiben können. Also MATLAB genommen und ein Funktionsfitting versucht mit: (1) fit(x,y,'exp1') => A * exp(B*x) und (2) fit(x,y,'exp2') => A * exp(B*X) + C * exp(D*x) Die Ergebnisse seht ihr in den Bildern. Alles andere als ideal, gerade das die gerittete Funktion unter die eigentliche Kurve fällt (sie wird mit den Maximas bestimmt) ist denke ich nicht gut. Kennt sich hier jemand aus und weiß was ich machen kann damit der Fit noch deutlich besser wird? Danke schonmal
a*exp(b*x)*cos(omega*x-phi)+d? damit würde ich ja den gedämpften Sinus ansich anfitten, ich will ja aber eine Kurve ( e-Fkt) haben, die den Verlauf der Dämpfung beschreibt
Chris M. schrieb: > damit würde ich ja den gedämpften Sinus ansich anfitten, ich will ja > aber eine Kurve ( e-Fkt) haben, die den Verlauf der Dämpfung beschreibt a*exp(b*x)* 1 +d? Gruss WK
Ok habe ich jetzt mal angefangen. Folgende Plots dazu. 1.jpg - Eingangssignal mit Fehler und erstellter Hüllkurve Der Fit sieht schonmal nicht schlecht aus, allerdings ist er im Bereich bis 2000 alles andere als gut. Wenn ich diesen Fit benutze, 1/f(x) mache und dann mein Signal mit der Umkehrfunktion multipliziere kommt Bild 2.jpg raus. Alls andere als eine gute Kompensation. Da die krassen Werte am Anfang wohl eher schlecht auf den Fit wirken, habe ich einfach mal gesagt ich schließe die ersten 150 x-Werte vom Fit aus. Der Fit dazu in Plot 3.jpg. Vorne nicht besonders, dafür dann schon früher näher dran. Das Pendant zu Bild 2.jpg dann in Bild 4.jpg. Auch nicht wirklich brauchbar. Zoomt man Plot 3.jpg näher ran (siehe Plot 5.jpg) sieht man, dass der fit auch hier eher schlecht als recht ist. Ich verstehe nicht warum das hier so mega schlecht wird. Ich habe es an einem deutlich einfacheren Signal probiert und hier ist das Ergebnis ziemlich gut, siehe Plot 6.jpg. Irgendjemand eine Idee was man drehen kann? Ein bisschen was erreicht man, wenn man dem fit Startwerte vorgibt, aber berauschend ist das auch nicht, zumal ich nicht weiß wie ich auf ideale komme für a,b,d (a*exp(b*x)+d)?
Hi, wollte Du nicht zwei überlagerte abklingende Sinüsse filtern. Jetzt nur noch einer? Wenn nur einer, dann hier zwei links, in denen ich das Problem final löse :-))) (geht aber nicht für zwei überlagerte) http://www.dsprelated.com/showarticle/795.php http://www.mathworks.com/matlabcentral/fileexchange/50756-fit-a-damped-sine-wave Cheers Detlef
Also wenn du die Funktion fitten möchtest, musst du auch die Theorie dahinter richtig verstehen. Natürlich kannst du eine Funktion, die so aussieht:
nicht mit einer normalen exp() Funktion fitten. Geb mal die Daten. Edit: Keine Ahnung warum mir der LaTeX code nicht richtig angezeigt wird.
:
Bearbeitet durch User
Ich glaub wir verstehen uns hier etwas falsch. Ich will nicht die Funktion ansich anfitten sondern die Dämpfung die auf der Funktion liegt mit einer E-Funktion darstellen... Und die Dämpfung entspricht in meinen Augen doch wohl eindeutig dem Verlauf einer E-Funktion oder?
Chris M. schrieb: > Ich glaub wir verstehen uns hier etwas falsch. Ich will nicht > die Funktion ansich anfitten sondern die Dämpfung die auf der > Funktion liegt mit einer E-Funktion darstellen... Kruzitürken. Wenn Du eine Approximation für die "Funktion ansich" hast, wirst Du doch wohl in der Lage sein, den Teilterm mit e^x, der die Dämpfung beschreibt, herauszulösen?! > Und die Dämpfung entspricht in meinen Augen doch wohl eindeutig > dem Verlauf einer E-Funktion oder? Und was glaubst Du, was der Teilterm "exp(-omega*t)" in Geralds Modellfunktion beschreibt?
Oh ok jetzt habe ich geschlafen... habt natürlich recht, dachte nur es war ein Missverständnis. Sorry!
Ok Leute, vielen dank das ganze geht jetzt schon viel viel besser. Jetzt eine andere hypotetische Frage. Wenn ich ein Signal mit der inversen Hüllkurve multipliziere bekomme ich ja die Dämpfung raus. Vorausgesetzt, mein Signal ist um Null symmetrisch, heißt die positiven Werte werden auf 1 und die negativen auf -1 gezogen. Wenn ich jetzt ein nicht zu Null symmetrisches Signal habe, gehen wir einfach mal davon aus das es um 50 herum schwingt. Ich weiß, ist ein Offset, klug wäre es, denn herauszuziehen. Wenn ich das Signal aber zuerst kompensiere und dann denn Offset rausziehe sollte das eine genauere Offset Bestimmung ermöglichen. Problem ist, ich nehme nicht an, dass es eine Möglichkeit gibt, dass Signal so zu multiplizieren, dass alle Werte unter < 50 nachher von der Amplitude her 49 sind und alle > 50 auf 51.... sehe zumindest keine mathematische Möglichkeit dazu... oder gibt es da irgendeine? Also kurz: statt -1:0:1 hätte ich gerne 49:50:51... was in meinen Augen aber nicht geht, fragen kostet ja aber nichts...
Hoppla, habe jetzt erst deine Frage gesehen. Wenn die Kurve einen Offset hat, musst du den natürlich einfach in die Fit-Funktion einfügen, also ein: "+y" hinten dran und fertig ist das Ding. Der Sinus darf natürlich auch eine andere Amplitude als 1 haben.
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.