通过python理解相速度和群速度

文章目录

    • 波动模型
    • 相速度
    • 群速度

从物理学的机制出发,波动模型相对于光线模型,显然更加接近光的本质;但是从物理学的发展来说,波动光学旨在解决几何光学无法解决的问题,可谓光线模型的一种升级。从编程的角度来说,波动光学在某些情况下可以简单地理解为在光线模型的基础上,引入一个相位项。

波动模型

一般来说,三个特征可以确定空间中的波场:频率、振幅和相位,故光波场可表示为:

E = A c o s ( ω t − k r ) E = Acos(\omega t-kr) E=Acos(ωtkr)

其中, A A A为振幅, ω = 2 π f = 2 π T \omega=2\pi f=\frac{2\pi}{T} ω=2πf=T2π为角频率, k = 2 π λ k=\frac{2\pi}{\lambda} k=λ2π,为波数。由上式可知,当时间固定时,光在传播方向上有一个正弦波的外形;而对于空间中任意一点,沿着振幅方向则进行简谐运动。

其中,振幅、波数以及空间位置均为矢量,当坐标比较混乱的时候,也可以写成 E ⃗ = A ⃗ c o s ( ω t − k ⃗ r ⃗ ) \vec E = \vec{A}cos(\omega t-\vec k\vec r) E =A cos(ωtk r );有时为了计算方便,也可以写成指数形式

E = A e − i ( ω t − k r ) E = Ae^{-i(\omega t-kr)} E=Aei(ωtkr)

对于平面波来说,其发散角为0,即光场中的所有点,都具有统一的传播方向,且振幅相等。设其传播方向为 z z z,则可写为

E = A c o s ( ω t − k z ) E = Acos(\omega t-kz) E=Acos(ωtkz)

球面波则相对复杂,令 r r r为空间中任意一点到点光源的距离,则对于 a 、 b a、b ab两点来说,其单位面积的光通量之比为 I a I b = r b 2 r a 2 \frac{I_a}{I_b}=\frac{r^2_b}{r^2_a} IbIa=ra2rb2,则振幅之比为 E b E a = r a r b \frac{E_b}{E_a}=\frac{r_a}{r_b} EaEb=rbra。这说明球面波振幅反比于波阵面到光源距离,即

E = A ⃗ r e − i ( ω t − k ⃗ r ⃗ ) E = \frac{\vec A}{r}e^{-i(\omega t-\vec k\vec r)} E=rA ei(ωtk r )

通过截取 x O z xOz xOz平面,假设光波长为532nm,则可以画出这一截面处的光波振幅图。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
z = np.arange(15,200)*10    #单位为nm
x = np.arange(15,200)*10
x,z = np.meshgrid(x,z)      #创建坐标系
E = 1/np.sqrt(x**2+z**2)*np.cos(2*np.pi*np.sqrt(x**2+z**2)/(532*1e-9))
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(x,z,E)
plt.show()

其结果如图所示

通过python理解相速度和群速度_第1张图片

相速度

经典的光波公式 E = A c o s ( ω t − k r ) E = Acos(\omega t-kr) E=Acos(ωtkr)表示一个在空间中沿着一个方向传播的简谐波。如果现有多个频率相同的光波共同传播,那么由于不同光波之间可能存在相位差,虽然在任意一点上仍旧有着简谐运动的形式,但在任意时刻,其波峰波谷的位置显然不同。故可以写为

E = A ( r ) cos ⁡ ( ω t − g ( r ) ) E=A(\bf{r})\cos(\omega t-g(\bf{r})) E=A(r)cos(ωtg(r))

指数形式为

E = A ( r ) e i g ( r ) e − i ω t E=A(\bf{r})e^{ig(\bf{r})}e^{-i\omega t} E=A(r)eig(r)eiωt

其中, g ( r ) g(r) g(r)为常数,被称为等相位面,等相面并不重合的光波叫做非均匀波,即非均匀波可能在空间上不具备可计算的周期性。除非 ω t − g ( r ) \omega t-g(\bf{r}) ωtg(r)的全微分为0,即 ω d t − grad g d r = 0 \omega dt-\text{grad}g\text{d}\bf{r}=0 ωdtgradgdr=0

→ d r d t = ω grad g \to \frac{\text{d}\bf{r}}{\text{d}t}=\frac{\omega}{\text{grad}g} dtdr=gradgω

r \bf{r} r的方向垂直于等相面时,上式数值最小,为

