基于 MATLAB 的光束传播方法主要是模拟光束在空间中传播时的演化过程。对于光束传播,常见的方法包括 衍射传播方法 和 傅里叶传播方法,它们可以用来模拟高斯光束、拉盖尔-高斯光束等各种光场的传播。下面详细介绍几种常见的光束传播方法以及它们的 MATLAB 实现。
1. 傅里叶光束传播方法(Fourier Propagation Method)
傅里叶传播方法基于衍射积分的频域解。它利用傅里叶变换来描述光束在空间中的演变,适用于远场衍射或大传播距离的情形。
基本原理
MATLAB 实现
以下是使用 MATLAB 实现傅里叶光束传播的代码示例:
clc; clear; close all;
% 参数设置
lambda = 0.6328e-6; % 波长(单位:米)
k = 2*pi/lambda; % 波数
z = 0.1; % 传播距离(单位:米)
L = 5e-3; % 坐标范围(单位:米)
N = 500; % 栅格数
% 坐标网格
x = linspace(-L/2, L/2, N);
y = linspace(-L/2, L/2, N);
[X, Y] = meshgrid(x, y);
fx = linspace(-1/(2*L), 1/(2*L), N); % 傅里叶频率坐标
fy = linspace(-1/(2*L), 1/(2*L), N);
[FX, FY] = meshgrid(fx, fy);
% 初始光场(高斯光束)
w0 = 1e-3; % 光束腰宽度
U0 = exp(-(X.^2 + Y.^2)/w0^2);
% 傅里叶变换
U0_f = fftshift(fft2(U0));
% 传播函数
H = exp(-1i * 2*pi*z * sqrt(1/lambda^2 - FX.^2 - FY.^2));
% 传播后的光场
U_fz = U0_f .* H;
% 逆傅里叶变换
Uz = ifft2(ifftshift(U_fz));
% 可视化
figure;
imagesc(x, y, abs(Uz).^2); % 强度图
colorbar;
title('傅里叶光束传播后的强度分布');
axis square;
xlabel('x (m)');
ylabel('y (m)');
2. 分步傅里叶方法(Split-Step Fourier Method, SSFM)
分步傅里叶方法 主要用于模拟光束在非线性介质中的传播,它结合了傅里叶变换和非线性效应的作用,广泛用于解决 非线性薛定谔方程(NLSE)。
基本原理
分步傅里叶方法将传播距离划分为多个小步长。在每一步,首先考虑光束的线性传播效应(通过傅里叶变换处理),然后再处理非线性效应。
MATLAB 实现
这里提供一个简单的 SSFM 实现,用于模拟光束在弱非线性介质中的传播:
clc; clear; close all;
% 参数设置
lambda = 0.6328e-6; % 波长
k = 2*pi/lambda; % 波数
z_total = 0.2; % 总传播距离
dz = 0.01; % 单步传播距离
L = 5e-3; % 坐标范围
N = 500; % 栅格数
% 坐标网格
x = linspace(-L/2, L/2, N);
y = linspace(-L/2, L/2, N);
[X, Y] = meshgrid(x, y);
fx = linspace(-1/(2*L), 1/(2*L), N);
fy = linspace(-1/(2*L), 1/(2*L), N);
[FX, FY] = meshgrid(fx, fy);
% 初始光场(高斯光束)
w0 = 1e-3; % 光束腰宽度
U = exp(-(X.^2 + Y.^2)/w0^2);
% 非线性系数
n2 = 1e-8; % 非线性折射率
% 传播计算
for z = 0:dz:z_total
% 线性传播
U_f = fftshift(fft2(U));
H = exp(-1i * 2*pi*dz * sqrt(1/lambda^2 - FX.^2 - FY.^2));
U_fz = U_f .* H;
U = ifft2(ifftshift(U_fz));
% 非线性效应
phase_nl = exp(1i * n2 * abs(U).^2 * dz);
U = U .* phase_nl;
end
% 可视化
figure;
imagesc(x, y, abs(U).^2); % 强度图
colorbar;
title('分步傅里叶方法的光束传播强度分布');
axis square;
xlabel('x (m)');
ylabel('y (m)');
3. 傅里叶角谱法(Angular Spectrum Method)
角谱法 是一种频域解方法,通过分解光束的角谱(即波矢方向的频谱分量)来描述光束的衍射传播。适用于模拟短距离和长距离的光束传播。
MATLAB 实现
角谱法的核心是利用波矢分量的传播函数来更新光束在每一个传播距离的光场分布。
clc; clear; close all;
% 参数设置
lambda = 0.6328e-6; % 波长
k = 2*pi/lambda; % 波数
z = 0.1; % 传播距离
L = 5e-3; % 坐标范围
N = 500; % 栅格数
% 坐标网格
x = linspace(-L/2, L/2, N);
y = linspace(-L/2, L/2, N);
[X, Y] = meshgrid(x, y);
fx = linspace(-1/(2*L), 1/(2*L), N);
fy = linspace(-1/(2*L), 1/(2*L), N);
[FX, FY] = meshgrid(fx, fy);
% 初始光场(高斯光束)
w0 = 1e-3; % 光束腰宽度
U0 = exp(-(X.^2 + Y.^2)/w0^2);
% 傅里叶变换
U0_f = fftshift(fft2(U0));
% 角谱传播函数
H = exp(-1i * k * z * sqrt(1 - lambda^2 * (FX.^2 + FY.^2)));
% 传播后的光场
Uz_f = U0_f .* H;
% 逆傅里叶变换
Uz = ifft2(ifftshift(Uz_f));
% 可视化
figure;
imagesc(x, y, abs(Uz).^2); % 强度图
colorbar;
title('角谱法传播后的强度分布');
axis square;
xlabel('x (m)');
ylabel('y (m)');
总结
基于 MATLAB 的光束传播方法多种多样,具体选择哪种方法取决于你的应用需求:
傅里叶传播方法 适用于远场传播。
分步傅里叶方法 用于非线性光束的传播。
角谱法 适用于模拟短距离到长距离的衍射传播。
这些方法结合傅里叶变换,能够有效模拟各种光场的传播行为。
免责声明:本公众号旨在传递更多科研相关内容及分享,所有文章图片来源均注明出处,如涉及版权问题,请作者第一时间后台联系,我们将协调进行处理,对于投稿内容文责自负。