C++ FFT与DFT有何不同?如何在C++;?
经过一些研究,我创建了一个小应用程序,可以根据一些输入计算DFT(离散傅立叶变换)。它工作得很好,但速度很慢C++ FFT与DFT有何不同?如何在C++;?,c++,fft,C++,Fft,经过一些研究,我创建了一个小应用程序,可以根据一些输入计算DFT(离散傅立叶变换)。它工作得很好,但速度很慢 我读到FFT(快速傅立叶变换)允许更快的计算,但它们有什么不同?更重要的是,我将如何在C++中实现它们?< p>如果您不需要手动实现该算法,可以查看 甚至认为它是在C中开发的,它正式地在C++(来自)中工作 问题2.9。我可以打电话到FFTW吗 C++?< /P> 非常肯定。FFTW应该编译 和/或任何C++编译器下的链接。 此外,很可能是C++。 模板类是 与FFTW兼容的位 复数格式
我读到FFT(快速傅立叶变换)允许更快的计算,但它们有什么不同?更重要的是,我将如何在C++中实现它们?< p>如果您不需要手动实现该算法,可以查看
甚至认为它是在C中开发的,它正式地在C++(来自)
中工作 问题2.9。我可以打电话到FFTW吗 C++?< /P> 非常肯定。FFTW应该编译 和/或任何C++编译器下的链接。 此外,很可能是C++。 模板类是 与FFTW兼容的位 复数格式(参见FFTW 手册了解更多详细信息)我已经找到了这个很好的解释,并描述了一些算法 关于执行
- 首先,我要确保您的实现返回正确的结果(比较matlab或octave的输出,它们内置了傅里叶变换)
- 如有必要,请使用探查器进行优化
- 不要对循环使用不必要的内容
<关于C++代码请求,我只使用了最快的傅立叶变换在西部(已经被SuxEXL引用)或DSP库,例如来自TI或模拟设备的。 < P>正确实现的DFT的结果与正确实现的FFT的结果基本相同(它们仅通过舍入误差不同)。正如其他人在这里指出的,主要区别在于性能。DFT有O(n^2)运算,而FFT有O(nlogn)运算 我找到的最好、最可读的出版物(我现在仍然提到的那本)是E Oran Brigham的。前几章对傅里叶变换的连续和离散形式进行了非常全面的概述。然后,他利用这一点开发了基于基-2(n是2的幂)和混合基情况的DFT的快速版本(尽管后者比前者稍浅一些)
基数2算法中的一种基本方法,对输入X执行线性时间运算,递归地将结果分成两半,并对两半执行类似的线性时间运算。混合基数的情况类似,但每次都需要将X分成相等的部分,因此如果n没有任何大的素数因子,这会很有帮助。FFT只是指快速计算DFT的算法的一种方式;也就是说,FFT算法的结果应与仅根据定义计算DFT的结果相同(或非常接近)。FFT只能在长度为2的幂的样本上计算,DFT没有此类限制。我没有在任何人的回答中看到这一点,但这是你需要知道的,我认为没有必要单独回答。嗯。。。你提到的图书馆非商业用途需要收费。啊,对不起,我不知道这是商业用途。那样的话,你可以试试。这将使用BSD许可证