Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 使用fft2时,Pi相移b/w相邻像素_Matlab_Signal Processing_Fft_Gaussian_Phase - Fatal编程技术网

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

Matlab 使用fft2时,Pi相移b/w相邻像素,matlab,signal-processing,fft,gaussian,phase,Matlab,Signal Processing,Fft,Gaussian,Phase,我在它的腰部有一个二维高斯光束,在横向平面上相位为零。当我使用fft2找到2D空间傅里叶变换并绘制相位图时,我观察到任意两个相邻数据点之间存在pi相移。然而,当我使用for循环来计算傅里叶变换而不是使用fft2时,我没有观察到这一点 这是由于相位缠绕造成的吗?我如何克服这个问题 谢谢 编辑:我发布了圆孔fft的代码,因为观察到了相同的结果,并且因为它更简单 Nx = 200; Ny = Nx; %creating coordinate grids x = -Nx/2:Nx/2 - 1; y =

我在它的腰部有一个二维高斯光束,在横向平面上相位为零。当我使用fft2找到2D空间傅里叶变换并绘制相位图时,我观察到任意两个相邻数据点之间存在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; 
简短回答 事实证明Cip是真实的。您只看到相邻点之间的符号变化

长话短说 Eip显然是真实的。此外,它沿x轴和y轴显示以下对称性。让我们先看x轴。对于任何固定的Y,考虑Eip作为在x值0,1,…,NX-1中定义的有限信号。如果有限信号被扩展成一个周期序列,那么这个周期序列就是偶数。这对于您对Eip的具体定义是正确的。加上这些值是实的,这意味着沿x的DFT也是实的,并且具有相同类型的对称性。现在,关于y轴,同样适用。最终的结果是2D-DFT Cip是实的,并且具有所提到的x和y对称性

作为旁注,在代码中获得的Cip不是真实的,而是复杂的。然而,虚部的数量级为每股收益,因此可以忽略不计。您可以检查:

>> max(real(Cip(:)))
ans =
   709
>> max(imag(Cip(:)))
ans =
  4.6262e-014
所以虚部只是有限数值精度的伪影。我们能做到

Cip = real(Cip);
去掉那个假想的部分

现在我们知道Cip是实的,达到了数值精度,很自然,它的所有值都有相位0或π或等效的-π。也就是说,您看到的只是DFT中连续值之间的符号变化。为了说明,请参见下图,该图显示了Cip沿平行于y轴的线的变化,对应于x等于120;举个例子:

stem(1:Nx, Cip(120,:))
一, 见离散时间信号处理,Oppenheim等人,第二版,第568-570页。

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

fftshift(fft2(ifftshift(Eip)));

你得到的一些代码和结果可以帮助人们理解你在处理什么,并开发出更好的假设谢谢你的建议,@Inox。更新帖子。谢谢,但我想潜在的问题是为什么傅里叶变换的实部会有符号变化?@maxwellsapprentice-Well。。。为什么不应该改变标志?像矩形脉冲这样简单的物体的傅里叶变换是一个正弦函数,它有符号变化