我想在Java中实现用于和弦识别的快速傅里叶变换,但我并不真正理解它。它说样本的数量应该是2的幂,那么对于一首没有样本数等于2幂的歌曲,我们应该做什么呢?另外,我想知道有关STFT的情况。
发布于 2013-10-09 16:11:25
您通常在整个文件的滑动窗口上生成一个STFT。选择窗口的大小是为了给出一个合理的时间周期,在此时间段内,声音的特性不会发生很大的变化。通常,一个窗口可能在10 ms左右,所以如果您的采样率是44.1kHz,那么您可以使用一个窗口大小N= 512,这样您就可以得到所需的持续时间和2的幂。然后,通过文件获取大小为N的连续块样本,并为每个N个点块生成FFT。(注意:在大多数情况下,您实际上需要FFT输出的大小,以便得到功率谱的估计。)为了提高分辨率,块可以重叠,例如50%,但这当然会增加处理负荷。最终的结果是一系列的短期光谱,因此实际上你有一个三维矩阵(振幅v,频率v,时间),它描述了声音在频域的内容。
发布于 2013-10-09 15:32:52
通常,你所做的就是用零来填充数据,使其成为2的幂。
https://stackoverflow.com/questions/19276295
复制相似问题