用matlab模拟光经过两层折射率不同的介质时不同存储深度位置的点扩散函数强度轴向分布
时间: 2023-11-28 22:47:30 浏览: 104
首先,我们需要定义两层不同折射率的介质。假设第一层的折射率为n1,第二层的折射率为n2,我们可以这样定义:
```matlab
n1 = 1.5; % 第一层折射率
n2 = 1.3; % 第二层折射率
```
接下来,我们需要定义光线的入射角度和波长。假设入射角度为theta,波长为lambda,我们可以这样定义:
```matlab
theta = 30; % 入射角度,单位为度
lambda = 500e-9; % 波长,单位为米
```
然后,我们可以使用Snell定律计算出光线在两个介质中的传播方向:
```matlab
theta1 = asin(sin(theta*pi/180)/n1)*180/pi; % 第一层中的入射角度,单位为度
theta2 = asin(sin(theta1*pi/180)*n1/n2)*180/pi; % 第二层中的入射角度,单位为度
```
接着,我们可以定义一个点扩散函数(PSF),用于模拟光在介质中的传播。这里我们选择使用Airy函数作为PSF:
```matlab
[x,y] = meshgrid(-10:0.1:10); % 定义坐标系
r = sqrt(x.^2+y.^2);
airy_func = (2*besselj(1,pi*r*0.5/lambda)./(pi*r*0.5/lambda)).^2; % Airy函数
```
现在,我们可以使用Rayleigh-Sommerfeld衍射积分公式计算出光在介质中的传播情况,并存储不同深度位置的PSF强度:
```matlab
z = 0:0.5:20; % 不同深度位置
PSF = zeros(size(x,1),size(x,2),numel(z)); % 存储不同深度位置的PSF强度
for i = 1:numel(z)
phase1 = exp(1i*2*pi*n1*z(i)*sqrt(1-(sind(theta1))^2)/lambda); % 第一层中的相位因子
phase2 = exp(1i*2*pi*n2*z(i)*sqrt(1-(sind(theta2))^2)/lambda); % 第二层中的相位因子
H1 = airy_func.*exp(-1i*2*pi*n1*(x*sin(theta1*pi/180)+y*cos(theta1*pi/180))/lambda).*phase1; % 第一层的传播函数
H2 = airy_func.*exp(-1i*2*pi*n2*(x*sin(theta2*pi/180)+y*cos(theta2*pi/180))/lambda).*phase2; % 第二层的传播函数
H = H1.*H2; % 总的传播函数
PSF(:,:,i) = abs(fftshift(ifft2(ifftshift(H)))).^2; % 计算PSF强度
end
```
最后,我们可以绘制不同深度位置处的PSF强度轴向分布图:
```matlab
figure;
hold on;
for i = 1:numel(z)
plot(abs(squeeze(PSF(size(x,1)/2,size(x,2)/2,i,:))),z(i),'linewidth',2);
end
xlabel('PSF强度');
ylabel('深度位置');
set(gca,'fontsize',14);
```
运行以上代码,就可以得到光经过两层折射率不同的介质时不同存储深度位置的PSF强度轴向分布图了。
阅读全文