更改 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)';
原代码生成的图片:
用上面的代码得到的图片:
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)';
原代码生成的图片:
用上面的代码得到的图片: