MATLAB实现微环滤波器

硅光里的微环滤波器一般是 波导(总线+环)+ 微环谐振腔 + 光栅耦合器/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 + κ) 量级
  • FSRc/(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)·ΔTdn/dN·ΔN,扫谐振波长漂移
  • 串扰分析 :双环/母子环 FSR 加倍,把 H_total = H_ring1 .* H_ring2
  • 非理想性:耦合器插入损耗 γ、工艺 κ 容差 → Monte Carlo
  • Fano 超窄带 :双环不对称耦合 kappa1 ≠ kappa2,Drop 口出现非对称线型