Wie kann ich die Frequenz in Abhängigkeit von der Größe der Wavelet-Transformation darstellen?


14

Ich verwende eine kontinuierliche Wavelet-Transformation nach Morlet. Ich habe ein wscalogramSignal und möchte jetzt die Frequenz wie im folgenden Bild darstellen, aber ich weiß nicht, wie ich es machen soll:

Bildbeschreibung hier eingeben

Ich habe die scal2freqMATLAB-Funktion verwendet, um Skalen in Pseudofrequenzen umzuwandeln. Außerdem habe ich einige Frequenzen in meinem Signal, die ein großes Dämpfungsverhältnis (4%) aufweisen, sodass sie in der Darstellung nicht gut sichtbar sind. Wie kann ich diese stark gedämpften Modi übertreiben?

Ich benutze MATLAB, hier sind meine Codes:

% Import the text4.txt to matlab workspace. and save it under name "data"
t=linspace(0,30,301);
Fs=ceil(inv(t(2)-t(1)));
x=data(:,4); % use x=data(:,3),x=data(:,5) too. first column is time,second is refrence
wname = 'morl';
scales = 1:1:256;
coefs = cwt(x,scales,wname,'lvlabs');
freq = scal2frq(scales,wname,1/Fs);
surf(t,freq,abs(coefs));shading('interp');
axis tight; xlabel('Seconds'); ylabel('Pseudo-Frequency (Hz)');
axis([0 30 0 1 0 60])
xlabel('Time'); ylabel('Frequency');
figure;
sc=wscalogram('image',coefs,'scales',freq,'ydata',x);
hold on 

Meine aktuelle Handlung sieht so aus:

Bildbeschreibung hier eingeben


Welche Form haben Ihre Wavelet-Transformationsdaten?
Jim Clay

Hallo @JimClay! Ich bin nicht sicher, ob ich Ihre Frage verstehe. aber wenn du meinst, wie es aussieht, ist es wie der 2. Link, den ich bei der Frage beibehalten habe. und ich möchte eine Handlung wie 1st Link. (2nd [myplot]) cubeupload.com/im/bSSlMI.jpg 1st [ wanted ]) cubeupload.com/im/KbhGMI.jpg hier ist mein signal < fileswap.com/dl/Lwf7n96fAt/test4.txt.html > hier ist Meine Mfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html > Mit freundlichen Grüßen.
Elektriker

Ich bin mir nicht sicher, was Ihre Frage ist ...
Tarin Ziyaee

Hi @ user4619; Schauen Sie sich die erste Handlung an. Auf der rechten Seite des Wavelet-Skalogramms sehen Sie einen Plot [freq-magnitude]. Das zweite Bild ist mein Wavelet-Skalogramm. aber ich weiß nicht, wie man [Frequenz-Größe] wie die rechte Seite der ersten Handlung zeichnet. Irgendeine Hilfe, bitte?
Elektriker

@Electricman Ein Spektrogramm ist nicht dasselbe wie ein Skalogramm. Wenn Sie ein Skalogramm erstellen, gibt es keine Frequenz-VS-Zeit, sondern nur eine Skalierungs-VS-Zeit. Also, welches machst du genau?
Tarin Ziyaee

Antworten:


4

Wenn Sie Ihren Code ein wenig ändern, aber keine größeren Änderungen vornehmen, erhalte ich in beiden Fällen die richtigen Ergebnisse. Verwenden Sie diesen Vorlagencode hier, und Sie sollten keine Probleme sehen. Ich bekomme die richtigen Ergebnisse.

clear all; 
t=linspace(0,30,301); 
Fs = (inv(t(2)-t(1))); 
x=randn(100,1);  
wname = 'morl'; 
scales = 1:1:256; 
chefs = cwt(x,scales,wname,'lvlabs');

freq = scal2frq(scales,wname,1/Fs);

figure; 
coefsSquared = abs(coefs).^2; 
imagesc(coefsSquared); 
grid off;

%Pick one of the columsn to plot: 
figure; 
plot(coefsSquared(:,47))

Um die Abbildung auf der rechten Seite des ersten von Ihnen erstellten Bildes zu erhalten, ist dies einfach das Zeitscheibenspektrum. Mit anderen Worten, eine Spalte Ihrer Frequenz-Zeit-Matrix.

