matlab - 某些频率下功率谱的时间变化[MATLAB]

标签 matlab audio spectrum

我想评估几十秒长的声音记录中的功率谱(振幅)变化,仅在某些选定的频率上。声音具有如下频谱(手机应用程序分析):

我只想以一些单独的频率来绘制时间变化,例如随时间变化在4kHz和8kHz上没有光谱图。

示例:声音的长度为30秒。我想通过FFT获得功率谱,仅获取4kHz和8kHz上的频率,并在时间上分别获得4kHz和8kHz上的两个振幅曲线。

我将如何在Matlab中做到这一点?

最佳答案

您将使用某种滑动窗口,其中PS(f, t)是DFT中以f为中心的样本块上执行的元素t。窗口大小将确定频域中的分辨率。 (迹线中是否包含3.98 kHz的4 kHz功率?)

I want to get power spectrum by FFT, take only frequencies on 4kHz and 8kHz.



不,你没有。直接计算两个频率的DFT / GDFT比计算整个FFT快得多。

同样,您可以对时移应用傅立叶变换标识来更新GDFT,而不必在每个时间步长重新计算它。您应用时间偏移,将样本添加到窗口中,然后减去剩下的样本。

使用fft和滑动窗口的总复杂度:O(N * w * lg w)其中w是窗口大小。
使用GDFT和时移的总复杂度:O(c * N)其中c是您关心的频率计数。

在这两种情况下,常量都是相似的,因此,您真的想在c < w * lg w时使用第二个常量。

在绘制图形之前,请别忘了使用幅度(abs函数)。

关于matlab - 某些频率下功率谱的时间变化[MATLAB],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27591177/

相关文章:

regex - 如何将正则表达式应用于 Matlab 中的元胞数组?

iphone - 如何将 MP3 音频转换为 m4r 代表使用声音作为铃声?

c++ - 逆快速傅立叶变换 : different phases

matlab - 如何在 Matlab 中更新散点图(循环)

matlab - 逐像素比较图像

python - 在二维数组上使用贝叶斯统计分析进行音频过滤的笨拙建议

c++ - 通过傅里叶变换的振荡和频谱

matlab - 正弦波的相位谱与Matlab

matlab - matlab中的全局变量和参数,哪个最快?

android - LibGDX/Android : Playing sound effects makes the game stutter - Sound. play() 在高端设备上需要 4 毫秒