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