Zum Beispiel könnten wir die folgende Quadratkoeffizientenmatrix in Frequenz vs. Zeit erhalten:

Bildbeschreibung hier eingeben

Nehmen wir an, wir wollen das Spektrum für die Zeitscheibe in Spalte 47 betrachten. Dann ist dies hier gegeben:

Bildbeschreibung hier eingeben

Hier sehen Sie dann die Potenz der Koeffizienten gegenüber der Frequenz für die Zeitscheibe entsprechend Spalte 47.


Vielen Dank für die Änderung des Codes. Aber ich habe noch keine Antwort auf meine Frage bekommen. Die Frage ist: Wie kann ich die Frequenz oder die Skalierung darstellen [kein Unterschied]? Ich möchte eine Handlung wie die rechte Seite des ersten Bildes. Vielen Dank im Voraus
Electricman

1
@Electricman Das Diagramm auf der rechten Seite ist einfach eine Spalte Ihrer Frequenz-VS-Zeit-Matrix.
Tarin Ziyaee

- @ user4619 Es ist nicht Frequenz vs. Ich bin nicht sicher, ob es genau Coefs oder Magnitude ist, aber es ist offensichtlich proportional zu Cofes oder Cofes ^ 2. tnx
Electricman

@Electricman Bitte beachten Sie die Änderungen. Ist es jetzt klarer?
Tarin Ziyaee

- @ user4619 Es funktioniert. Danke für deine Antwort. Ich habe am Ende von mfile einen kleinen Code eingefügt. und habe die gleiche Handlung wie die rechte Seite der erwähnten Handlung. cof2 = abs (coefs). ^ 2; cof2trans = cof2 '; maxmods = max (cof2trans); Zahl; Handlungsachse (maxmods, freq) ([0 60 0 1]) Mit freundlichen Grüßen
Electricman

4

Die kontinuierliche Wavelet-Transformation (CWT) ist eine Methode zur Zeitskalenanalyse . Ja, Sie haben es richtig gelesen, skalieren , nicht die Frequenz . Es ist jedoch möglich, die Skalen auf Frequenzen abzubilden, und dies sogar recht einfach. Da Sie ein MATLAB-Benutzer sind, möchten Sie wahrscheinlich diese Funktion verwenden , die folgende Aufgaben ausführt:

F = scal2frq (A, 'wname', DELTA) gibt die Pseudofrequenzen zurück, die den von A angegebenen Skalen, der Wavelet-Funktion 'wname' (weitere Informationen siehe wavefun) und der Abtastperiode DELTA entsprechen.

Wie Sie lesen können, handelt es sich bei den Frequenzen nicht um die tatsächlichen Frequenzen im Signal, sondern um Näherungswerte. Wenn Sie die reellen Frequenzen wollen, sollten Sie die Kurzzeit-Fourier-Transformation (STFT) verwenden.

Wann sollte man das CWT verwenden? Im Allgemeinen funktionieren Wavelets gut, wenn die Signale transient sind (dh haben schnelle Änderungen).

EDIT: haha, ich weiß nicht was ich hier mache. sorry :-D habe den Punkt deiner Frage komplett verpasst. Lies einfach den Titel ...


@wave Ihre Angaben sind korrekt. Na und? Ich möchte nur eine Handlung wie auf der rechten Seite des ersten Bildes haben. die Freq vs Magnitude. und es ist OK, wenn ich Skalen gegen Größe erhalte, solange ich scal2freq verwenden kann.
Elektriker

"Wenn Sie die reellen Frequenzen wollen, sollten Sie die Kurzzeit-Fourier-Transformation (STFT) verwenden." Morlet-Wavelet hat die gleiche Frequenz wie eine STFT mit Gauß-Fenster. Die "Atome" beider Transformationen sind gleich.
Endolith

0

Nicht sicher, ob Sie noch Hilfe benötigen ...

Wenn Sie Frequenz oder Größe wünschen, verwenden Sie einen "mesh / surf" -Befehl, um die Koeffizienten zu zeichnen.

Ändern Sie dann die Ausrichtung des Diagramms, sodass Sie das gewünschte Ergebnis erhalten. Siehe hierzu den Befehl "view".


Danke, ich habe dieses Problem vor einigen Monaten gelöst und meine Ergebnisse veröffentlicht. Aber ich werde es beim nächsten Mal mit deiner Alternative versuchen. Viel Glück. @ asilva732
Elektriker
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.