用matlab模拟折射率失配对双光子三维信息存储中信息点的影响
时间: 2023-07-16 17:14:19 浏览: 159
3Dpc_光子晶体_三维光子晶体matlab程序_三维光子晶体_Photoniccrystal_
5星 · 资源好评率100%
双光子三维信息存储中,折射率失配会影响信息点的成像质量。下面是一个简单的matlab程序,用于模拟折射率失配对信息点的影响。
```matlab
%% 定义参数
lambda = 800e-9; % 激光波长
NA = 0.85; % 数值孔径
n1 = 1.5; % 折射率
n2 = 1.6; % 折射率
k = 2*pi/lambda; % 波矢
dx = lambda/(2*NA); % 点扩散函数大小
%% 生成信息点
info_point = zeros(128,128,128);
info_point(64,64,64) = 1;
%% 生成点扩散函数
PSF = zeros(128,128,128);
for i = 1:128
for j = 1:128
for k = 1:128
r = sqrt((i-64)^2+(j-64)^2+(k-64)^2)*dx;
PSF(i,j,k) = (1i*k*dx^2)/(2*pi*n1*r^3)*exp(1i*k*r*(n2-n1));
end
end
end
%% 进行傅里叶变换
info_point_ft = fftshift(fftn(info_point));
PSF_ft = fftshift(fftn(PSF));
%% 生成失配的折射率场
n_field = n1 + 0.1*cos(2*pi*10e-6*(1:128)'*(1:128)*(1:128));
%% 生成失配的点扩散函数
PSF_mismatch = zeros(128,128,128);
for i = 1:128
for j = 1:128
for k = 1:128
r = sqrt((i-64)^2+(j-64)^2+(k-64)^2)*dx;
PSF_mismatch(i,j,k) = (1i*k*dx^2)/(2*pi*n_field(i,j,k)*r^3)*exp(1i*k*r*(n2-n_field(i,j,k)));
end
end
end
%% 进行傅里叶变换
PSF_mismatch_ft = fftshift(fftn(PSF_mismatch));
%% 进行成像
image = ifftn(ifftshift(info_point_ft.*PSF_mismatch_ft));
image = real(image);
%% 显示结果
figure(1)
subplot(1,2,1),imshow(abs(image(:,:,64)),[]),title('失配前')
subplot(1,2,2),imshow(abs(image(:,:,64+5)),[]),title('失配后')
```
在上述程序中,我们首先生成了一个信息点,然后生成了一个正常折射率条件下的点扩散函数。接着,我们生成了一个失配的折射率场,并根据此折射率场计算了失配后的点扩散函数。最后,我们将信息点和失配后的点扩散函数进行傅里叶变换,并进行成像,最终显示失配前后的结果。
你可以根据需要调整程序中的参数,例如改变折射率失配的程度,波长、数值孔径等。
阅读全文