GS 算法进行一维和二维信号的相位恢复
程序员文章站
2022-06-16 18:06:29
GS 算法进行一维和二维信号的相位恢复简介功能快捷键一维信号二维信号生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入简介Gerchberg-Saxton 算法可通过测量两个变换关系已知的信号的强度恢复出其相位,设原信号为uuu, 其傅里叶变换为U=FT[u]U=FT[u]U=FT[u],测得其强度为I=∣u∣2I=|u|^2...
简介
Gerchberg-Saxton 算法可通过测量两个变换关系已知的信号的强度恢复出其相位,设原信号为, 其傅里叶变换为,测得其强度为,功率谱为,据此恢复出的相位,步骤如下
- 初始相位设为0,
- 计算的相位,令
- 计算的相位,令
- 回到步骤2,直至达到最大步数
一维信号
设高斯波包,其中,图像如下:
复原时,初始相位设为0,故实部为高斯函数而虚部为0:
使用GS算法进行相位恢复后:
迭代过程中误差如下:
二维信号
设,其中peaks 为MATLAB 中的函数,,, 图像如下:
初始相位设为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