Laguerre-Gaussian (LG) beams, sometimes referred to as doughnut shaped beams, are circularly symmetric solutions to the wave equation. Higher order modes appear as concentric rings. Beams with non-zero radial order carry orbital angular momentum and appear with a dark spot in the centre of the beam due to the phase discontinuity.
The following visualisation shows linearly polarized LG mode solutions to the paraxial wave equation. The field amplitude at any plane along the beam axis is proportional to \[U(R, \phi) \propto R^{|l|} L_p^{|l|}(R^2) \exp(il\phi)\exp(-i(2p + l + 1)\arctan(z/z_R))\] where \(R(z)\) and \(\phi\) are the normalized radial and angular coordinates at plane \(z\), \(L_p^{|l|}\) are the Laguerre polynomials, \(z_R\) is the Rayleigh range and \(l\) and \(p\) are the radial and azimuthal mode numbers.
The left panel shows the beam in 3-D space. The top panel shows the amplitude/intensity profile of the beam and the bottom panel shows the phase of the electric field.
p = 1; % Degree of LG mode l = 2; % Order of LG mode w0 = 2.0; % Beam waist k = 2*pi/532.0e-9; % Wavenumber of light zR = k*w0^2/2; % Calculate the Rayleigh range % Setup the cartesian grid for the plot at plane z z = 0.0; [xx, yy] = meshgrid(linspace(-5, 5), linspace(-5, 5)); % Calculate the cylindrical coordinates [phi, r] = cart2pol(xx, yy); U00 = 1/(1 + 1i*z/zR) .* exp(-r.^2/w0^2./(1 + 1i*z/zR)); w = w0 * sqrt(1 + z.^2/zR^2); R = sqrt(2)*r./w; % Lpl from OT toolbox (Nieminen et al., 2004) Lpl = nchoosek(p+l,p) * ones(size(R)); % x = R(r, z).^2 for m = 1:p Lpl = Lpl + (-1)^m/factorial(m) * nchoosek(p+l,p-m) * R.^(2*m); end U = U00.*R.^l.*Lpl.*exp(1i*l*phi).*exp(-1i*(2*p + l + 1)*atan(z/zR)); figure; subplot(1, 2, 1); imagesc(abs(U).^2); title('Intensity'); subplot(1, 2, 2); imagesc(angle(U)); title('Phase');
import numpy as np import matplotlib.pyplot as plt from scipy.misc import comb, factorial p = 1; # Degree of LG mode l = 2; # Order of LG mode w0 = 2.0; # Beam waist k = 2*np.pi/532.0e-9; # Wavenumber of light zR = k*w0**2.0/2; # Calculate the Rayleigh range # Setup the cartesian grid for the plot at plane z z = 0.0; xx, yy = np.meshgrid(np.linspace(-5, 5), np.linspace(-5, 5)); # Calculate the cylindrical coordinates r = np.sqrt(xx**2 + yy**2); phi = np.arctan2(yy, xx); U00 = 1.0/(1 + 1j*z/zR) * np.exp(-r**2.0/w0**2/(1 + 1j*z/zR)); w = w0 * np.sqrt(1.0 + z**2/zR**2); R = np.sqrt(2.0)*r/w; # Lpl from OT toolbox (Nieminen et al., 2004) Lpl = comb(p+l,p) * np.ones(np.shape(R)); # x = R(r, z).^2 for m in xrange(1, p+1): Lpl = Lpl + (-1.0)**m/factorial(m) * comb(p+l,p-m) * R**(2.0*m); U = U00*R**l*Lpl*np.exp(1j*l*phi)*np.exp(-1j*(2*p + l + 1)*np.arctan(z/zR)); plt.figure() plt.title('Intensity') plt.pcolor(abs(U)**2); plt.axis('equal') plt.figure() plt.title('Phase') plt.pcolor(np.angle(U)**2); plt.axis('equal') plt.show()