未对准 FFT 值

Misallignment FFT values

我有一个简单的 matlab 脚本,我可以在其中执行 FFT。 基本信号脚本如下

N=1024;
Fs = 512;
x=0:1/Fs:(N-1)/Fs;
y1 = rand(1,length(x));
y = sin(2*pi * 8*x +pi/4) + sin(2*pi * 2*x)+0.25*y1;

Y = fft(y);
samples = 1:N;
Yri = [real(Y)';imag(Y)')

当我查看 FFT 的值时,我发现了一些奇怪的东西。 我一直明白 FFT 是对称的。那应该意味着 Y(0) = Y(N-1) 但是当我查看我的价值观时它是这样的

132.2359908746976    0
-1.129890364069726   0.2718866753339693
-0.9898054379204928  -0.09764592088929502
-0.2647724958644289  0.8350994813335381
-1.868448885843761   -510.8397750064335
-2.379196462710131   1.624049527127165
-2.753782883986133   -1.523597086410836
1.949383081952796    1.183816362344675
-0.3039050016066438  -2.096280913074243
-1.506203056327606   -1.690278489723206
0.6347563438325143   -1.587693811158511
0.5233967784525266   1.730435526309953
1.052101496393941    0.3182729933856796
-1.512217438563844   -0.9760620411480605
2.180241723969081    0.4304125102798211
1.999781891166625    0.778355882266289
361.5665600468327    -360.9118750913981
1.427992040614833    1.296361507220924
...
...
0.2265259661047323   0.6794647303926733
1.427992040614833    -1.296361507220924
361.5665600468327    360.9118750913981
1.999781891166625    -0.778355882266289
2.180241723969081    -0.4304125102798211
-1.512217438563844   0.9760620411480605
1.052101496393941    -0.3182729933856796
0.5233967784525266   -1.730435526309953
0.6347563438325143   1.587693811158511
-1.506203056327606   1.690278489723206
-0.3039050016066438  2.096280913074243
1.949383081952796    -1.183816362344675
-2.753782883986133   1.523597086410836
-2.379196462710131   -1.624049527127165
-1.868448885843761   510.8397750064335
-0.2647724958644289  -0.8350994813335381
-0.9898054379204928  0.09764592088929502
-1.129890364069726  -0.2718866753339693

我的2个频率是360左右和510左右的值。 如您所见,总线值 510 是从头开始的第 5 个值,但是从末尾开始的第四个值。 与值 360 相同的是从开始的第 17 个值但从最后的第 16 个值。

这是什么来头。如何解决这个问题或者这是正常现象吗??

谢谢

您需要对 FFT 值应用 fftshift() 以获得您想要的结果。

对于严格的实数输入 y:FFT 结果

Y(i) == complex_conjugate(Y(N-i))

Y(0) 是 DC 项,它是它自己的复共轭,因此没有(其他)镜像结果 bin。即使是N,Y(N/2)也没有镜像bin。