我想评估几十秒长的声音记录中的功率谱(振幅)变化,仅在某些选定的频率上。声音具有如下频谱(手机应用程序分析):
我只想以一些单独的频率来绘制时间变化,例如随时间变化在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/