matlab编程仿真夫琅禾费双矩形孔衍射 含透镜
时间: 2023-07-22 12:08:35 浏览: 178
夫琅禾费矩孔衍射仿真
3星 · 编辑精心推荐
如果要考虑透镜对夫琅禾费双矩形孔衍射的影响,可以使用光学传递函数(OTF)的方法。下面是一个MATLAB的示例程序,用于模拟夫琅禾费双矩形孔衍射含透镜的情况。
```matlab
% 定义参数
lambda = 0.5e-6; % 光波长
k = 2*pi/lambda; % 光波数
a = 10e-6; % 孔的宽度
b = 20e-6; % 孔的高度
D = 1; % 孔到透镜的距离
f = 0.1; % 透镜焦距
N = 1000; % 屏幕上的采样点数
dx = a/10; % 屏幕上的采样间距
% 创建双矩形孔
hole = zeros(N, N);
hole(400:600, 300:320) = 1;
hole(400:600, 680:700) = 1;
% 计算衍射光强分布
field = zeros(N, N);
for i = 1:N
for j = 1:N
r1 = sqrt((i-N/2)^2 + (j-N/2)^2 + D^2);
r2 = sqrt((i-N/2)^2 + (j-N/2)^2 - D^2);
field1 = exp(1i*k*r1)/r1;
field2 = exp(1i*k*r2)/r2;
field(i, j) = field1*hole(i, j);
end
end
intensity1 = abs(field).^2;
% 计算透镜传递函数
fx = (-N/2 : N/2-1)/(N*dx);
fy = (-N/2 : N/2-1)/(N*dx);
[FX, FY] = meshgrid(fx, fy);
OTF = exp(-1i*pi*lambda*f*(FX.^2 + FY.^2));
% 计算透镜对光场的影响
field = fftshift(fft2(field));
field = field.*OTF;
field = ifft2(ifftshift(field));
intensity2 = abs(field).^2;
% 绘制光强分布
figure;
subplot(1, 2, 1);
imagesc(intensity1);
axis equal;
axis off;
colormap(gray);
title('不含透镜');
subplot(1, 2, 2);
imagesc(intensity2);
axis equal;
axis off;
colormap(gray);
title('含透镜');
```
在这个代码中,我们首先创建了一个双矩形孔,并计算了衍射光强分布。然后我们使用光学传递函数的方法,计算透镜对光场的影响。在计算中,我们首先计算了透镜的传递函数,然后将光场进行傅里叶变换和反变换,最终得到透镜对光强分布的影响。最后我们绘制了含有透镜和不含透镜的两种情况下的光强分布的图像,可以看到透镜对夫琅禾费双矩形孔衍射的影响。
阅读全文