Hüllkurve überlagertes Signal

#4189012
Lesenswert?

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
Angehängte Dateien:
#4190313
Lesenswert?

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.
#4193841
Lesenswert?

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?
Gast #4195549
Lesenswert?

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.
#4208420
Lesenswert?

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
Angehängte Dateien:
#4209477
Lesenswert?

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)?
Angehängte Dateien:
#4209776
Lesenswert?

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
#4209913
Lesenswert?

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.
Angehängte Dateien:
Gast #4210302
Lesenswert?

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?
#4216829
Lesenswert?

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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren