硅光里的微环滤波器一般是 波导(总线+环)+ 微环谐振腔 + 光栅耦合器/Bragg 反射器 这套组合,MATLAB 程序,每个器件独立成一个 function,主脚本把它们串成完整链路。公式以 1550 nm 硅光典型参数为例。
一、波导模块 ------ 有效折射率 & 传播常数
硅基条形波导用 Marcatili 近似(高对比度下可用扩展版 RECTWG),这里给一个轻量实现,配合后面的微环/光栅调用。
matlab
%% waveguide.m --- 硅基条形波导 neff / ng 近似计算
function [neff, ng, beta] = waveguide(wavelength, w, h)
% w: 波导宽度(m), h: 波导高度(m), wavelength: 波长(m)
% 返回 neff, ng, beta
nSi = 3.476; % Si @1550nm
nSiO2 = 1.444; % SiO2 @1550nm
k0 = 2*pi./wavelength;
% --- Marcatili 近似(TE 主模)---
% 横向(x)和纵向(y)的半波长约束近似
V = w.*k0.*sqrt(nSi^2 - nSiO2^2);
% 有效折射率经验公式(对 220nm×500nm 量级硅条波导较准)
neff = sqrt(nSiO2^2 + (nSi^2 - nSiO2^2) * (w./(w + 0.3e-6)).^0.8);
% 群折射率(忽略色散粗略取)
ng = neff + wavelength .* 0.02; % 硅 dn/dλ ~ -0.02 @1550nm
beta = k0 .* neff;
end
二、微环模块 ------ Add-Drop 双环传递函数
用信号流图法推导(西华大学那篇标准符号):耦合器增益 Ci=(1−γ)1−κiC_i=(1-\gamma)\sqrt{1-\kappa_i}Ci=(1−γ)1−κi ,耦合路径 Yi=−j(1−γ)κiY_i=-j\sqrt{(1-\gamma)\kappa_i}Yi=−j(1−γ)κi ,环路 F=exp(−αL−jβL)F=\exp(-\alpha L-j\beta L)F=exp(−αL−jβL)。
matlab
%% microring.m --- Add-Drop 微环滤波器传递函数
function [H_through, H_drop] = microring(lambda, R, kappa1, kappa2, alpha, n_g)
% lambda: 波长数组(m), R: 环半径(m)
% kappa1/2: 两个耦合区的耦合系数(0~1)
% alpha: 波导损耗系数(1/m), n_g: 群折射率
c = 3e8;
L = 2*pi*R; % 环周长
beta = 2*pi*n_eff(lambda)/lambda; % 传播常数(n_eff 用上面 waveguide 算)
% 简化:忽略插入损耗 gamma,C=sqrt(1-k), Y=j*sqrt(k)
C1 = sqrt(1 - kappa1); C2 = sqrt(1 - kappa2);
Y1 = 1i*sqrt(kappa1); Y2 = 1i*sqrt(kappa2);
% 环路增益 F = exp(-αL - jβL)
F = exp(-alpha*L) .* exp(-1i*beta*L);
% Through 端口(信号流图法)
% Δ = 1 - C1*C2*F
Delta = 1 - C1*C2*F;
H_through = (C1*F*C2 + C1) ./ Delta; % 简化版,精确版按原文(5)式
% Drop 端口
H_drop = Y1 * Y2 * F ./ Delta;
% 自由谱范围
FSR = c / (n_g * L);
fprintf('FSR = %.2f GHz (%.2f nm)\n', FSR/1e9, FSR/(c)*1550e-9*1e9);
end
function n = n_eff(l)
n = 2.4 * ones(size(l)); % 硅条波导 TE @1550nm 近似值
end
想做 级联微环 / 母子环 FSR 加倍 或 Fano 超窄带 ,只要把
H_through改成多环连乘即可,结构一样。
三、光栅模块 ------ Bragg 反射器(传输矩阵法)
硅光里光栅有两种用途:① Grating coupler 把光从光纤耦入总线(一般用 FDTD 扫,MATLAB 只给效率拟合);② Bragg 光栅 做窄带反射/DFB。下面给 Bragg 的 TMM,分段连乘。
matlab
%% bragg_grating.m --- 均匀布拉格光栅 TMM
function [R, T, lambda] = bragg_grating(lambda_range, n_eff, delta_n, Lambda, L, Nseg)
% lambda_range: [lam_min, lam_max], delta_n: 折射率调制, Lambda: 光栅周期, L: 总长
% Nseg: 分段数
lambda = linspace(lambda_range(1), lambda_range(2), 2000);
dz = L/Nseg;
kappa = pi*delta_n ./ lambda; % 耦合系数
beta = 2*pi*n_eff ./ lambda;
delta = beta - pi/Lambda; % 失配(Bragg 条件 δ=0 @ λ_B)
R = zeros(size(lambda));
T = zeros(size(lambda));
for k = 1:length(lambda)
M = eye(2);
for j = 1:Nseg
% 单段传输矩阵(均匀 Bragg)
gam = sqrt(kappa(k)^2 - delta(k)^2 + 1e-12);
Mj = [ cos(gam*dz), -1i*delta(k)/gam*sin(gam*dz) - 1i*kappa(k)/gam*sin(gam*dz);
-1i*kappa(k)/gam*sin(gam*dz), cos(gam*dz) + 1i*delta(k)/gam*sin(gam*dz)];
M = Mj * M;
end
r = M(2,1)/M(1,1);
t = 1/M(1,1);
R(k) = abs(r)^2;
T(k) = abs(t)^2;
end
end
硅光 grating coupler 的耦合效率(~-3 dB 典型)和方向性,MATLAB 硬算不准,建议 Lumerical FDTD 扫 2D/3D,把
coupling_loss当作常数插回 MATLAB 链路里。
四、主脚本 ------ 把波导 + 微环 + 光栅串成完整滤波器
典型链路:光纤 → GC(损耗)→ 总线波导(传播)→ 微环滤波 → 总线 → GC → 光纤
matlab
%% main_microring_filter.m
clear; clc; close all;
% ===== 参数 =====
lambda = linspace(1540e-9, 1560e-9, 2000);
R = 10e-6; % 环半径 10 μm
kappa1 = 0.2; % 输入耦合系数
kappa2 = 0.2; % 输出耦合系数
alpha = 2; % 波导损耗 2 dB/cm ≈ 0.46 /m (这里先留接口)
n_g = 4.2; % 群折射率
% ===== 1. 波导 neff =====
[neff, ng_calc, beta] = waveguide(lambda, 500e-9, 220e-9);
% ===== 2. 微环响应 =====
[H_th, H_drop] = microring(lambda, R, kappa1, kappa2, alpha, n_g);
% ===== 3. 总线两端 Grating Coupler(简化为固定损耗)=====
GC_loss_dB = 3; % 单边 -3 dB
GC = db2mag(-GC_loss_dB); % 线性
H_total_th = GC^2 * H_th; % through 端总响应
H_total_drop = GC^2 * H_drop;
% ===== 4. 画图 =====
figure('Color','white','Position',[100 100 900 500])
subplot(1,2,1)
plot(lambda*1e9, 10*log10(abs(H_total_th).^2), 'b-', 'LineWidth',1.5); hold on
plot(lambda*1e9, 10*log10(abs(H_total_drop).^2), 'r-', 'LineWidth',1.5)
xlabel('Wavelength (nm)'); ylabel('Transmission (dB)')
legend('Through', 'Drop'); grid on
title('Add-Drop Microring Filter Response')
subplot(1,2,2)
plot(lambda*1e9, abs(H_total_drop).^2, 'r-', 'LineWidth',1.5)
xlabel('Wavelength (nm)'); ylabel('Drop Port Power')
grid on; title('Drop Port Close-up')
% ===== 5. Bragg 光栅单独演示 =====
figure('Color','white')
[n_eff_bg, ~, ~] = waveguide(1550e-9, 500e-9, 220e-9);
[R_bg, T_bg, lam_bg] = bragg_grating([1530e-9 1570e-9], n_eff_bg, 1e-3, 315e-9, 100e-6, 200);
plot(lam_bg*1e9, R_bg, 'r', lam_bg*1e9, T_bg, 'b', 'LineWidth',1.2)
xlabel('Wavelength (nm)'); ylabel('R / T')
legend('Reflection', 'Transmission'); grid on
title('Si Bragg Grating (Λ=315nm, L=100μm)')
跑出来的效果:
- Through 口:谐振谷(Add-Drop 结构下 Drop 口是谐振峰)
- Drop 口:洛伦兹线型,Q ≈ π·neff·R / (λ·αL + κ) 量级
- FSR 约
c/(ng·2πR)→ 10 μm 环在 1550 nm 约 2.8 nm
参考代码 实现微环滤波器的关键程序,包括微环,光栅,波导等模拟 www.youwenfan.com/contentcsw/82460.html
五、和 Lumerical 协同的工作流
纯 MATLAB 算不了实际几何的散射/耦合/GC,真实设计一般这样切:
| 任务 | 工具 | MATLAB 角色 |
|---|---|---|
| 波导 neff / ng / 色散 | Lumerical MODE (eigensolver) | 导出 neff(λ) 查表回 MATLAB |
| Grating coupler 效率/方向性 | Lumerical FDTD 3D | 给一个 GC_loss 常数插回链路 |
| 微环耦合系数 κ(R, gap) | FDTD / varFDTD | 扫 gap→κ 曲线,MATLAB 插值 |
| 系统级谱型 / 级联 / 热调 | MATLAB 主算 | TMM + 传递函数,快 |
流程:FDTD 跑出 κ( gap )、GC_loss、neff(λ) → 存 mat 文件 → MATLAB 主脚本调参扫谱 → 挑最优 gap/R → 回 FDTD 验证。
六、可扩展方向
- 热调 / 载流子调 :在
beta里加Δneff = (dn/dT)·ΔT或dn/dN·ΔN,扫谐振波长漂移 - 串扰分析 :双环/母子环 FSR 加倍,把
H_total = H_ring1 .* H_ring2 - 非理想性:耦合器插入损耗 γ、工艺 κ 容差 → Monte Carlo
- Fano 超窄带 :双环不对称耦合
kappa1 ≠ kappa2,Drop 口出现非对称线型