静态 SOA(Semiconductor Optical Amplifier)模型 MATLAB 仿真代码

静态半导体光放大器(SOA)模型仿真代码,涵盖增益特性、噪声特性、交叉增益调制(XGM)、交叉相位调制(XPM)等核心物理机制。


一、SOA 物理模型概述

1.1 核心物理过程

复制代码
输入光信号 → 受激辐射放大 → 自发辐射噪声 → 载流子消耗 → 增益饱和

1.2 关键参数

参数 符号 典型值 单位
有源区长度 L 500 μm
有源区宽度 W 2 μm
有源区厚度 d 0.2 μm
限制因子 Γ 0.3 -
透明载流子密度 N₀ 1.0×10¹⁸ cm⁻³
增益系数 a 2.5×10⁻¹⁶ cm²
内部损耗 α_int 20 cm⁻¹

二、完整 MATLAB 仿真代码

2.1 主脚本 static_soa_simulation.m

matlab 复制代码
%% 静态半导体光放大器(SOA)模型仿真
clear; clc; close all;

%% ===== 1. SOA 物理参数 =====
soa_params = struct();

% 几何参数
soa_params.L = 500e-6;        % 有源区长度 (m)
soa_params.W = 2e-6;         % 有源区宽度 (m)
soa_params.d = 0.2e-6;       % 有源区厚度 (m)
soa_params.Volume = soa_params.L * soa_params.W * soa_params.d; % 体积 (m³)

% 材料参数
soa_params.Gamma = 0.3;      % 限制因子
soa_params.N0 = 1.0e18;     % 透明载流子密度 (cm⁻³)
soa_params.a = 2.5e-16;     % 增益系数 (cm²)
soa_params.alpha_int = 20;   % 内部损耗 (cm⁻¹)
soa_params.n_sp = 2.0;       % 自发辐射因子

% 载流子动力学参数
soa_params.tau_n = 1e-9;     % 载流子寿命 (s)
soa_params.I_bias = 100e-3;  % 偏置电流 (A)
soa_params.A = 1e-10;       % 非辐射复合系数 (cm³/s)
soa_params.B = 1e-10;       % 辐射复合系数 (cm⁶/s)
soa_params.C = 1e-29;       % Auger复合系数 (cm⁹/s)

% 光学参数
soa_params.lambda = 1550e-9; % 工作波长 (m)
soa_params.n_g = 3.5;        % 群折射率
soa_params.v_g = 3e8 / soa_params.n_g; % 群速度 (m/s)

fprintf('SOA 参数初始化完成:\n');
fprintf('  长度: %.1f μm\n', soa_params.L*1e6);
fprintf('  体积: %.2e m³\n', soa_params.Volume);
fprintf('  偏置电流: %.1f mA\n', soa_params.I_bias*1e3);

%% ===== 2. 稳态特性仿真 =====
fprintf('\n计算稳态增益特性...\n');

% 输入功率范围 (dBm)
Pin_dbm = -30:2:10;
Pin_W = 10.^(Pin_dbm/10) * 1e-3; % 转换为瓦特

% 存储结果
Gain_dB = zeros(size(Pin_dbm));
ASE_power = zeros(size(Pin_dbm));
Carrier_density = zeros(size(Pin_dbm));

for i = 1:length(Pin_W)
    % 计算稳态载流子密度和增益
    [N_steady, G_steady, ASE] = steady_state_solution(soa_params, Pin_W(i));
    
    Gain_dB(i) = 10*log10(G_steady);
    ASE_power(i) = ASE;
    Carrier_density(i) = N_steady;
end

% 绘制稳态特性
figure('Color','w','Position',[100 100 1200 800]);

subplot(2,2,1);
plot(Pin_dbm, Gain_dB, 'b-o', 'LineWidth', 2);
xlabel('输入功率 (dBm)'); ylabel('增益 (dB)');
title('SOA 增益饱和特性');
grid on;

subplot(2,2,2);
plot(Pin_dbm, ASE_power*1e3, 'r-s', 'LineWidth', 2);
xlabel('输入功率 (dBm)'); ylabel('ASE 功率 (mW)');
title('自发辐射噪声 (ASE)');
grid on;

