我正在尝试计算二维函数的相位谱,, 在哪里,, 和是真实的,使用 MATLAB 的 fft2。因此我的操作是. 我的功能是这样的只有正值和有正值和负值。
由于我的功能是真实的,因此我只需要单面光谱。我可以通过将频谱加倍来计算单边幅度谱,其中. 我得到的结果正是我所期望的。
当涉及到相位谱时,我得到一个不连续的函数。相位似乎以近似的差异跳跃. 这与相位缠绕有关吗?如何获得正的连续相位图?
有关我的图像和代码的更多信息: 数据可以在这里找到
我的信号和看起来像这样:
figure; contour(y,x,eta_0)
xlabel('y')
ylabel('x')
幅度谱如下所示:
dx = mean(gradient(x));
dy = mean(gradient(y));
Nx = 64;
Ny = 32;
Fsy = 1/dy;
Fsx = 1/dx;
kx_fft = 2*pi * Fsx/2 * linspace(0, 1, size(eta_0,1)/2+1);
ky_fft = 2*pi * Fsy/2 * linspace(0, 1, size(eta_0,2)/2+1);
ky_fft = [-fliplr(ky_fft(2:end-1)) ky_fft];
amp_xy = circshift(abs(fftshift(fft2(eta_0)))/Nx/Ny,-1,2);
figure; plot(ky,kx,amp_xy)
我知道我的功能不包含任何负面值,因此我可以通过将正值加倍来获取单边幅度谱值,得到这个:
amp_xy = 2*amp_xy([Nx/2+1:Nx 1],:);
figure; imagesc(ky_fft,kx_fft,amp_xy);
相位谱如下所示:phase_xy = circshift(angle(fftshift(fft2(eta_0))),-1,2);
这清楚地显示了从零左右(这是我期望我的阶段)到和. 为什么会这样,我该如何避免呢?
为了说明我的观点,我可以在并检查一维幅度和相位谱。一维相位谱显示大部分相位接近于零,最低频率的相位接近于/正如我所料(从理论上):

现在,如果我要切入 2D 相位谱,其中,我看到类似的东西,但不是连续的。就好像我需要改变一些阶段上或下:
本质上,问题是:如何获得正值的平滑二维相位谱?
atan编辑:如果我使用,而不是计算相位角angle,我会得到一个平滑变化的相位图。这是意料之中的,因为atan将角度限制在到而angle使用atan2,它跨越整个圆圈。



