在许多编程语言中,实数输入FFT通常表示为rfft
,反函数为irfft
(如python
或julia
)。正如numpy docs或julia docs所述,它们正在进行归一化FFT,而不像FFTW
的非归一化FFT
因此,如果我有真正的输入1D数组a
,我理解irfft(rfft(a), len(a)) == a
。但是,如果我假设另一个1D数组b
但复杂,rfft(irfft(b), (len(b) - 1) * 2) != b
,我甚至考虑了规范化。我认为rfft(irfft(b), (len(b) - 1) * 2)
应该与b
相同a
。
我使用Fortran和Julia的FFTW库测试了这个,但结果相同。
为什么会这样?这在数学上是正确的还是实现问题?
编辑1:更准确的解释是here