このケースではsurface関数の実行結果がより正確かと思います。表示結果が異なる理由として、以下が考えられます。
- cwt関数で得られる周波数ベクトルはlogスケール
- imagesc関数の第一、第二引数がベクトルの場合、最初と最後の要素のみ使用(それ以外は無視)
- 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 % 縦軸の反転