光学仿真 | 光场经过三角孔衍射的matlab实现

文摘   2024-11-08 09:00   德国  
以下是一个简单的 MATLAB 代码示例,演示如何模拟光通过三角孔的衍射现象。这个例子使用了快速傅里叶变换 (FFT) 方法来计算衍射图样。
% 参数设置lambda = 500e-9; % 光的波长 (米)D = 1e-3;        % 三角孔边长 (米)z = 0.01;         % 衍射距离 (米)k = 2 * pi / lambda; % 波数
% 计算光源区域L = 5e-3; % 计算区域边界 (米)N = 512; % 像素数x = linspace(-L/2, L/2, N);y = linspace(-L/2, L/2, N);[X, Y] = meshgrid(x, y);
% 创建三角孔tri_half_height = D * sqrt(3) / 2; % 三角形半高mask = (Y >= 0) & (Y <= tri_half_height) & (abs(X) <= (Y / sqrt(3)));
% 光波前的幅度分布U0 = zeros(N, N);U0(mask) = 1; % 三角孔处的光强度
% 计算衍射场 (使用FFT)U1 = fftshift(fft2(U0));% 确定频域坐标fx = linspace(-1/(2*(L/N)), 1/(2*(L/N)), N);fy = linspace(-1/(2*(L/N)), 1/(2*(L/N)), N);[FX, FY] = meshgrid(fx, fy);
% 计算衍射图样H = exp(1j * k * z * sqrt(1 - (lambda * FX).^2 - (lambda * FY).^2));U2 = U1 .* H; % 乘以传播函数I = abs(ifft2(fftshift(U2))).^2; % 逆FFT得到衍射图样
% 绘制结果figure;imagesc(x, y, I);axis equal;axis tightcolormap hot;xlabel('X (m)');ylabel('Y (m)');title('Diffraction Pattern of a Triangular Aperture');colorbar;

代码解释:

  1. 参数设置:定义光波的波长、三角孔边长、衍射距离等。

  2. 计算光源区域:创建一个计算区域,以便用于设置三角孔的形状。

  3. 创建三角孔:使用条件生成一个掩模,定义三角形的区域。

  4. 光波前的幅度分布:初始化光波在孔处的幅度分布。

  5. FFT计算:对光波前进行二维FFT并乘以传播函数以计算衍射场。

  6. 逆FFT得到衍射图样:使用逆FFT得到衍射后的光强分布并进行绘制。

注意事项:

确保你已经安装并设置好 MATLAB 环境。

可以根据需要调整参数以观察不同结合的衍射效果。

运行上述代码后,将会显示通过三角孔的光衍射图样。


欢迎广大读者朋友投稿,内容与光学研究相关即可,可以介绍和宣传自己工作,研究团队介绍,知识分享等,内容不限!

为了方便交流,我们建立了科研交流群,入群的朋友可添加以下微信号,添加时请备注添加交流群。(微信:qiangqiang093)


免责声明:本公众号旨在传递更多科研相关内容及分享,所有文章图片来源均注明出处,如涉及版权问题,请作者第一时间后台联系,我们将协调进行处理,对于投稿内容文责自负。

光与学
主要介绍一些光路作图方法,光路调节技巧,论文写作,仿真模拟等实用技能。
 最新文章