当使用fft2时,Pi相移b / w相邻像素

时间:2014-08-08 19:29:12

标签: matlab signal-processing fft gaussian phase

我的腰部有一个2D高斯光束(整个横向平面的相位为零)。当我使用fft2找到2D空间傅立叶变换并绘制相位时,我观察到任何2个相邻数据点之间存在pi相移。但是,当我使用for循环来计算傅里叶变换而不是使用fft2时,我没有观察到这一点。

这是由于相位缠绕吗?我该如何克服这个问题?

感谢。

编辑:我发布了圆形光圈fft的代码,因为观察到相同的结果,并且因为它更简单。

Nx = 200; Ny = Nx;

%creating coordinate grids
x = -Nx/2:Nx/2 - 1; y = -Ny/2:Ny/2 - 1;
[X,Y] = meshgrid(x,y);

r = 15; %radius of aperture

Eip = ((X.^2 + Y.^2 ) <= r^2); %aperture

figure;pcolor(abs(Eip));axis square; shading flat; colorbar;
figure;pcolor(angle(Eip));axis square; shading flat; colorbar;

Cip = fftshift(fft2(Eip)); %FFT

figure;pcolor(abs(Cip));axis square; shading flat; colorbar;
figure;pcolor(angle(Cip));axis square; shading flat; colorbar; 

2 个答案:

答案 0 :(得分:0)

简短回答

Cip证明是真实的。你只看到了连续点之间的符号变化。

答案很长

Eip显然是真实的。此外,它沿x和y轴呈现以下对称性。我们先取x轴。对于任何固定的y,请将Eip视为在x01,...,Nx-1定义的有限信号。如果该有限信号被扩展为周期序列,则该周期序列变为偶数。对于Eip的具体定义,情况确实如此。连同值是真实的这一事实,这意味着 1 x上的DFT也是真实的并且具有相同类型的对称性。现在,关于y轴,同样成立。最终结果是2D-DFT Cip 真实并且具有上述x和y 对称性

(作为旁注,代码中获得的Cip不是真实的,而是复杂的。但是,虚部的大小为eps,因此可以忽略不计。您可以检查:< / p>

>> max(real(Cip(:)))
ans =
   709
>> max(imag(Cip(:)))
ans =
  4.6262e-014

因此,虚部只是有限数值精度的人工制品。我们可以做到

Cip = real(Cip);

删除虚假虚部。)

既然我们知道Cip是真实的(达到数值精度),那么它的所有值都具有相位0pi(或等效-pi是很自然的)。也就是说,您所看到的只是DFT中连续值之间符号的变化。为了说明,请参阅下图,其中显示了Cip沿着与y轴平行的线的变化(对应于x等于120;仅作为示例):

stem(1:Nx, Cip(120,:))

enter image description here

1 参见离散时间信号处理,Oppenheim 等。,第2版,第568-570页。 功能

答案 1 :(得分:0)

为避免这种情况,您需要额外的ifftshift。 这是由于Matlab使用的算法和您期望的结果。 为了避免pi阶段跳跃,请使用此代码:

fftshift(fft2(ifftshift(Eip)));