Matlab模拟OAM螺旋谱展开,包括光束本征态、各类湍流、衍射、干涉下的OAM谱分布
江湖传闻有个叫OAM(轨道角动量)的光学黑科技,能用来搞量子通信和超分辨率成像。这玩意儿最骚的操作就是螺旋相位分布,今天咱们用Matlab整点活,看看不同场景下OAM频谱怎么蹦迪。
先整点基础款——拉盖尔-高斯光束生成。这货的相位像披萨旋转,每圈相位转2πl次:
lambda = 632e-9; % 红光 w0 = 1e-3; % 束腰 l = 3; % 拓扑荷数 x = linspace(-5e-3,5e-3,512); [X,Y] = meshgrid(x); [phi,r] = cart2pol(X,Y); E = (r/w0).^abs(l) .* exp(-r.^2/w0^2) .* exp(1i*l*phi); % 振幅+相位 imagesc(angle(E)); % 显示相位涡旋这段代码里cart2pol把直角坐标转极坐标是关键,l参数控制相位旋转速度。跑出来的相位图像蚊香盘似的,l越大螺旋越密。
接下来搞事情——大气湍流模拟。用随机相位屏整活:
Cn2 = 1e-14; % 湍流强度 L0 = 10; % 外尺度(m) N = 512; delta = 10e-3/N; [kx,ky] = meshgrid((-N/2:N/2-1)*delta); k_sq = kx.^2 + ky.^2; phase_psd = 0.033*(2*pi)^2*Cn2*k_sq.^(-11/6).*exp(-k_sq/(k0^2)); % 功率谱密度 turb_phase = real(ifft2(fft2(randn(N)).*sqrt(phase_psd))); % 生成随机相位 E_turb = E .* exp(1i*2*pi*turb_phase); % 叠加湍流这里的骚操作是用高斯随机场经过功率谱滤波生成湍流相位。k_sq.^(-11/6)对应Kolmogorov湍流模型,像给光波加了动态马赛克。
衍射效应更带劲,直接上角谱法:
z = 1000; % 传输距离(m) k = 2*pi/lambda; H = exp(1i*k*z*sqrt(1-(lambda*kx).^2 - (lambda*ky).^2)); % 传递函数 E_far = fftshift(ifft2(fft2(ifftshift(E)) .* H)); % 角谱衍射fftshift和ifftshift这对好基友处理频域位移,H函数实现近场到远场变换。传输后的光斑会像被熊孩子撕开的棉花糖。
重头戏是OAM谱分析,用方位角傅里叶变换:
[~,r_idx] = max(max(abs(E),[],1)); % 找最大环 E_ring = E(:,r_idx); spectrum = fft(E_ring);这个操作相当于把光环展开成直线再做FFT,l=3时会在第四个频点出现尖峰(Matlab下标从1开始)。就像把蚊香拉直了数圈数。
最后整点高阶玩法——多模式干涉:
E1 = gen_OAM(3); % 生成l=3模式 E2 = gen_OAM(-2); % 生成l=-2模式 interferogram = abs(E1 + E2).^2; % 干涉图样 spectrum = fftshift(fft2(interferogram)); % 频谱分析这时候频谱会出现3-2=1和3+2=5的边带,像两个不同转速的齿轮咬合产生的振动模式。搞通信的可以拿这个做模式分复用,量子佬们能用来搞纠缠态制备。
实战中发现个玄学现象:强湍流下OAM谱会像摇骰子一样弥散,这时候需要自适应光学或者深度学习来矫正。有个邪道玩法是用卷积神经网络直接从光斑图预测拓扑荷数,准确率能到90%以上,不过那是另外的价钱了。