用MATLAB完成夫琅禾费衍射的数值模拟仿真: 单位强度的平行光(波长 λ)通过一个半斤为 r 的圆形孔径,孔径后放置一个焦距为 f 的透镜,在距离透镜 d 处的衍射图样。
时间: 2024-01-21 07:19:14 浏览: 55
夫琅禾费衍射是光学中的经典问题。在MATLAB中,可以通过Huygens-Fresnel原理进行数值模拟仿真。下面是实现此仿真的代码:
```matlab
% 设置参数
r = 0.5; % 孔径半径
f = 1; % 透镜焦距
d = 10; % 衍射距离
lambda = 0.6328e-6; % 光波长
% 设置空间采样点数和采样间隔
N = 512; % 采样点数
dx = 10e-6; % 采样间隔
% 生成孔径函数
x = (-N/2:N/2-1)*dx;
y = (-N/2:N/2-1)*dx;
[X,Y] = meshgrid(x,y);
mask = sqrt(X.^2 + Y.^2) <= r;
% 生成衍射光场
k = 2*pi/lambda;
[X,Y] = meshgrid(x,y);
r = sqrt(X.^2 + Y.^2);
theta = atan2(Y,X);
u1 = exp(1i*k*r) .* mask;
% Fourier变换
u2 = fftshift(fft2(ifftshift(u1)));
% 透镜相位
L = dx*N;
fx = (-N/2:N/2-1)/(L);
[Fx,Fy] = meshgrid(fx,fx);
phase = exp(-1i*pi*lambda*f*(Fx.^2 + Fy.^2));
% 衍射光场
u3 = exp(1i*k*d) .* ifftshift(ifft2(fftshift(u2.*phase)));
% 显示结果
figure;
imagesc(x*1000,y*1000,abs(u3).^2);
colormap('gray');
axis image;
xlabel('x (mm)');
ylabel('y (mm)');
```
运行上述代码,可以得到夫琅禾费衍射的数值模拟结果。可以调整参数r、f、d和lambda以观察不同情况下的衍射效果。