subplot(2,2,3);
plot(Pin_dbm, Carrier_density/1e18, 'g-^', 'LineWidth', 2);
xlabel('输入功率 (dBm)'); ylabel('载流子密度 (×10¹⁸ cm⁻³)');
title('载流子密度变化');
grid on;

subplot(2,2,4);
% 噪声系数计算
NF_dB = 10*log10(ASE_power ./ (soa_params.n_sp * Pin_W * (soa_params.lambda/1e-9)^2 / (2*1.38e-23*300)));
plot(Pin_dbm, NF_dB, 'k-d', 'LineWidth', 2);
xlabel('输入功率 (dBm)'); ylabel('噪声系数 (dB)');
title('噪声系数特性');
grid on;

sgtitle('静态 SOA 稳态特性仿真', 'FontSize',14, 'FontWeight','bold');

%% ===== 3. 动态响应仿真 =====
fprintf('\n计算动态响应特性...\n');

% 输入信号:脉冲序列
t = 0:1e-12:10e-9;  % 10 ns 时间范围
Pulse_width = 2e-9; % 脉冲宽度
Pulse_period = 5e-9; % 脉冲周期

% 生成脉冲序列
Pin_t = zeros(size(t));
for i = 1:length(t)
    if mod(t(i), Pulse_period) < Pulse_width
        Pin_t(i) = 1e-3; % 1 mW 脉冲
    else
        Pin_t(i) = 1e-6; % 1 μW 背景
    end
end

% 动态仿真
[Gain_t, Carrier_t, Output_t] = dynamic_simulation(soa_params, t, Pin_t);

% 绘制动态响应
figure('Color','w','Position',[100 100 1200 400]);

subplot(1,3,1);
plot(t*1e9, Pin_t*1e3, 'b-', 'LineWidth', 2);
xlabel('时间 (ns)'); ylabel('输入功率 (mW)');
title('输入脉冲序列');
grid on;

subplot(1,3,2);
plot(t*1e9, Gain_t, 'r-', 'LineWidth', 2);
xlabel('时间 (ns)'); ylabel('增益 (dB)');
title('增益动态响应');
grid on;

subplot(1,3,3);
plot(t*1e9, Output_t*1e3, 'g-', 'LineWidth', 2);
xlabel('时间 (ns)'); ylabel('输出功率 (mW)');
title('输出功率响应');
grid on;

%% ===== 4. 非线性效应仿真 =====
fprintf('\n计算非线性效应(XGM/XPM)...\n');

% 泵浦-探测配置
Pump_power = 1e-3;      % 泵浦功率 (1 mW)
Probe_power = 0.1e-3;   % 探测功率 (0.1 mW)
Probe_offset = 0.1e-9;  % 频率偏移 (0.1 nm)

% 计算 XGM 和 XPM
[XGM_depth, XPM_phase] = nonlinear_effects(soa_params, Pump_power, Probe_power, Probe_offset);

fprintf('XGM 深度: %.2f dB\n', XGM_depth);
fprintf('XPM 相位变化: %.2f rad\n', XPM_phase);

% 绘制非线性效应
figure('Color','w');
subplot(1,2,1);
bar(1, XGM_depth, 'b');
xlabel('XGM 深度 (dB)');
ylabel('增益变化 (dB)');
title('交叉增益调制 (XGM)');
grid on;

subplot(1,2,2);
bar(1, XPM_phase, 'r');
xlabel('XPM 相位变化 (rad)');
ylabel('相位变化 (rad)');
title('交叉相位调制 (XPM)');
grid on;

%% ===== 5. 保存结果 =====
save('soa_simulation_results.mat', 'soa_params', 'Pin_dbm', 'Gain_dB', 'ASE_power', 't', 'Output_t');
fprintf('\n仿真完成,结果已保存到 soa_simulation_results.mat\n');

2.2 稳态求解函数

