周波数対ウェーブレット変換の大きさをプロットするにはどうすればよいですか?


14

Morlet連続ウェーブレット変換を実行しています。私はwscalogram信号を受け取ったので、次の図のように周波数の大きさをプロットしたいのですが、どうすればいいのかわかりません。

ここに画像の説明を入力してください

scal2freqMATLAB関数を使用して、スケールを擬似周波数に変換しました。また、信号にいくつかの周波数があり、それらは大きな減衰比(4%)を持っているため、プロットではよく見えません。これらの非常に減衰したモードを誇張するにはどうすればよいですか?

私はMATLABを使用しています、ここに私のコードがあります:

% 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 

私の現在のプロットは次のようになります。

ここに画像の説明を入力してください


ウェーブレット変換データはどのような形式を取りますか?
ジム・クレイ

こんにちは@JimClay!私はあなたの質問を理解しているかどうかわかりません。しかし、あなたがそれがどのように見えるかを意味するなら、それは私が質問で維持した2番目のリンクのようなものです。そして、私は最初のリンクのようなプロットが欲しいです。(2番目の[myplot])cubeupload.com/im/bSSlMI.jpg 1番目の[desired])cubeupload.com/im/KbhGMI.jpg ここに私の信号< fileswap.com/dl/Lwf7n96fAt/test4.txt.html >があります私のMfile < fileswap.com/dl/gMrslBFAdb/mfile.txt.html >よろしくお願いします。
電気

私は実際に確認してくださいあなたの質問は...何であるかないよ
タリンZiyaee

こんにちは@ user4619; 最初のプロットを見てください。ウェーブレットスケイログラム[matlabによって取得された]の右側にプロット[freq-magnitude]が表示されます。2番目の写真は、ウェーブレットスキャログラムです。しかし、最初のプロットの右側のように、[freq-magnitude]をプロットする方法がわかりません。助けてください
電気

@Electricmanスペクトログラムは、スカログラムと同じではありません。スカログラムを使用する場合は、周波数VS時間はなく、VS時間のみをスケーリングします。それで、あなたはどれを正確にやっていますか?
タリンジヤエ

回答:


4

コードを少し変更しますが、大きな変更はありません。どちらにしても正しい結果が得られます。ここでこのテンプレートコードを使用すると、問題は発生しません。正しい結果が得られます。

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

最初に表示した画像の右側にある図を取得するには、それは単にタイムスライススペクトルです。つまり、周波数と時間のマトリックスの1列です。

たとえば、周波数と時間の関係で次の2乗係数行列を取得できます。

ここに画像の説明を入力してください

次に、47列目のタイムスライスのスペクトルを確認するとします。次に、これを示します。

ここに画像の説明を入力してください

ここで、列47に対応するタイムスライスの係数のパワー対周波数を確認できます。


コードを修正していただきありがとうございます。しかし、質問に対する回答がまだ得られていません。質問は、どのように周波数振幅またはスケール振幅をプロットできますか[差なし]です。最初の写真の右側のようなプロットが必要です。[問題です]。事前に感謝
電気

1
@Electricman右側のプロットは、Frequency VS Timeマトリックスの1列にすぎません。
タリンジヤエ

-@ user4619周波数対時間ではありません。時間範囲は0〜20、周波数範囲は0〜2.5ですが、右側のプロットは周波数対振幅です。その正確な係数や大きさはわかりませんが、明らかにcofesまたはcofes ^ 2に比例します。tnx
エレクトリック

@Electricman編集をご覧ください。今より明確ですか?
タリンジヤエ2013

-@ user4619動作します。ご回答有難うございます。mfileの最後に小さなコードを追加しました。上記のプロットの右側と同じプロットを得ました。cof2 = abs(coefs)。^ 2; cof2trans = cof2 '; maxmods = max(cof2trans); 図; plot(maxmods、freq)axis([0 60 0 1])よろしく
Electricman

4

連続ウェーブレット変換(CWT)は、時間スケール分析の方法です。はい、周波数ではなく、スケールを正しく読みます。ただし、スケールを周波数にマップすることは可能であり、非常に簡単です。MATLABユーザーであるため、次のことを行うこの関数を使用することをお勧めします。

F = scal2frq(A、 'wname'、DELTA)は、Aで指定されたスケール、ウェーブレット関数 'wname'(詳細についてはwavefunを参照)、およびサンプリング周期DELTAに対応する擬似周波数を返します。

ご覧のとおり、周波数は信号の実際の周波数ではなく、近似値です。実周波数が必要な場合は、短時間フーリエ変換(STFT)を使用する必要があります。

それでは、いつCWTを使用すべきでしょうか?一般的な原則として、ウェーブレットは、信号が過渡的な場合(つまり、変化が速い場合)にうまく機能します。

編集:笑、私はここで何をしているのかわかりません。すみません:-Dはあなたの質問のポイントを完全に逃しました。タイトルを読んでください。


情報が正しい@wave。しかし、だから何?最初の写真の右側のようなプロットが欲しいだけです。周波数と大きさ。scal2freqを使用できる限り、スケールとマグニチュードを取得できれば問題ありません。
エレクトリック

「実際の周波数が必要な場合は、短時間フーリエ変換(STFT)を使用する必要があります。」 Morletウェーブレットの周波数は、ガウスウィンドウ化されたSTFTの周波数と同じです。両方の変換の「原子」は同じです。
endolith

0

まだ助けが必要かどうかわからない...

周波数対振幅を求める場合は、「mesh / surf」コマンドを使用して係数をプロットします。

次に、求める結果が得られるようにプロットの方向を変更します。これについては、「view」コマンドを参照してください。


おかげで、数ヶ月前にその問題を解決し、結果を公開しました。しかし、私は次回あなたの代替案を試します。しかし、コメントの場所にあなたの答えを移動してください。幸運を。@ asilva732
エレクトリック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.