首页 文章

在Matlab谱图函数中定义频率限制的建议?

提问于
浏览
1

我是Matlab和信号处理的新手 . 我在定义处理频谱图的频率范围时遇到了问题 . 当我绘制.wav音频数据的频谱图时,y轴,频率从零到大约23 kHz . 我正在寻找的有用数据在200-400赫兹的范围内 . 我的代码片段是:

[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);

我不想成为遇到问题的一些noobie并立即放弃并向stackoverflow发布重复的问题,所以我尽可能多地挖掘,但是我的智慧结束了 .

  • 我在文档中搜索了参数或方法,让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

  • I 've been trying to learn some signal processing for this project, so I believe the Nyquist frequency should be the maximum frequency that a Fourier transform is able to analyze, to be half the sampling frequency. My recording frequency is sampling at 44,100 Hz, and the spectrogram is ranging to around 22 or 23 kHz, leading me to believe that it' s Matlab注意到我的采样频率并假设它需要分析到这么高的范围 .

对于我的工作,我正在做我需要生成数千个光谱图,然后通过进一步的分析进行处理,因此Matlab处理如此多的不必要数据非常耗时,我希望Matlab中有一些功能以某种方式解决这个问题 .

很抱歉很长的帖子,但我想完全解释我的问题,并表明我已经做了尽可能多的工作来解决问题,然后再寻求帮助 . 非常感谢你 .

1 回答

  • 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);
    

相关问题