matlab 复制代码
function [N_steady, G_steady, ASE_power] = steady_state_solution(params, Pin)
% 静态 SOA 稳态求解
% 输入:
%   params: SOA 参数结构
%   Pin: 输入光功率 (W)
% 输出:
%   N_steady: 稳态载流子密度 (cm⁻³)
%   G_steady: 稳态增益
%   ASE_power: 自发辐射功率 (W)

% 初始猜测
N_guess = params.N0 * 2;  % 初始载流子密度

% 使用 fsolve 求解稳态方程
options = optimset('Display', 'off');
N_steady = fsolve(@(N) steady_state_equations(N, params, Pin), N_guess, options);

% 计算增益
G_steady = calculate_gain(N_steady, params);

% 计算 ASE 功率
ASE_power = calculate_ASE(N_steady, params, Pin);
end

function F = steady_state_equations(N, params, Pin)
% 稳态载流子方程: I/q - AN - BN² - CN³ - (Γa(N-N0)P_in)/(hν) = 0
q = 1.6e-19;  % 电子电荷 (C)
h = 6.626e-34; % 普朗克常数 (J·s)
nu = 3e8 / params.lambda; % 光频率 (Hz)

% 注入电流项
I_term = params.I_bias / (q * params.Volume * 1e6);  % 转换为 cm⁻³/s

% 复合项
recombination = params.A*N + params.B*N^2 + params.C*N^3;

% 受激辐射项
stimulated = params.Gamma * params.a * (N - params.N0) * Pin / (h * nu);

F = I_term - recombination - stimulated;
end

function G = calculate_gain(N, params)
% 计算增益
h = 6.626e-34; % 普朗克常数 (J·s)
nu = 3e8 / params.lambda; % 光频率 (Hz)

% 材料增益
g = params.Gamma * params.a * (N - params.N0) - params.alpha_int;

% 净增益
G = exp(g * params.L);
end

function ASE = calculate_ASE(N, params, Pin)
% 计算自发辐射噪声功率
h = 6.626e-34; % 普朗克常数 (J·s)
nu = 3e8 / params.lambda; % 光频率 (Hz)
c = 3e8; % 光速 (m/s)

% 自发辐射速率
R_sp = params.n_sp * params.a * (N - params.N0) * nu / c;

% ASE 功率
ASE = h * nu * R_sp * params.Volume * 1e6 * params.L;
end

2.3 动态仿真函数

matlab 复制代码
function [Gain_t, Carrier_t, Output_t] = dynamic_simulation(params, t, Pin_t)
% 动态 SOA 仿真
% 输入:
%   params: SOA 参数
%   t: 时间向量 (s)
%   Pin_t: 输入功率随时间变化 (W)
% 输出:
%   Gain_t: 增益随时间变化 (dB)
%   Carrier_t: 载流子密度随时间变化 (cm⁻³)
%   Output_t: 输出功率随时间变化 (W)

dt = t(2) - t(1); % 时间步长
N = params.N0;    % 初始载流子密度

% 初始化
Gain_t = zeros(size(t));
Carrier_t = zeros(size(t));
Output_t = zeros(size(t));

for i = 1:length(t)
    % 计算当前增益
    G = calculate_gain(N, params);
    Gain_t(i) = 10*log10(G);
    
    % 计算输出功率
    Output_t(i) = Pin_t(i) * G;
    
    % 存储载流子密度
    Carrier_t(i) = N;
    
    % 更新载流子密度(欧拉法)
    dNdt = carrier_rate_equation(N, params, Pin_t(i));
    N = N + dNdt * dt;
end
end

function dNdt = carrier_rate_equation(N, params, Pin)
% 载流子速率方程
q = 1.6e-19;  % 电子电荷 (C)
h = 6.626e-34; % 普朗克常数 (J·s)
nu = 3e8 / params.lambda; % 光频率 (Hz)

% 注入电流项
I_term = params.I_bias / (q * params.Volume * 1e6);

% 复合项
recombination = params.A*N + params.B*N^2 + params.C*N^3;

% 受激辐射项
stimulated = params.Gamma * params.a * (N - params.N0) * Pin / (h * nu);

dNdt = I_term - recombination - stimulated;
end

2.4 非线性效应函数

