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