matlab模拟高斯光束扩束后生成平面波光束
时间: 2023-10-02 20:11:27 浏览: 141
以下是一种可能的 MATLAB 代码,用于模拟高斯光束的扩束,并将其转换为平面波光束:
```matlab
% 定义高斯光束参数
lambda = 632.8e-9; % 波长
w0 = 0.1e-3; % 初始光斑半径
z0 = pi*w0^2/lambda; % Rayleigh 范围
z = 5*z0; % 末端位置
% 定义网格和空间坐标
N = 512; % 网格大小
L = 1e-2; % 网格尺寸
x = linspace(-L/2, L/2, N);
y = x';
[X, Y] = meshgrid(x, y);
dx = x(2) - x(1);
dy = y(2) - y(1);
k = 2*pi/lambda;
z_vec = linspace(0, z, 100); % 生成位置向量
% 计算高斯光束
R = sqrt(X.^2 + Y.^2);
w = w0*sqrt(1 + (z/z0)^2);
phi = atan2(Y, X);
u0 = exp(-R.^2/w^2).*exp(-1i*k*R.^2/(2*z)).*exp(1i*phi);
% 扩束
u = zeros(N, N, length(z_vec));
for ii = 1:length(z_vec)
z_current = z_vec(ii);
w_current = w0*sqrt(1 + (z_current/z0)^2);
R_current = sqrt(X.^2 + Y.^2);
phi_current = atan2(Y, X);
u_current = exp(-R_current.^2/w_current^2).*exp(-1i*k*R_current.^2/(2*z_current)).*exp(1i*phi_current);
u(:,:,ii) = u_current;
end
% 将最终的波函数转换为平面波
U_final = zeros(N, N, length(z_vec));
for ii = 1:length(z_vec)
z_current = z_vec(ii);
U_final(:,:,ii) = u(:,:,ii).*exp(1i*k*z_current);
end
% 绘制结果
figure;
for ii = 1:length(z_vec)
subplot(1, length(z_vec), ii);
imagesc(x*1e3, y*1e3, abs(U_final(:,:,ii)).^2);
axis square;
xlabel('x (mm)');
ylabel('y (mm)');
title(sprintf('z = %0.2f m', z_vec(ii)));
end
```
此代码将生成一个包含多个子图的图形,每个子图显示在不同位置处的平面波光束的强度分布。您可以根据需要更改高斯光束和空间坐标的参数,以更好地满足您的需求。
阅读全文