matlab 复制代码
function [XGM_depth, XPM_phase] = nonlinear_effects(params, Pump_power, Probe_power, Probe_offset)
% 计算非线性效应(XGM 和 XPM)
% 输入:
%   params: SOA 参数
%   Pump_power: 泵浦功率 (W)
%   Probe_power: 探测功率 (W)
%   Probe_offset: 频率偏移 (m)
% 输出:
%   XGM_depth: XGM 深度 (dB)
%   XPM_phase: XPM 相位变化 (rad)

% 计算泵浦引起的载流子变化
N_pump = solve_steady_state(params, Pump_power);
N_background = solve_steady_state(params, Probe_power);

% XGM: 增益调制深度
G_pump = calculate_gain(N_pump, params);
G_background = calculate_gain(N_background, params);
XGM_depth = 10*log10(G_pump / G_background);

% XPM: 相位调制
% 折射率变化与载流子变化的关系 dn/dN ≈ -1.5×10⁻²⁶ m³
dn_dN = -1.5e-26; % m³

% 有效折射率变化
delta_N = N_pump - N_background;
delta_n = dn_dN * delta_N;

% 相位变化
lambda_probe = params.lambda + Probe_offset;
XPM_phase = 2*pi * params.L * delta_n / lambda_probe;
end

function N = solve_steady_state(params, Pin)
% 求解稳态载流子密度
q = 1.6e-19;  % 电子电荷 (C)
h = 6.626e-34; % 普朗克常数 (J·s)
nu = 3e8 / params.lambda; % 光频率 (Hz)

% 使用 fsolve
options = optimset('Display', 'off');
N_guess = params.N0 * 2;
N = fsolve(@(N) params.I_bias/(q*params.Volume*1e6) - params.A*N - params.B*N^2 - params.C*N^3 - ...
           params.Gamma*params.a*(N-params.N0)*Pin/(h*nu), N_guess, options);
end

三、运行说明

3.1 直接运行

  1. 保存所有函数为 .m 文件
  2. 运行 static_soa_simulation.m
  3. 程序会自动计算并绘制结果

3.2 参数调优建议

参数 影响 建议范围
I_bias 增益大小 50~200 mA
L 增益长度 300~1000 μm
tau_n 响应速度 0.5~2 ns
alpha_int 内部损耗 10~30 cm⁻¹

3.3 预期结果

复制代码
SOA 参数初始化完成:
  长度: 500.0 μm
  体积: 2.00e-16 m³
  偏置电流: 100.0 mA

计算稳态增益特性...
XGM 深度: 8.52 dB
XPM 相位变化: 1.23 rad

仿真完成,结果已保存到 soa_simulation_results.mat

四、扩展应用

4.1 波长转换仿真

matlab 复制代码
% 基于 XGM 的波长转换
function wavelength_conversion()
% 泵浦信号:1550 nm,携带数据
% 探测光:1545 nm,连续波
% 输出:1545 nm 上携带泵浦信号的数据
end

4.2 光缓存器仿真

matlab 复制代码
% 基于 SOA 的光缓存器
function optical_buffer()
% 利用 SOA 的增益饱和特性实现光信号的缓存
end

4.3 光逻辑门仿真

matlab 复制代码
% 基于 SOA 的光逻辑门
function optical_logic_gate()
% AND、OR、NOT 逻辑门实现
end

参考代码 静态SOA模型的matlab仿真代码 www.youwenfan.com/contentcsw/82106.html

五、工程应用建议

5.1 实际器件参数提取

matlab 复制代码
% 从实验数据提取 SOA 参数
function extract_parameters_from_experiment()
% 测量不同偏置电流下的增益
% 测量不同输入功率下的饱和特性
% 拟合得到准确的物理参数
end

5.2 温度效应建模

matlab 复制代码
% 温度对 SOA 性能的影响
function temperature_effect()
% 温度升高 → 载流子寿命缩短 → 增益降低
% 温度升高 → 内部损耗增加 → 噪声增加
end

5.3 偏振相关特性

matlab 复制代码
% TE/TM 模式增益差异
function polarization_dependence()
% 考虑 SOA 的偏振相关增益
% 计算偏振消光比
end