【发布时间】:2018-05-01 22:24:44
【问题描述】:
我是 Matlab 和信号处理的新手。我在定义处理频谱图的频率范围时遇到问题。当我绘制 .wav 音频数据的频谱图时,y 轴频率范围从零到大约 23 kHz。我正在寻找的有用数据在 200-400 Hz 的范围内。我的代码 sn-p 是:
[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 的菜鸟,所以我已经做了尽可能多的挖掘工作,但我无计可施。
- 我在文档中搜索了参数或让 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 Hz 采样,而频谱图的范围是 22 或 23 kHz 左右,这让我相信是 Matlab 注意到了我的采样频率,并假设它需要分析这么高的范围。
对于我正在做的工作,我需要生成数千个频谱图,然后通过进一步分析进行处理,因此 Matlab 处理这么多不必要的数据非常耗时,我希望会有一些Matlab 中的功能以某种方式解决这个问题。
很抱歉,这篇文章很长,但我想充分解释我的问题,并表明我在寻求帮助之前已尽我所能解决问题。非常感谢。
【问题讨论】:
标签: matlab audio signal-processing spectrogram