2017-11-18 210 views
1

我是Matlab和信号处理新手。我在定义频谱图处理的频率范围时遇到了问题。当我绘制.wav音频数据的声谱图时,y轴的频率从0到23 kHz左右。我正在寻找的有用数据是在200-400赫兹的范围内。我的代码片段是:在Matlab频谱图函数中定义频率极限的建议?

[samFa, fs] = audioread('samFa.wav'); %convert audio to numerical data 
samFa = samFa(:,1); %take only one channel of numerical output 
spectrogram(samFA,2205,1200,12800, fs,'yaxis','MinThreshold',-80); 

我不希望是运行到一个问题,并立即放弃和岗位重复的问题StackOverflow的一些noobie,所以我可以我做了尽可能多的挖掘,但我在智慧的结尾。

  • 我搜索了参数或方法的文档,让Matlab只分析数据的一个子集或范围,但什么都没发现。此外,在所有示例中,频率范围似乎都自动适应数据集。
  • 我知道有可能只是计算的频谱对频率的整个范围内,然后除去所有的不必要的数据通过截取或手动更改在图中本身的限制,但改变绘图范围不与所述数值帮助数据。
  • 我去了很多类似的问题寻找,并从2012年的所有方式找到了答案:Can I adjust spectogram frequency axes? 其中建议的答案是导入频谱图的特定频率矢量进行分析。我试图通过200和400,以及其他一些测试范围之间的整数值的载体,但得到的错误:

    Error using welchparse>welch_options (line 297) 
    The sampling frequency must be a scalar. 
    

    我试图传递参数在功能不同的地方,有没有用,并且在文档中没有看到关于此参数的任何信息,这让我相信这个功能有可能在2012年和现在之间的某个时候被删除。

  • 当绘制频谱图而不提供信号频率时,Matlab提供了一个归一化频谱图,它只提供一个更小的数据窗口,我可以通过视觉来评估覆盖0:5kHz(音频中泛音的伪像)的数据,所以我知道MATLAB是没有找到高于此范围,使频率的任何数据范围到20kHz的
  • 我一直在努力学习一些信号处理这个项目,所以我相信奈奎斯特频率应该是最高频率傅立叶变换能够分析为采样频率的一半。我的记录频率采样在44,100赫兹,频谱范围是围绕22或23千赫,导致我相信,它的Matlab的是注意到我的采样频率,并假设它需要分析了这么高的范围。

对于我的工作,我做我需要制作数千谱图到再通过更进一步的分析处理,所以它是非常耗时的Matlab来进行处理这么多不必要的数据,我希望有在Matlab中以某种方式来解决这个问题。

对不起,很长的帖子,但我想充分说明我的问题,并表明我已经做了力所能及的工作,我可以转向寻求帮助之前解决问题。非常感谢你。

回答

2

获取轴手柄,并设置可视范围有:

spectrogram(samFA,2205,1200,12800, fs,'yaxis','MinThreshold',-80); 
ax=gca; 
ylim(ax, [0.2,0.4]); %kHz 

如果你想计算特定频率范围,以节省时间,你最好使用goertzel

f = 200:10:400; 
freq_indices = round(f/fs*N) + 1; 
dft_data = goertzel(data,freq_indices); 
+0

请注意,如果你需要比数多(N),格策尔过滤器为您的频率分辨率的要求,采用大小为N的FFT和扔掉所有不需要的频谱通常更快。 – hotpaw2