Gerchberg-Saxton 算法可通过测量两个变换关系已知的信号的强度恢复出其相位,设原信号为, 其傅里叶变换为,测得其强度为,功率谱为,据此恢复出的相位,步骤如下
设高斯波包,其中,图像如下:
复原时,初始相位设为0,故实部为高斯函数而虚部为0:
使用GS算法进行相位恢复后:
迭代过程中误差如下:
设,其中peaks 为MATLAB 中的函数,,, 图像如下:
初始相位设为0:
使用GS算法进行相位恢复后:
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
如对本文有疑问, 点击进行留言回复!!
Android安卓水滴屏适配状态栏图标(图标过多时显示一个点)
android studio使用Flutter创建web项目
android如何使用taskAffinity属性对任务栈操作控制
android对PDF文件的操作(上传、预览、下载和转存相册)
Android通过代码批量生成字符图标用于给输入法显示状态栏的图标
网友评论