5

函数的MATLAB 文档示例spectrogram提供了频率轴设置为的示例[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');

这会产生以下结果: 线性啁啾频谱图

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

4

2 回答 2

7

从文档中:

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

这对你有帮助吗?

于 2012-10-09T20:49:02.793 回答
-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]); 
于 2015-05-29T16:38:24.367 回答