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

43 views (last 30 days)
ゆうき
ゆうき on 10 Nov 2024 at 12:11
Answered: takemoto on 12 Nov 2024 at 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の関数の違いも教えてほしいです。

Answers (1)

takemoto
takemoto on 12 Nov 2024 at 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 % 縦軸の反転

Categories

Find more on ビッグ データの処理 in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!