我想评估几十秒长度声音记录中的功率谱(幅度)变化,仅在某些选定的频率上。声音有这样的频谱(手机应用程序分析):
我想仅在一些单独的频率中绘制时间变化,例如在4kHz和8kHz,作为时间曲线。没有光谱图。
示例:声音长度为30秒。我希望通过FFT获得功率谱,仅采用4kHz和8kHz的频率,并在4kHz和8kHz的时间内获得两个独立的曲线。
我如何在Matlab中做到这一点?
答案 0 :(得分:0)
您将使用某种滑动窗口,其中PS(f, t)
是在f
上居中的样本块上执行的DFT中的元素t
。窗口大小将决定频域中的分辨率。 (4 kHz的迹线中是否包含3.98 kHz的功率?)
不,你不是。直接计算两个频率的DFT / GDFT比计算整个FFT的速度快 。我希望通过FFT获得功率谱,仅采用4kHz和8kHz的频率。
此外,您可以将傅立叶变换标识应用于更新 GDFT,而不是在每个时间步重新计算它。您应用时移,添加进入窗口的样本,并减去离开的那个。
使用fft
和滑动窗口的总复杂度:O(N * w * lg w)
其中w
是窗口大小。
使用GDFT和时移的总复杂度:O(c * N)
其中c
是您关注的频率计数。
两种情况下的常数都相似,所以你真的想在c < w * lg w
时使用第二个。
在制作图表之前,不要忘记使用幅度(abs
函数)。