Matlab二维艾里光束传输仿真
在光学领域,艾里光束以其独特的自加速和自愈特性吸引了众多科研人员的目光。今天,咱们就通过Matlab来对二维艾里光束的传输进行仿真,揭开这神奇光束的神秘面纱。
艾里光束的基本原理
艾里光束的数学表达式基于艾里函数,在二维情况下,其电场分布可以表示为:
\[
E(x,y) = \text{Ai}\left(\frac{x - x0}{w0}\right)\text{Ai}\left(\frac{y - y0}{w0}\right) \exp\left(-\frac{(x - x0)^2+(y - y0)^2}{2w_0^2}\right)
\]
其中,\(\text{Ai}\) 是艾里函数,\((x0, y0)\) 是光束中心位置,\(w_0\) 是光束的宽度参数。艾里函数描述了光束在传播过程中的独特形状和自加速特性,而后面的指数项则起到了对光束进行截断的作用,避免其能量无限扩展。
Matlab 代码实现
% 参数设置 lambda = 532e-9; % 波长,单位:米 k = 2 * pi / lambda; % 波数 z = 0:0.001:0.1; % 传播距离,单位:米 N = 512; % 采样点数 L = 0.01; % 空间范围,单位:米 dx = L / N; % 空间步长 x = (-N/2:N/2 - 1) * dx; y = x; [X, Y] = meshgrid(x, y); % 初始艾里光束 x0 = 0; y0 = 0; w0 = 1e-3; E0 = airy((X - x0) / w0).* airy((Y - y0) / w0).* exp(-(X - x0).^2 / (2 * w0^2)).* exp(-(Y - y0).^2 / (2 * w0^2)); % 进行菲涅尔衍射计算传播 for i = 1:length(z) H = exp(1i * k * z(i)) * exp(1i * pi * lambda * z(i) * ( (1/dx^2) * ( (0:N - 1) - N/2).^2 + (1/dx^2) * ( (0:N - 1) - N/2).^2 )); E = ifft2(fft2(E0).* H); I(i, :, :) = abs(E).^2; end代码分析
- 参数设置部分:
- 首先定义了光束的波长lambda,并据此计算出波数k。传播距离z设置为从0到0.1米,以0.001米的步长递增,这将记录光束在不同传播距离处的状态。
- 采样点数N设置为512,空间范围L为0.01米,由此得出空间步长dx。通过meshgrid函数生成二维网格X和Y,用于后续计算不同位置的电场分布。 - 初始艾里光束部分:
- 设定了光束中心位置(x0, y0)为原点(0, 0),光束宽度参数w0为1e - 3米。这里依据前面提到的二维艾里光束表达式,利用Matlab的airy函数计算艾里函数部分,再结合指数截断项,得到初始的电场分布E0。 - 传播计算部分:
- 利用菲涅尔衍射公式来模拟光束的传播。在循环中,针对每一个传播距离z(i),计算出对应的传递函数H。传递函数描述了光束在自由空间传播过程中的相位变化。
- 通过傅里叶变换的技巧,先对初始电场分布E0进行傅里叶变换,与传递函数H相乘后,再进行逆傅里叶变换,得到在该传播距离处的电场分布E。最后计算光强I,即电场强度的模的平方。
结果可视化
% 可视化结果 figure; for i = 1:length(z) subplot(2, 3, i); imagesc(x * 1e3, y * 1e3, I(i, :, :)); axis square; colorbar; title(['z = ', num2str(z(i) * 1e3),'mm']); xlabel('x (mm)'); ylabel('y (mm)'); end这部分代码通过imagesc函数将不同传播距离处的光强分布以图像形式展示出来。利用subplot函数在一个图形窗口中展示多个子图,每个子图对应一个传播距离。axis square保证图像显示为正方形,colorbar添加颜色条用于指示光强大小,标题和坐标轴标签也相应设置,方便直观理解光束在不同传播距离下的形态变化。
通过以上的Matlab仿真,我们可以清晰地看到二维艾里光束在传播过程中的独特行为,从初始的分布到随着传播距离逐渐展现出的自加速和自愈特性,这不仅加深了我们对艾里光束的理解,也展示了Matlab在光学仿真领域强大的工具性。希望大家也能通过自己动手实践,在光学的奇妙世界中发现更多有趣的现象。