├── DoubleslitGrating.m ├── README.md ├── RectGrating.m ├── detection.m ├── diffraction.m ├── laguerre.m ├── oam_build.m ├── planeWave.m ├── sphereWave.m └── 仿真结果 ├── 双缝衍射检测拓扑荷数.jpg ├── 基于保角变换检测涡旋光拓扑荷数.jpg ├── 平面波干涉检测拓扑荷数.jpg ├── 拉盖尔-高斯光束1.jpg ├── 拉盖尔-高斯光束2.jpg ├── 环形涡旋光束1.jpg ├── 环形涡旋光束2.jpg ├── 球面波干涉检测拓扑荷数.jpg ├── 矩孔衍射检测拓扑荷数.jpg ├── 贝塞尔-高斯光束1.jpg └── 贝塞尔-高斯光束2.jpg /DoubleslitGrating.m: -------------------------------------------------------------------------------- 1 | function [result]=DoubleslitGrating(E0,p) 2 | [Nx,Ny]=size(E0); 3 | result=zeros(Nx,Ny); 4 | W=round(p*Nx/2); 5 | result(Nx/2+W,:)=1; 6 | result(Nx/2-W,:)=1; 7 | end -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vortex-light 2 | 涡旋光的产生:拉盖尔-高斯光束,贝塞尔-高斯光束,环形涡旋光束 3 | 4 | 涡旋光拓扑荷数的检测:基于保角变换的检测,利用球面波干涉图样检测,利用平面波干涉图样检测,利用双缝衍射图样检测,利用矩孔衍射图样检测 5 | 6 | oam_build.m用于产生涡旋光,laguerre.m为拉盖尔高斯光束生成函数 7 | 8 | detection.m利用保角变换检测 9 | 10 | sphereWave.m,planeWave.m利用干涉检测 11 | 12 | diffraction.m利用衍射检测,RectGrating.m,DoubleslitGrating.m为衍射所用到的矩孔与双缝 13 | -------------------------------------------------------------------------------- /RectGrating.m: -------------------------------------------------------------------------------- 1 | function [result]=RectGrating(E0,xp,yp) 2 | [Nx,Ny]=size(E0); 3 | result=zeros(Nx,Ny); 4 | X_begin=ceil((1-xp)*Nx/2); 5 | X_end=ceil((1+xp)*Nx/2); 6 | Y_begin=ceil((1-yp)*Ny/2); 7 | Y_end=ceil((1+yp)*Ny/2); 8 | for a=X_begin:X_end 9 | for b=Y_begin:Y_end 10 | result(a,b)=1; 11 | end 12 | end 13 | end -------------------------------------------------------------------------------- /detection.m: -------------------------------------------------------------------------------- 1 | clc; 2 | clear; 3 | Lambda=6.328e-7; 4 | wzero=3e-3; 5 | f=0.2; 6 | DT=0.2; 7 | a=(4e-3)/pi; 8 | b=4.5e-3; 9 | L1=5; 10 | L2=1; 11 | 12 | D=2e-2; 13 | M=1000; 14 | dx=D/M; 15 | du=1/D; 16 | X=-D/2:dx:D/2-dx; 17 | Y=X; 18 | [x,y]=meshgrid(X,Y); 19 | U=-1/(2*dx):1/D:(1/(2*dx)-1/D); 20 | V=U; 21 | [u,v]=meshgrid(U,V); 22 | r=sqrt(x.^2+y.^2); 23 | theta=atan2(y,x); 24 | XT=U*Lambda*DT; 25 | YT=XT; 26 | [xt,yt]=meshgrid(XT,YT); 27 | 28 | FAI1=2*pi*a/(Lambda*f).*(y.*theta-x.*log(sqrt(x.^2+y.^2+eps)/b)+x); 29 | FAI2=-2*pi*a*b/(Lambda*f).*exp(-xt./(a+eps)+eps).*cos(-yt./(a+eps)+eps); 30 | ULA=1*sqrt(2/pi)./wzero.*exp(-r.^2/(wzero.^2)).*sqrt(1/ factorial(abs(L1))).*(r.*sqrt(2)./wzero).^abs(L1).*exp(1i*L1*theta)+1*sqrt(2/pi)./wzero.*exp(-r.^2/(wzero.^2)).*sqrt(1/factorial(abs(L2))).*(r.*sqrt(2)./wzero).^abs(L2).*exp(1i*L2*theta); 31 | ULA1=ULA.*exp(1i*FAI1); 32 | ULA2=ifftshift(ULA1); 33 | ULAT0=fft2(ULA2); 34 | ULAT=fftshift(ULAT0); 35 | 36 | ULB=ULAT.*exp(1i*FAI2); 37 | ULB1=ifftshift(ULB); 38 | ULBT0=fft2(ULB); 39 | ULBT=fftshift(ULBT0); 40 | 41 | figure; 42 | subplot(1,3,1) 43 | surf(x,y,abs(ULA)) 44 | %colormap('gray') 45 | shading interp;%插值平滑 46 | axis equal; %横纵坐标刻度标尺一致 47 | axis([-(D/2),(D/2),-(D/2),(D/2)]); %取值范围 48 | view(90,90 ) 49 | box on; 50 | grid off; 51 | 52 | subplot(1,3,2) 53 | surf(x,y,abs(ULAT)) 54 | %colormap('gray') 55 | shading interp;%插值平滑 56 | axis equal; %横纵坐标刻度标尺一致 57 | axis([-(D/2),(D/2),-(D/2),(D/2)]); %取值范围 58 | view(90,90 ) 59 | box on; 60 | grid off; 61 | 62 | subplot(1,3,3) 63 | surf(x,y,abs(ULBT)) 64 | %colormap('gray') 65 | shading interp;%插值平滑 66 | axis equal; %横纵坐标刻度标尺一致 67 | axis([-0.00015,0.00015,-0.00015 ,0.00015]) %取值范围 68 | view(90,90 ) 69 | box on; 70 | grid off; 71 | 72 | hold on; -------------------------------------------------------------------------------- /diffraction.m: -------------------------------------------------------------------------------- 1 | clear; 2 | N=100; 3 | lambda=6.328e-7; 4 | k=2*pi/lambda; 5 | w0=0.5e-3; 6 | [x0,y0]=meshgrid(linspace(-3*w0,3*w0,N)); 7 | [theta,r] = cart2pol(x0,y0); 8 | E=zeros(N); 9 | [x,y]=meshgrid(linspace(-3*w0,3*w0,N)); 10 | s=1; 11 | for L=-4:1:4 12 | subplot(3,3,s) 13 | E0=exp(1i*L*theta); 14 | %矩孔衍射 15 | Z=0.1; 16 | t=RectGrating(E0,0.1,0.1); 17 | %双缝衍射 18 | %Z=0.25; 19 | %t=DoubleslitGrating(E0,0.1); 20 | for a=1:N 21 | for b=1:N 22 | E(a,b)=exp(1i*k*Z)/1i/lambda/Z*sum(sum(E0.*t.*exp(1i*k/2/Z*((x(a,b)-x0).^2+(y(a,b)-y0).^2)))); 23 | end 24 | end 25 | I=E.*conj(E); 26 | pcolor(x,y,I); 27 | axis square; 28 | title(['L = ',num2str(L)]); 29 | s=s+1; 30 | end -------------------------------------------------------------------------------- /laguerre.m: -------------------------------------------------------------------------------- 1 | %% 拉盖尔多项式(文献5中的公式) 2 | function result = laguerre(p,l,x) 3 | result = 0; 4 | if p == 0 5 | result = 1; 6 | elseif p == 1 7 | result = 1+abs(l)-x; 8 | else 9 | result = (1/p)*((2*p+l-1-x).*laguerre(p-1,abs(l),x)-(p+l-1)*laguerre(p-2,abs(l),x)); 10 | end 11 | end 12 | 13 | -------------------------------------------------------------------------------- /oam_build.m: -------------------------------------------------------------------------------- 1 | clc; 2 | clear all; 3 | close all; 4 | %% 环形涡旋光束 5 | 6 | %画出极坐标图 7 | N = 200; 8 | lambda = 632e-9; %波长为632nm 9 | k = 2*pi/lambda; %波数 10 | w0 = 3; %束腰半径 11 | x = linspace(-10,10,N); 12 | y = linspace(-10,10,N); 13 | [X,Y] = meshgrid(x,y); 14 | [theta,r] = cart2pol(X,Y); 15 | 16 | beta = 50*pi/180; 17 | figure(1); 18 | 19 | for m = -4 : 4 20 | subplot(3,3,m+5) 21 | E1 = (r/w0).^abs(m).*exp(-r.^2/w0^2)*exp(1i*beta).*exp(-1i*m*theta); 22 | I1 = E1.*conj(E1); I1 = I1/max(max(I1)); 23 | 24 | %二维 25 | h1 = pcolor(X,Y,I1); 26 | colorbar; 27 | set(h1,'edgecolor','none','facecolor','interp'); 28 | title(['m = ',num2str(m)]); 29 | axis square; 30 | end 31 | sgtitle('环形涡旋光束:不同拓扑荷数(m)'); %为图1添加总标题 32 | 33 | figure(2); 34 | 35 | for m = -4 : 4 36 | subplot(3,3,m+5) 37 | E1 = (r/w0).^abs(m).*exp(-r.^2/w0^2)*exp(1i*beta).*exp(-1i*m*theta); 38 | I1 = E1.*conj(E1); I1 = I1/max(max(I1)); 39 | %三维 40 | mesh(X,Y,I1) 41 | set(gca,'fontname','times new roman'); 42 | title(['m = ',num2str(m)],'fontname','华文中宋'); 43 | xlabel('x/mm','fontname','times new roman'); 44 | ylabel('y/mm','fontname','times new roman'); 45 | zlabel('归一化强度','fontname','华文中宋'); 46 | end 47 | sgtitle('环形涡旋光束3D:不同拓扑荷数(m)'); %为图2添加总标题 48 | 49 | %% 贝塞尔-高斯光束 50 | N = 200; 51 | lambda = 632e-9; %波长为632nm 52 | k = 2*pi/lambda; %波数 53 | w0 = 3; %束腰半径 54 | x = linspace(-5,5,N); 55 | y = linspace(-5,5,N); 56 | [X,Y] = meshgrid(x,y); 57 | [theta,r] = cart2pol(X,Y); 58 | figure(3); 59 | 60 | alpha = 5; 61 | for m = -4 : 4 62 | subplot(3,3,m+5) 63 | E2 = besselj(m,alpha.*r).*exp(-r.^2/w0^2).*exp(-1i*m*theta); %使用了matlab内置的贝塞尔函数 64 | I2 = E2.*conj(E2); I2 = I2/max(max(I2)); 65 | 66 | %二维 67 | h2 = pcolor(X,Y,I2); 68 | colorbar; 69 | set(h2,'edgecolor','none','facecolor','interp'); 70 | title(['m = ',num2str(m)]); 71 | %colormap(gray); %输出灰度图像 72 | axis square; 73 | end 74 | sgtitle('贝塞尔-高斯光束:不同拓扑荷数(m)'); %为图3添加总标题 75 | 76 | figure(4); 77 | 78 | for m = -4 : 4 79 | subplot(3,3,m+5) 80 | E2 = besselj(m,alpha.*r).*exp(-r.^2/w0^2).*exp(-1i*m*theta); %使用了matlab内置的贝塞尔函数 81 | I2 = E2.*conj(E2); I2 = I2/max(max(I2)); 82 | %三维 83 | mesh(X,Y,I2) %三维 84 | set(gca,'fontname','times new roman'); 85 | title(['m = ',num2str(m)],'fontname','华文中宋'); 86 | xlabel('x/mm','fontname','times new roman'); 87 | ylabel('y/mm','fontname','times new roman'); 88 | zlabel('归一化强度','fontname','华文中宋'); 89 | end 90 | sgtitle('贝塞尔-高斯光束3D:不同拓扑荷数(m)'); %为图4添加总标题 91 | 92 | %% 拉盖尔-高斯光束 93 | N = 200; 94 | lambda = 632e-9; %波长为632nm 95 | k = 2*pi/lambda; %波数 96 | w0 = 3e-3; %光斑尺寸 97 | x = linspace(-3*w0,3*w0,N); y = x; 98 | [X,Y] = meshgrid(x,y); 99 | [theta,r] = cart2pol(X,Y); 100 | Z_R = pi*w0^2/lambda; %瑞利长度 101 | z = 0; 102 | w_z = w0*sqrt(1+(z/Z_R)^2);%光束在z位置的半径 103 | figure(5); 104 | 105 | p = 2; %p = 0, 1, 2...; 106 | for m = -4 : 4 107 | subplot(3,3,m+5) 108 | E3 = sqrt(2*factorial(p)/pi/(p+factorial(abs(m))))*(1/w_z)*(sqrt(2)*r/w_z).^abs(m)... 109 | .*exp(-r.^2/w_z^2).*laguerre(p,abs(m),2*r.^2/w_z^2).*exp(-1i*m*theta).*exp(-1i*k*z)... 110 | .*exp(-1i*k*r.^2*z/2/(z^2+Z_R^2))*exp(-1i*(2*p+abs(m)+1)*atan(z/Z_R)); 111 | I3 = E3.*conj(E3); I3 = I3/max(max(I3)); 112 | 113 | %二维 114 | h3 = pcolor(X,Y,I3); 115 | colorbar; 116 | set(h3,'edgecolor','none','facecolor','interp'); 117 | title(['m = ',num2str(m)]); 118 | %colormap(gray); %输出灰度图像 119 | axis square; 120 | end 121 | sgtitle(['拉盖尔-高斯光束:不同拓扑荷数(m) p = ',num2str(p)]); %为图5添加总标题 122 | 123 | figure(6); 124 | 125 | for m = -4 : 4 126 | subplot(3,3,m+5) 127 | E3 = sqrt(2*factorial(p)/pi/(p+factorial(abs(m))))*(1/w_z)*(sqrt(2)*r/w_z).^abs(m)... 128 | .*exp(-r.^2/w_z^2).*laguerre(p,abs(m),2*r.^2/w_z^2).*exp(-1i*m*theta).*exp(-1i*k*z)... 129 | .*exp(-1i*k*r.^2*z/2/(z^2+Z_R^2))*exp(-1i*(2*p+abs(m)+1)*atan(z/Z_R)); 130 | I3 = E3.*conj(E3); I3 = I3/max(max(I3)); 131 | %三维 132 | mesh(X,Y,I3) %三维 133 | set(gca,'fontname','times new roman'); 134 | title(['m = ',num2str(m)],'fontname','华文中宋'); 135 | xlabel('x/mm','fontname','times new roman'); 136 | ylabel('y/mm','fontname','times new roman'); 137 | zlabel('归一化强度','fontname','华文中宋'); 138 | end 139 | sgtitle(['拉盖尔-高斯光束3D:不同拓扑荷数(m) p = ',num2str(p)]); %为图6添加总标题 140 | -------------------------------------------------------------------------------- /planeWave.m: -------------------------------------------------------------------------------- 1 | clear; 2 | N=100; 3 | lambda=6.328e-7; 4 | k=2*pi/lambda; %波数 5 | x=linspace(-10,10,N); 6 | y=linspace(-10,10,N); 7 | [X,Y]=meshgrid(x,y); 8 | [theta,r]=cart2pol(X,Y); 9 | s=1; 10 | for L=-2:0.5:2 11 | subplot(3,3,s) 12 | E1=exp(-1i*k*X); 13 | E2=exp(1i*L*theta); 14 | E=E1+E2; 15 | I=E.*conj(E); 16 | pcolor(X,Y,I); 17 | axis square; 18 | title(['L = ',num2str(L)]); 19 | s=s+1; 20 | end -------------------------------------------------------------------------------- /sphereWave.m: -------------------------------------------------------------------------------- 1 | clear; 2 | N=100; 3 | lambda=6.328e-7; 4 | k=2*pi/lambda; %波数 5 | x=linspace(-0.002,0.002,N); 6 | y=linspace(-0.002,0.002,N); 7 | [X,Y]=meshgrid(x,y); 8 | [theta,r]=cart2pol(X,Y); 9 | s=1; 10 | for L=-2:0.5:2 11 | subplot(3,3,s) 12 | E1=exp(1i*k*sqrt(r.*r+1))./sqrt(r.*r+1); 13 | E2=exp(1i*L*theta); 14 | E=E1+E2; 15 | I=E.*conj(E); 16 | pcolor(X,Y,I); 17 | axis square; 18 | title(['L = ',num2str(L)]); 19 | s=s+1; 20 | end -------------------------------------------------------------------------------- /仿真结果/双缝衍射检测拓扑荷数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/双缝衍射检测拓扑荷数.jpg -------------------------------------------------------------------------------- /仿真结果/基于保角变换检测涡旋光拓扑荷数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/基于保角变换检测涡旋光拓扑荷数.jpg -------------------------------------------------------------------------------- /仿真结果/平面波干涉检测拓扑荷数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/平面波干涉检测拓扑荷数.jpg -------------------------------------------------------------------------------- /仿真结果/拉盖尔-高斯光束1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/拉盖尔-高斯光束1.jpg -------------------------------------------------------------------------------- /仿真结果/拉盖尔-高斯光束2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/拉盖尔-高斯光束2.jpg -------------------------------------------------------------------------------- /仿真结果/环形涡旋光束1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/环形涡旋光束1.jpg -------------------------------------------------------------------------------- /仿真结果/环形涡旋光束2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/环形涡旋光束2.jpg -------------------------------------------------------------------------------- /仿真结果/球面波干涉检测拓扑荷数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/球面波干涉检测拓扑荷数.jpg -------------------------------------------------------------------------------- /仿真结果/矩孔衍射检测拓扑荷数.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/矩孔衍射检测拓扑荷数.jpg -------------------------------------------------------------------------------- /仿真结果/贝塞尔-高斯光束1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/贝塞尔-高斯光束1.jpg -------------------------------------------------------------------------------- /仿真结果/贝塞尔-高斯光束2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ZaneWiegand/Vortex-light/40275076a94d5142c885a322468bc8a1d14008d3/仿真结果/贝塞尔-高斯光束2.jpg --------------------------------------------------------------------------------