cwt(連続ウエーブ​レット変換)関数を用​いたときのplotの​仕方について

43 次查看(过去 30 天)
ゆうき
ゆうき 2024-11-10,12:11
回答: takemoto 2024-11-12,5:49
cwt(連続ウエーブレット変換)を用いた結果をグラフにplotするときに、surface関数とimagesc関数をそれぞれ使用したときに、グラフの結果が異なります。どちらのplotの方法が正確なのでしょうか?具体的な理由もお願いします。
fl = 100;
fs = 8000; % サンプリング周波数
t = 0:1/fs:1-1/fs; % 時間ベクトル(1秒間)
signal = sin(2*pi*fl*t); % 100Hz の信号
% モラウェーブレットを使ってCWTを計算
[wt, f] = cwt(signal, 'morse', fs);
% CWTの結果をプロット
figure;
surface(t,f,abs(wt)); %surfaceでplot
%imagesc(t,f,abs(wt)); %imagescでplot
axis tight;
shading flat
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('CWT Magnitude using Morse Wavelet');
colorbar;
よろしければ、imagescとsurfaceの関数の違いも教えてほしいです。

回答(1 个)

takemoto
takemoto 2024-11-12,5:49
このケースではsurface関数の実行結果がより正確かと思います。表示結果が異なる理由として、以下が考えられます。
  1. cwt関数で得られる周波数ベクトルはlogスケール
  2. imagesc関数の第一、第二引数がベクトルの場合、最初と最後の要素のみ使用(それ以外は無視)
  3. imagesc関数の原点は左上
imagescを使用し、100Hz付近にピークを持つ特性を確認する場合、以下の様に書けるかと思います。
fl = 100;
fs = 8000; % サンプリング周波数
t = 0:1/fs:1-1/fs; % 時間ベクトル(1秒間)
signal = sin(2*pi*fl*t); % 100Hz の信号
[wt, f] = cwt(signal, 'morse', fs);
imagesc("XData",t,"YData",f,"CData",abs(wt)); % 縦軸と横軸のデータを明示
set(gca,"Yscale","log") % 縦軸をlogスケールとする
axis xy % 縦軸の反転

类别

Help CenterFile Exchange 中查找有关 ビッグ データの処理 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!