应用 DFT 两次实际上并不反转数组。相反,第一个元素保留在原位,而数组的其余部分被反转。为什么?

信息处理 matlab 离散信号 自由度
2022-01-13 22:43:33

我听说过一百万次应用 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
3个回答

该序列正是您应该期望的:

(1)x[n]=x[Nn]

显然,对于具有相同的值。n=0 x[n]x[n]

您似乎希望看到序列而不是如果你想要那个序列,你需要调制第一个 DFT 的结果:x[N1n]x[Nn]

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 后得到的序列 $ 是由减号指示的时间反转(并且幅度由缩放)序列在其论点中。Nx[n]x[n]N

记住你的数学课程,一个带有否定参数的函数,如意味着函数围绕(垂直)y 轴翻转。f(t)f(t)

然后序列也围绕 y 轴翻转,因此反转。然而,这种反转在某种意义上是特殊的,因为它是模数符号表示的循环反转(DFT 序列反转):x[n]

x[n]=x[(n)N]

对于范围,模数扩展如下:0n<N

x[(n)N]=x[Nn].

请注意,您可以避免模运算符,并通过简单地将 DFT 序列解释为周期序列 $ 来得出相同的结论。然后将是相反的序列。x[n]x~[n]x~[n]

使用傅里叶变换的对偶属性,你有

x[n]FX[k]X[n]F{Nx[Nk]fork=1,,N1Nx[(k)N]fork=0

那么你有:

X[0]=Nx[0]X[1]=Nx[N1]X[2]=Nx[N2]X[N1]=Nx[1]

其中,对于因素,是的序列。Nk=0,,15