1

我的腰部有一个二维高斯光束(整个横向平面的相位为零)。当我使用 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; 
4

2 回答 2

0

简短的回答

Cip原来是真的。您只是看到连续点之间的符号变化。

长答案

Eip显然是真实的。此外,它沿 x 和 y 轴表现出以下对称性。我们先来看x轴。对于任何固定的y,将其视为Eip定义在x0, 1,...,处的有限信号Nx-1。如果将该有限信号扩展为周期序列,则该周期序列结果是偶数。这适用于您对 的特定定义Eip。连同这些值是实数的事实,这意味着1 DFT 沿x也是实数并且具有相同类型的对称性。现在,关于 y 轴,同样适用。最终结果是 2D-DFTCip真实的并且具有上述 x 和 y对称性

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

>> 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,:))

在此处输入图像描述

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

于 2014-08-08T22:25:45.370 回答
0

为避免这种情况,您需要额外的ifftshift. 这是由于 Matlab 使用的算法和您期望的结果。为了避免 pi 相位跳跃,请改用:

fftshift(fft2(ifftshift(Eip)));
于 2015-06-26T11:28:49.060 回答