我想用FFT编写DFT程序。 这实际上用于非常大的矩阵向量乘法(10 ^ 8 * 10 ^ 8),它被简化为矢量到矢量卷积,并进一步简化为离散傅里叶变换。
请问DFT是否准确?因为矩阵具有所有离散的二进制元素,并且乘法过程不会容忍结果中的任何非零错误概率。然而,根据我目前了解的有关DFT的内容,它似乎是一种近似算法?
另外,请问大致代码会有多长?即,这是我可以从头开始并用C ++编写的一两百行?实际上这是一篇论文...而我所需要的只是复杂度分析是O(nlogn)而前面的系数并不重要:)所以最简单的实现是最好的。 (虽然我确实看到了像kissfft和FFTW这样的软件包,但它们非常冗长,而且可能对我来说太过分了......)
答案 0 :(得分:0)
规范的基数-2 FFT可以用少于200行的C ++编写。平均数值误差大致与O(log N)成正比,因此您需要使用足够大的数值类型和数据比例因子来解释这一点。
答案 1 :(得分:0)
您可以使用数字理论变换计算数值稳定的卷积。它使用唯一的整数序列来计算整数域/环上的离散傅里叶变换。唯一需要注意的是信号需要是整数值。
它的实现与FFT的大小大致相同,但速度要快一些。您可以在finitetransform.sourceforge.net找到我在NTTW子库中的实现。 APFloat库可能与您的需求更相关,因为它们使用卷积进行大数乘法。