Answers:
如果要验证FFT算法的正确性,就某种意义而言,它要执行具有离散傅里叶变换已知属性的所需功能,则可以使用以下方法:
埃尔金,丰达。(1995年6月)。测试多元线性函数:克服生成器瓶颈。在过程中。二十七安。ACM症状。计算理论。(第407–416页)。
FFTW的制造商将上述论文作为他们选择的方法,以验证特定的FFT实现是否应执行其应做的工作。提出的技术将功能分为三个主要组件,并通过单独的测试进行了验证:
单位脉冲的DFT:将等于Kronecker增量函数的时域信号应用于FFT算法的输入,并根据已知的单位脉冲函数的DFT检查输出(在所有输出中均转换为常数值)垃圾箱)。如果FFT算法提供了IFFT,则可以对其进行反向测试,以表明它再次产生单位脉冲函数。
时移:将两组数据应用于FFT算法的输入;两者在时域上的唯一区别是恒定的时移。基于DFT的已知属性,这将影响两个信号的频域表示之间的已知线性相移,其中相移的斜率与时移成比例。
该论文的作者断言,这些测试足以验证FFT实现的正确性。我过去从未使用过这种技术,但似乎确实有意义,并且我相信FFTW的作者(他们生产了很多免费软件)是可靠的权威,提供了验证问题的好方法。
如问题中提到的,我确实在归档的comp.dsp Usenet帖子中找到了一组建议(http://www.dsprelated.com/showmessage/71595/1.php,由“ tdillon”发布):
A.Single FFT tests - N inputs and N outputs
1.Input random data
2.Inputs are all zeros
3.Inputs are all ones (or some other nonzero value)
4.Inputs alternate between +1 and -1.
5.Input is e^(8*j*2*pi*i/N) for i = 0,1,2, ...,N-1. (j = sqrt(-1))
6.Input is cos(8*2*pi*i/N) for i = 0,1,2, ...,N-1.
7.Input is e^((43/7)*j*2*pi*i/N) for i = 0,1,2, ...,N-1. (j = sqrt(-1))
8.Input is cos((43/7)*2*pi*i/N) for i = 0,1,2, ...,N-1.
B.Multi FFT tests - run continuous sets of random data
1.Data sets start at times 0, N, 2N, 3N, 4N, ....
2.Data sets start at times 0, N+1, 2N+2, 3N+3, 4N+4, ....
该线程还建议执行两个正弦,一个正弦幅度较大,另一个正弦幅度较小。
就像我在主要问题中所说的那样,我不确定这是否是一组特别好的答案,或者它是否很完整,但是我要放在这里以便人们对其进行投票和评论。