我可以调整频谱图频率轴吗?

时间:2012-10-09 20:45:46

标签: matlab spectrogram

MATLAB documentation examples for the spectrogram function给出频率轴设置为[0 500]的示例。我可以将其更改为[0 100]之类的内容吗?显然运行axis命令会为我做这个,但是调整最终结果并“炸毁”结果图,使其像素化。我基本上打算建立一个频谱图,只搜索0-100之间的频率,而不是在建立频谱图后重新调整。

以下是该文档的一个示例:

T = 0:0.001:2;
X = chirp(T,0,1,150);
spectrogram(X,256,250,256,1E3,'yaxis');

这会产生以下结果: Linear chirp spectrogram

不需要350Hz以下的所有东西。有没有办法在构建光谱图时不包括350到500之间的所有内容,而不是在事后调整轴?

2 个答案:

答案 0 :(得分:7)

来自文档:

  

[S,F,T] =频谱图(x,窗口,noverlap,F)使用频率为Hz的矢量F. F必须是具有至少两个元素的向量。这种情况使用Goertzel算法计算F中频率的频谱图。指定的频率四舍五入到与信号分辨率相称的最接近的DFT箱。在使用nfft或nfft的默认值的所有其他语法情况中,使用短时傅立叶变换。返回的F向量是舍入频率的向量。 T是计算频谱图的时间矢量。 F的长度等于S的行数.T的长度等于k,如上所定义,每个值对应于每个段的中心。

这对你有帮助吗?

答案 1 :(得分:-1)

FFT非常快,最好提高分辨率然后丢弃不需要的数据。如果您需要更好的光谱分辨率(更多频率区间),请增加FFT大小。为了在时间维度上获得更平滑的频谱,增加noverlap值以减少每个连续FFT的增量。在这种情况下,您不会指定F.如果FFT大小为1024,那么您将获得1024/2 + 1个频率区。

FFTN = 512;
start = 512*(350/500); % Only care about freq bins above this value
WIN_SIZE = FFTN;
overlap = floor(FFTN*0.8);
[~,F,T,P] = spectrogram(y, WIN_SIZE, overlap, FFTN);
f = 0:(length(F)-1);
f = f*((Fs/2)/length(F));
P = P(start:512,:);
f = f(1,start:512);
imagesc(T,f,10*log10(P),[-70 20]);