Mein Wissen über Wavelets ist weniger als Epsilon. Trage es mit mir. Wenn ich ein Signal von zwei gut getrennten Sinuskurven (15 und 48 Hz) plus zufälligem Rauschen habe, kann ich die beiden in einem Spektrogramm (die beiden Streifen in meinem Bild) deutlich erkennen.
t=0:0.002:1; % fs = 500 Hz
x=4*sin(2*pi*15*t)+2*cos(2*pi*48*t);
xn = x + randn(size(x));
figure(1);
plot(xn);
figure(2);
spectrogram(xn, 64, 60, [], 500);
Aber mit 'wscalogram' kann ich nicht sagen, dass ich die Komponenten unterscheiden kann:
coefs = cwt(xn,1:64,'db8','scalCNT');
wscalogram('image',coefs,'scales',1:64,'ydata',xn);
Gibt es eine Möglichkeit, aus dem Skalogramm zu lesen, dass es zwei verschiedene Sinuskurven gibt, und wenn ja, wie kann ich sie durch Wavelet-Zerlegung und -Filterung trennen? Ich dachte, dass meine Wahl des Wavelets ('db8') vielleicht nicht optimal ist, aber ich kann keinen großen Unterschied bei der Verwendung anderer Typen und einer größeren (oder kleineren) Anzahl von Skalen feststellen. Offensichtlich fehlt mir etwas darüber, wo und wann und worauf Wavelets angewendet werden sollen.
Vielen Dank
quelle
Antworten:
Wavelets sind ideal für lokalisierte Veranstaltungen. Die Fourier-Transformation repräsentiert eine Funktion als Summe von Sinus und Cosinus, von denen keiner lokalisiert ist. Das Spektrogramm speichert einige Zeitinformationen auf Kosten der Frequenzauflösung
In Ihrem Fall ist das Signal überhaupt nicht lokalisiert. Das Spektrogramm verschmiert Ihr 15-Hz-Band über mehrere Hz, da es einige Zeitinformationen erfasst und das Skalogramm auf Hochtouren fehlschlägt.
quelle
Ja, Ihnen fehlt etwas :) Obwohl Sie verschiedene Wavelet-Familien ausprobiert haben, sollten Sie die verwenden
GaborWavelet
. Ich habe dies geschriebenMathematica
, aber Sie können es in jeder gewünschten Umgebung tun.quelle
GaborWavelet
sollte hier erklärt werden.