我想在 Java 中实现快速傅立叶变换以进行和弦识别,但我真的不明白。它说样本数应该是2的幂,那么对于一首没有样本数等于2的幂的歌曲我们应该怎么办?我也想了解 STFT。
问问题
503 次
2 回答
3
您通常会在整个文件的滑动窗口上生成STFT 。选择窗口的大小以给出合理的时间段,在该时间段内声音的特性不会发生很大变化。通常一个窗口可能在 10 毫秒左右,因此如果您的采样率为 44.1kHz,那么您可能会使用一个窗口大小 N = 512,这样您就可以获得所需的持续时间和 2 的幂。然后,您通过文件获取大小为 N 个样本的连续块,并为每个 N 点块生成 FFT。(注意:在大多数情况下,您实际上需要幅度FFT 输出,以便获得功率谱的估计值。)为了提高分辨率,块可以重叠,例如 50%,但这当然会增加处理负载。最终结果是一系列短期频谱,因此实际上您有一个 3D 矩阵(幅度 v 频率 v 时间),它描述了频域中声音的内容。
于 2013-10-09T16:11:25.097 回答
2
通常你所做的只是用零填充数据以使其成为 2 的幂。
于 2013-10-09T15:32:52.250 回答