当前位置: 移动技术网 > 移动技术>移动开发>Android > GS 算法进行一维和二维信号的相位恢复

GS 算法进行一维和二维信号的相位恢复

2020年07月13日  | 移动技术网移动技术  | 我要评论

GS 算法进行一维和二维信号的相位恢复

简介

Gerchberg-Saxton 算法可通过测量两个变换关系已知的信号的强度恢复出其相位,设原信号为uu, 其傅里叶变换为U=FT[u]U=FT[u],测得其强度为I=u2I=|u|^2,功率谱为P=U2P=|U|^2,据此恢复出u=uejϕu=|u|e^{j\phi}的相位,步骤如下

  1. 初始相位设为0,u=Iu'=\sqrt{I}
  2. 计算FT[u]FT[u']的相位θ\theta',令U=UejθU'=|U|e^{j\theta'}
  3. 计算FT1[U]FT^{-1}[U']的相位ϕ\phi',令u=uejϕu'=|u|e^{j\phi'}
  4. 回到步骤2,直至达到最大步数

一维信号

设高斯波包u(x)=ex2/2R2ej2πx/λu(x)=e^{-x^2/2R^2}e^{j2\pi x/\lambda},其中x[4,4],R=1,λ=3x\in[-4,4],R=1,\lambda=3,图像如下:

在这里插入图片描述

复原时,初始相位设为0,故实部为高斯函数而虚部为0:
在这里插入图片描述使用GS算法进行相位恢复后:
在这里插入图片描述迭代过程中误差ϵ=mean(uu)\epsilon=mean(|u'-u|)如下:
在这里插入图片描述

二维信号

u(x,y)=peaks(x,y)ej2πr/k,r=x2+y2u(x,y)=peaks(x,y)e^{j2\pi r/k},r=\sqrt{x^2+y^2},其中peaks 为MATLAB 中的函数,x,y[4,4]x,y\in[-4,4]R=1,λ=4R=1,\lambda=4, 图像如下:
在这里插入图片描述初始相位设为0:
在这里插入图片描述使用GS算法进行相位恢复后:
在这里插入图片描述

MATLAB代码

R=1;
lambda=4;
x=-4:.1:4;
N=length(x);
[X,Y]=meshgrid(x,x);
r=sqrt(X.^2+Y.^2);
r_2=sqrt((X-1).^2+(Y-2).^2);
%u=exp(-1/(2*R^2)*r.^2).*exp(1i*2*pi/lambda*r);
u=peaks(X,Y).*exp(1i*2*pi/lambda*r);
figure(1)
subplot(2,1,1)
mesh(X,Y,real(u))
title('Re[u]')
subplot(2,1,2)
mesh(X,Y,imag(u))
title('Im[u]')


u_ft=fft2(u);
figure(2)
fx=1/(N*0.1)*((1:N)-N/2);
[Fx,Fy]=meshgrid(fx,fx);
mesh(Fx,Fy,abs(fftshift(u_ft)))

u_abs=abs(u);
U_abs=abs(u_ft);
N_max=1000;

u_k=u_abs;

figure(3)
subplot(2,1,1)
mesh(X,Y,real(u_k))
subplot(2,1,2)
mesh(X,Y,imag(u_k))

error=zeros(1,N_max);
for k=1:N_max
   phi_1=angle(fft2(u_k));
   U_k=U_abs.*exp(1i*phi_1);
   phi_2=angle(ifft2(U_k));
   u_k=u_abs.*exp(1i*phi_2);
   u_out=exp(-1i*angle(u_k(floor(N/2),floor(N/2))))*u_k;
   error(k)=mean(mean(abs(u_out-u)));
end

figure(4)
subplot(2,1,1)
mesh(X,Y,real(u_out))
subplot(2,1,2)
mesh(X,Y,imag(u_out))

figure(5)
plot(1:N_max,error)

本文地址:https://blog.csdn.net/certate/article/details/107270354

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网