Загрузка данных


% =========================================================================
% МОДЕЛЬ ЛАЗЕРА ФАБРИ-ПЕРО С ВБР: СТАТИКА И ДИНАМИКА ПРИ НАГРЕВЕ
% Чистая версия без дублирования и ошибок
% =========================================================================

clear; clc; close all;

% =========================================================================
% ЭТАП 1: Настройки среды и сетка по длине волны
% =========================================================================
lambda_start = 1540;          % Начальная длина волны (нм)
lambda_end   = 1560;          % Конечная длина волны (нм)
d_lambda     = 0.005;         % Шаг сетки (нм)
lambda       = lambda_start : d_lambda : lambda_end;

% =========================================================================
% ЭТАП 2: Физические параметры лазера Фабри-Перо
% =========================================================================
lambda_0     = 1550;          % Центральная длина волны (нм)
L            = 250000;           % Длина резонатора (мкм) — ИСПРАВЛЕНО (было 250000)
n_eff        = 3.5;           % Эффективный показатель преломления
R_mirror     = 0.32;          % Коэффициент отражения граней (~32%)
sigma_env    = 3.0;           % Ширина огибающей Гаусса (нм)

% Расчёт FSR (Free Spectral Range)
FSR = (lambda_0^2) / (2 * n_eff * L);  % Расстояние между модами

% Расчёт Finesse и ширины пика
Finesse = (pi * sqrt(R_mirror)) / (1 - R_mirror);
FWHM_peak = FSR / Finesse;             % Ширина пика на полувысоте
sigma_peak = FWHM_peak / 2.355;        % Сигма для гауссовой аппроксимации

% =========================================================================
% ЭТАП 3: Генерация статического спектра лазера
% =========================================================================
I_laser_static = zeros(1, length(lambda));

for m = -10:1:10
    lambda_m = lambda_0 + m * FSR; 
    amplitude_m = exp(-((lambda_m - lambda_0)^2) / (2 * sigma_env^2));
    I_laser_static = I_laser_static + amplitude_m * exp(-((lambda - lambda_m).^2) / (2 * sigma_peak^2));
end

% =========================================================================
% ЭТАП 4: Модель Волоконной Брэгговской Решётки (ВБР)
% =========================================================================
lambda_fbg = 1550.8;           % Центр отражения ВБР (нм)
sigma_fbg  = 0.1;              % Ширина пика ВБР (нм)
R_fbg      = 1;                % Макс. коэффициент отражения (100%)

I_fbg = R_fbg * exp(-((lambda - lambda_fbg).^2) / (2 * sigma_fbg^2));

% =========================================================================
% ЭТАП 5: Построение статических спектров (График 1)
% =========================================================================
figure('Name', 'Статика: Спектры лазера и ВБР', 'NumberTitle', 'off');
plot(lambda, I_laser_static, 'b', 'LineWidth', 1.5);
hold on;
plot(lambda, I_fbg, 'r', 'LineWidth', 2);
title(sprintf('Спектры лазера и ВБР'));
xlabel('Длина волны, нм');
ylabel('Интенсивность, отн.ед.');
grid on;
hold off;

% =========================================================================
% ЭТАП 6: Моделирование динамики при нагреве
% =========================================================================
t_end = 20;                    % Длительность импульса (мкс)
t = linspace(0, t_end, 1000);  % Временная сетка

max_shift = 8;                 % Максимальный сдвиг спектра (нм)
tau_thermal = 4.0;             % Тепловая постоянная времени (мкс)

% Экспоненциальный нагрев (физически обоснованно)
delta_lambda = max_shift * (1 - exp(-t / tau_thermal));

% Массив для сигнала с фотодетектора
PD_signal = zeros(1, length(t));

% Цикл по времени
for k = 1:length(t)
    shift = delta_lambda(k);
    lambda_0_shifted = lambda_0 + shift; 
    
    % Пересчёт спектра лазера с учётом сдвига
    I_laser_shifted = zeros(1, length(lambda));
    for m = -10:1:10
        lambda_m = lambda_0_shifted + m * FSR; 
        amplitude_m = exp(-((lambda_m - lambda_0_shifted)^2) / (2 * sigma_env^2));
        I_laser_shifted = I_laser_shifted + amplitude_m * exp(-((lambda - lambda_m).^2) / (2 * sigma_peak^2));
    end
    
    % Отражённый спектр: пересечение спектра лазера и отражения ВБР
    reflected_spectrum = I_laser_shifted .* I_fbg; 
    
    % Сигнал фотодетектора = интеграл (сумма) отражённой мощности
    PD_signal(k) = sum(reflected_spectrum);
end

% =========================================================================
% ЭТАП 7: Построение динамики (Графики 2 и 3)
% =========================================================================
figure('Name', 'Динамика нагрева и сигнал', 'NumberTitle', 'off');

% Подграфик 1: Сдвиг спектра во времени
subplot(2, 1, 1);
plot(t, delta_lambda, 'm', 'LineWidth', 2);
title('Сдвиг спектра лазера при нагреве');
xlabel('Время t, мкс');
ylabel('Сдвиг длины волны, нм');
grid on;

% Подграфик 2: Сигнал на фотодетекторе (осциллограмма)
subplot(2, 1, 2);
plot(t, PD_signal, 'k', 'LineWidth', 1.5);
title('Сигнал на фотодетекторе');
xlabel('Время, мкс');
ylabel('Ток фотодетектора, отн. ед.');
grid on;

% Дополнительно: можно нормировать сигнал
% PD_signal = PD_signal / max(PD_signal); % если нужна нормировка