未对准 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。
我有一个简单的 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。