v p ( r ) = ω ∣ grad g ∣ v_p(\bf{r})=\frac{\omega}{|\text{grad}g|} vp(r)=gradgω

该式表示各等相位面前进的速度,为 相速度 \textbf{相速度} 相速度

群速度

对于平面波来说, g ( r ) = k ⋅ r − δ g(\bf r)=k \cdot r-\delta g(r)=krδ,则

v p = ω k = c ε μ v_p=\frac{\omega}{k}=\frac{c}{\sqrt{\varepsilon\mu}} vp=kω=εμ c

当光波是由一群频率不同的光的叠加时,相速度便难以衡量光束的传播特性,也几乎是不可测的。而真实的光波往往是不同频率单色波的叠加

E ( r , t ) = ∫ 0 ∞ A ω ( r ) [ ω t − g ω ( r ) ] E(\mathbf{r},t)=\int_0^\infty A_\omega(\mathbf{r})[\omega t-g_\omega(\mathbf{r})] E(r,t)=0Aω(r)[ωtgω(r)]

对于两个平面单色波来说,如果二者频率和相位都比较相近,振幅相同,且都沿着 z z z轴传播,则对振幅进行归一化,上式可以简化为

E ( z , t ) a = cos ⁡ ( ω t − k z ) + cos ⁡ [ ( ω + δ ω ) t − ( k + δ k ) z ] → e − i ( ω t − k z ) + e − i [ ( ω + δ ω ) t − ( k + δ k ) z ] = 2 cos ⁡ [ 1 2 ( t δ ω − z δ k ) ] e − i ( ω ˉ t − k ˉ z ) → 2 cos ⁡ [ 1 2 ( t δ ω − z δ k ) ] cos ⁡ ( ω ˉ t − k ˉ z ) 其中 ω ˉ = ω + 1 2 δ ω , k ˉ = k + 1 2 δ k \begin{aligned} \frac{E(z,t)}{a}=&\cos{(\omega t-kz)}+\cos{[(\omega+\delta\omega)t-(k+\delta k)z]}\\ \to&e^{-i(\omega t-kz)}+e^{-i[(\omega+\delta\omega)t-(k+\delta k)z]}\\ =&2\cos[\frac{1}{2}(t\delta\omega-z\delta k)]e^{-i(\bar\omega t-\bar kz)}\\ \to&2\cos[\frac{1}{2}(t\delta\omega-z\delta k)]\cos{(\bar\omega t-\bar kz)}\\ \text{其中}&\quad\bar\omega=\omega+\frac{1}{2}\delta\omega,\quad \bar k=k+\frac{1}{2}\delta k \end{aligned} aE(z,t)==其中cos(ωtkz)+cos[(ω+δω)t(k+δk)z]ei(ωtkz)+ei[(ω+δω)t(k+δk)z]2cos[21(tδωzδk)]ei(ωˉtkˉz)2cos[21(tδωzδk)]cos(ωˉtkˉz)ωˉ=ω+21δω,kˉ=k+21δk

假设两列波的波长分别为532nm和600nm,则在同一时刻,不同位置处的光波振幅可通过python画出

def wavePacket(d = [532e-9,600e-9]):
    d = np.array(d)
    k = 2*np.pi/d           #波数
    dk = k[0]-k[1]          #波数差
    bk = k[1]+dk/2          #平均波数

    z = np.arange(10000)/1e9  #位置为0到10um

    E0 = np.cos(-k[0]*z)
    E1 = np.cos(-k[1]*z)
    E = E0+E1
    #E = 2*np.cos(-dk/2*z)*np.cos(-bk*z)

    fig = plt.figure()
    plt.plot(z,E0,'--',color='red',label='E0')
    plt.plot(z,E1,'--',color='blue',label='E1')
    plt.plot(z,E,'-',color='green',label='E')
    plt.legend()
    plt.show()

通过python理解相速度和群速度_第2张图片

可见每间隔一段距离或者时间就会出现一个比较大的振幅,其极大间隔可以通过表达式求出

δ t = 2 π ω ˉ δ z = 2 π k ˉ \delta t = \frac{2\pi}{\bar\omega}\quad\delta z=\frac{2\pi}{\bar k} δt=ωˉ2πδz=kˉ2π

则定义

v g = δ z δ t = ω ˉ k ˉ v_g=\frac{\delta z}{\delta t}=\frac{\bar\omega}{\bar k} vg=δtδz=kˉωˉ

为群速度,表示波包的传播速度。

你可能感兴趣的:(Python光学仿真)