我听说过一百万次应用 DFT 两次会导致数组反转,但实际情况并非如此。相反,第一个元素保持在原来的位置,其余元素被反转。有一个直观的原因吗?
八度代码:
N = 16;
x = linspace(1, N, N);
fft(fft(x)) / N
结果:
1 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
我听说过一百万次应用 DFT 两次会导致数组反转,但实际情况并非如此。相反,第一个元素保持在原来的位置,其余元素被反转。有一个直观的原因吗?
八度代码:
N = 16;
x = linspace(1, N, N);
fft(fft(x)) / N
结果:
1 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2
该序列正是您应该期望的:
显然,对于和具有相同的值。
您似乎希望看到序列而不是。如果你想要那个序列,你需要调制第一个 DFT 的结果:
N = 16; x = 1:N; c = exp(-1i*2*pi/N*(0:N-1)); x2 = 真实(fft((fft(x)。* c)))/N;% real() 只是为了消除舍入错误 x2 = 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
是的反转(!)但不是在编程意义上!
在对 N 点序列应用两次 DFT 后得到的序列 $ 是由减号指示的时间反转(并且幅度由缩放)序列在其论点中。
记住你的数学课程,一个带有否定参数的函数,如意味着函数围绕(垂直)y 轴翻转。
然后序列也围绕 y 轴翻转,因此反转。然而,这种反转在某种意义上是特殊的,因为它是模数符号表示的循环反转(DFT 序列反转):
对于范围,模数扩展如下:
请注意,您可以避免模运算符,并通过简单地将 DFT 序列解释为周期序列 $ 来得出相同的结论。然后将是相反的序列。
使用傅里叶变换的对偶属性,你有
那么你有:
其中,对于因素,是的序列。