光子晶体的色散特性是其最迷人的物理特征之一。这种周期性介电结构能够像半导体控制电子那样操控光子,形成光子带隙。而通过电磁场分布反推色散关系的方法,特别适合分析含有缺陷或无序结构的非理想光子晶体。
传统平面波展开法虽然精确,但计算复杂结构时会遇到困难。相比之下,基于场分布的分析方法具有明显优势:
核心原理在于:电磁波在光子晶体中传播时,其场分布会携带波矢k的信息。通过时空傅里叶变换,我们可以从场分布中提取出(k,ω)关系,这就是色散曲线。
要获得可靠的场分布数据,FDTD仿真参数的设置至关重要:
注意:不恰当的边界条件会导致虚假反射,严重影响场分布和后续分析结果。
在FDTD仿真中,我们需要记录电场随时间的变化:
python复制# 示例:Lumerical FDTD中设置场监视器
addpower()
setnamed("power", "monitor type", "2D Z-normal")
setnamed("power", "x span", 5e-6) # 5μm
setnamed("power", "y span", 5e-6)
setnamed("power", "override global monitor settings", 1)
setnamed("power", "frequency points", 1000)
仿真完成后,将场数据导出为HDF5格式,包含:
首先对时间序列做FFT,获取频率信息:
python复制Ez_fft = np.fft.fft(Ez, axis=0) # 沿时间轴变换
freqs = np.fft.fftfreq(Ez.shape[0], dt)
pos_freq = freqs > 0 # 只需正频率部分
关键参数说明:
接着对空间分布做2D FFT:
python复制kx = np.fft.fftshift(np.fft.fftfreq(Ez.shape[1], dx))
ky = np.fft.fftshift(np.fft.fftfreq(Ez.shape[2], dx))
Ez_k = np.fft.fftshift(np.fft.fft2(Ez_fft, axes=(1,2)), axes=(1,2))
这里fftshift将零频分量移到数组中心,便于后续分析。
对于正方晶格光子晶体,通常分析Γ-X方向([0,0]到[π/a,0]):
python复制# 提取Γ-X路径数据
k_line = kx[kx >= 0]
Ez_line = Ez_k[:, len(kx)//2:, len(ky)//2]
使用scipy的find_peaks识别主导模式:
python复制peaks, _ = find_peaks(spectrum,
height=0.2*np.max(spectrum),
distance=10) # 避免过密峰值
参数调节建议:
将提取的(k,ω)点转换为归一化频率并绘图:
python复制plt.plot(k_points*a/np.pi, omega_norm, 'o-')
plt.xlabel('ka/π')
plt.ylabel('ωa/2πc')
plt.title('光子晶体色散关系')
可能原因及解决方法:
当两个模式频率接近时,FFT可能无法分辨:
即使使用PML,仍可能有残余反射:
对于含缺陷的光子晶体,场分布法特别有效:
python复制# 计算Q因子
omega_0 = ... # 谐振频率
delta_omega = ... # 半高宽
Q = omega_0 / delta_omega
python复制# 示例:使用CuPy加速
import cupy as cp
Ez_gpu = cp.asarray(Ez)
Ez_fft_gpu = cp.fft.fft(Ez_gpu, axis=0)
为确保结果可靠,建议:
误差主要来源:
该方法也适用于实验测量的场数据:
注意事项:
平面波展开法:
有限元法:
场分布法的独特优势:
在实际研究中,建议根据具体需求选择方法,或结合多种方法互相验证。场分布法特别适合快速评估光子晶体的色散特性,尤其是在设计和优化阶段。