非log 2的快速傅里叶变换

我想用Java实现快速傅里叶变换以进行和弦识别,但我并不是真的得到它。 它说样本的数量应该是2的幂,那么对于没有等于2的幂的样本数量的歌曲,我们该怎么办呢? 我也想了解STFT。

您通常会在整个文件的滑动窗口上生成STFT 。 选择窗口的大小以给出合理的时间段,声音的特性不会在该时间段内发生很大变化。 通常窗口可能大约为10毫秒,因此如果您的采样率为44.1kHz,那么您可以使用窗口大小N = 512,这样您就可以获得所需的持续时间和2的大小功率。 然后,您通过文件获取大小为N个样本的连续块,并为每个N点块生成FFT。 (注意:在大多数情况下,您实际上需要FFT输出的幅度 ,以便估算功率谱。)为了提高分辨率,块可以重叠,例如50%,但这会增加处理负荷。 最终结果是一系列短期光谱,因此实际上您有一个3D矩阵(幅度v频率v时间),它描述了频域中声音的内容。

通常你所做的只是用零填充数据,使其成为2的幂。