您好我正在制作一个分析声音文件的程序,我需要在1秒钟阵列上进行DFT,通常是44100个样本。
所以我需要的是一个工作在任意长度的1D FFT算法,即不是2的幂。
有什么想法吗?
答案 0 :(得分:2)
https://en.wikipedia.org/wiki/Cooley%E2%80%93Tukey_FFT_algorithm通常用于二进制拆分,但实际上处理任意分解。只要您的数字完全分解为小数(您的数字为{{1}}),这将提供相当有效的FFT。 (参见“一般因子分解”部分。)
已知有其他FFT算法可以处理任意大小,但它们要慢得多(虽然比天真更好)。请参阅https://en.wikipedia.org/wiki/Chirp_Z-transform#Bluestein.27s_algorithm。
http://www.nayuki.io/page/free-small-fft-in-multiple-languages具有许多语言(包括JavaScript)的通用Cooley-Tukey FFT算法的实现。它没有为任意素数做一个有效的实现,但你没有任何大的处理。