2021.12.31的记录: 刚开始是用spectrogram函数直接绘制,但是由于会出现右边的色块图,不能作为训练数据集。
所以需要自己使用spectrogram函数返回的值来绘图。参考了时频分析之STFT:短时傅里叶变换的原理与代码实现(非调用Matlab API)这篇文章,修改一下这位博主的代码中PlotSTFT_2函数。
function PlotSTFT_2(T, F, S, win)
wlen = length(win);
C = sum(win)/wlen;
S = abs(S)/wlen/C;
S = 20*log10(S + 1e-6);
%figure(1)
surf(F, T, S')
shading interp;
axis tight;
view(0, 90);
%set(gca, 'FontName', 'Times New Roman', 'FontSize', 14);
ylabel('Time, s');
xlabel('Frequency, Hz');
title('Amplitude spectrogram of the signal');
% hcol = colorbar;
% %set(hcol, 'FontName', 'Times New Roman', 'FontSize', 14);
% ylabel(hcol, 'Magnitude, dB');
end
完美。
|