基于角谱理论的自由空间光传播MATLAB仿真——从原理到代码实现 📅 2026/7/15 2:17:55 1. 角谱理论光传播的数学语言当你用手电筒照向夜空时光柱会逐渐扩散变暗。这种现象背后隐藏着深刻的数学规律——角谱理论。就像声音可以分解成不同频率的声波组合光场也能分解为不同方向传播的平面波这就是角谱方法的核心思想。在数学上我们用复振幅U(x,y,z)描述光场它同时包含振幅和相位信息。当z0平面上的光场U(x,y,0)已知时通过二维傅里叶变换可以将其分解为不同空间频率的成分U0_fft fft2(U0); % 对初始光场做二维傅里叶变换每个空间频率分量(fX,fY)对应一个传播方向就像交响乐中不同乐器发出的声波。这些平面波在自由空间中独立传播互不干扰最终在观察平面重新叠加形成新的光场分布。2. 传递函数光传播的交通规则光在自由空间传播时不同频率分量会有不同的待遇。这由角谱传递函数决定H exp(1j*2*pi*z*sqrt(1/lambda^2 - fx.^2 - fy.^2)); % 角谱传递函数这个看似复杂的公式其实很好理解sqrt(1/lambda^2 - fx.^2 - fy.^2)决定了每个平面波的传播特性当fx²fy² 1/λ²时平方根结果为虚数对应倏逝波快速衰减circ(fx.^2 fy.^2)实现了低通滤波阻止高频分量传播我曾在仿真中忘记加这个滤波函数结果出现了不物理的高频噪声。这就像交通信号灯失灵让不该通行的车辆上了路。3. MATLAB实现从公式到代码让我们用MATLAB将理论变为现实。假设我们要模拟相机人振幅和lena相位图案的传播% 参数设置 z 100; % 传播距离(mm) lambda 532e-6; % 波长(mm) L 50; % 物面尺寸(mm) % 加载图像并构建复振幅 A im2double(imread(cameraman.tif)); % 振幅 Phi im2double(imread(lena.tif)); % 相位 U0 A.*exp(1j*2*pi*Phi); % 初始光场 % 构建频率坐标 [r,c] size(U0); fx ([0:fix(r/2), ceil(r/2)-1:-1:1])/L; fy ([0:fix(c/2), ceil(c/2)-1:-1:1])/L; [fy,fx] meshgrid(fy,fx); % 角谱传播 U0_fft fft2(U0); f sqrt(fx.^2 fy.^2); H exp(1j*2*pi*z*sqrt(1/lambda^2 - f.^2)).*circ(f*lambda); Uz_fft U0_fft .* H; Uz ifft2(Uz_fft); % 传播后的光场这段代码有几个关键点频率坐标构建要匹配物理尺寸fftshift的替代方案直接生成正确排序的频率circ函数实现物理约束4. 仿真技巧避开那些坑在实际仿真中我踩过不少坑这里分享几个经验采样问题是最常见的陷阱。根据Nyquist定理采样间隔Δx需要满足Δx λz/(2L) % L为物面尺寸否则会出现混叠现象。我曾因为采样不足导致仿真结果出现鬼影。边缘效应也很棘手。建议在图像边缘加渐变衰减如tukey窗避免突然截断引入高频噪声。量纲一致性至关重要。所有物理量波长、距离、尺寸必须使用相同单位我曾因混合mm和m导致结果完全错误。对于大距离传播可以分多步计算每步应用角谱方法类似光线追迹。这在模拟生物组织中的光传播时特别有用。5. 应用实例相位恢复与成像角谱方法不仅用于仿真还能解决实际问题。比如在显微镜中透明样本如细胞主要改变光相位而非振幅。通过记录不同传播距离的光强可以反推相位信息。% 多平面相位恢复框架 z_positions linspace(0, 10, 5); % 5个记录平面 for i 1:length(z_positions) H exp(1j*2*pi*z_positions(i)*sqrt(1/lambda^2 - fx.^2 - fy.^2)); Uz ifft2(fft2(U0) .* H); I_z(:,:,i) abs(Uz).^2; % 记录光强 end % 这里可以接入相位恢复算法...在激光光学系统设计中角谱方法可以模拟光束通过复杂光学元件后的演变。我曾用它优化过一个激光投影系统准确预测了焦点位置和光斑尺寸。6. 性能优化让代码飞起来对于大尺寸仿真这些技巧可以显著提升速度使用GPU加速U0_gpu gpuArray(U0); U0_fft fft2(U0_gpu); % 在GPU上执行FFT预计算频率坐标避免循环内重复计算对于单色光仿真可以预先计算传递函数使用fftw函数优化FFT计算方案我曾用GPU将4K分辨率的光传播仿真从15秒加速到0.3秒这使得交互式参数调整成为可能。7. 超越基础扩展应用掌握了基本原理后可以扩展更多有趣的应用部分相干光模拟需要引入交叉谱密度函数。这就像从独奏扩展到交响乐团需要考虑不同乐器之间的相关性。非线性介质中的传播需要在角谱方法中加入迭代步骤每次传播一小段距离后更新介质折射率。这类似视频游戏的物理引擎分帧计算复杂相互作用。散射介质模拟可以结合随机相位屏。我在模拟皮肤组织中的光传播时通过添加多层随机相位屏成功再现了实验观察到的散斑图案。