更改 MATLAB 频谱图的轴单位

Changing axis units of MATLAB spectrogram

spectrogram 生成的图形的轴单位如何强制 x 轴始终为 "s"(秒)而 y 轴始终为 "Hz"(赫兹)轴?

以下频谱图可作为演示。在此示例中,它们已由 MATLAB 自动调整为 "mins" 和 "kHz".

t = 0:0.0001:200;
x = chirp(t,100,1,200,'quadratic');
spectrogram(x,128,120,128,2e3,'yaxis')

spectrogram 函数调用 pspectrogram 来完成实际工作,而这又调用 engunits 来确定适合您的信号的 "engineering units"。显然 spectrogram 没有避免单位转换的输入选项。

因此,最好的方法似乎是获取 spectrogram 的实际输出并自己绘制图像,无需单位转换:

[~,F,T,P] = spectrogram(x,128,120,128,2e3,'yaxis');
imagesc(T, F, 10*log10(P+eps)) % add eps like pspectrogram does
axis xy
ylabel('Frequency (Hz)')
xlabel('Time (s)')
h = colorbar;
h.Label.String = 'Power/frequency (dB/Hz)';
  • 原代码生成的图片:

  • 用上面的代码得到的图片: