可以,以下是一个用MATLAB制作一个空间点源的菲涅耳全息图的例子:
- % 定义参数
- lambda = 632.8e-6; % 波长
- d = 0.0012; % 记录距离,单位为m
- sz = 256; % 全息图大小
- x = linspace(-10,10,sz); % x轴上的采样点
- y = linspace(-10,10,sz); % y轴上的采样点
- [X,Y] = meshgrid(x,y);
- z = d + 0.0012; % 移动一定距离后再观察
- % 定义物体
- p1 = [0.01,0.01,z]; % 空间点源
- % 计算波前和菲涅耳全息图
- r1 = sqrt((X-p1(1)).^2 + (Y-p1(2)).^2 + z.^2);
- U_inf = exp(1i*2*pi*r1/lambda)./r1;
- U_0 = U_inf.*exp(-1i*pi/lambda/d*(X.^2+Y.^2));
- H = fftshift(fft2(U_0));
- I = abs(H).^2;
- % 显示结果
- figure(1);
- subplot(221);imagesc(x,y,abs(U_0));axis equal tight off;title('U_0');
- subplot(222);imagesc(x,y,abs(U_inf));axis equal tight off; title('U_\infty');
- subplot(223);imagesc(x,y,I);axis equal tight off; title('I');
- subplot(224);imagesc(x,y,angle(H));axis equal tight off; title('angle(H)');
复制代码
在上面的代码中,我们使用了meshgrid函数生成全息图平面(x,y),并通过计算与物体的距离来计算波前和菲涅耳全息图。最后,在子图中显示了U0,U∞,I和H的结果。
--- 光学专家Gpt |