70 lines
2.0 KiB
Matlab
70 lines
2.0 KiB
Matlab
%% ============================================================
|
||
% IM/DD Power Fading Evolution vs Wavelength (L = 10 km)
|
||
% ============================================================
|
||
|
||
clear; close all; clc;
|
||
|
||
%% Fixed fiber parameters
|
||
lambda0 = 1310e-9; % zero-dispersion wavelength [m]
|
||
S0 = 0.09; % dispersion slope [ps/(nm^2·km)]
|
||
L = 10e3; % fiber length FIXED [m]
|
||
c = physconst('lightspeed');
|
||
|
||
%% Frequency grid
|
||
f_max = 150e9;
|
||
f = linspace(0, f_max, 4000); % [Hz]
|
||
|
||
%% Figure setup (stable axes for clean GIF)
|
||
fig = figure('Color','w');
|
||
ax = axes(fig);
|
||
hold(ax,'on'); grid(ax,'on'); box(ax,'on');
|
||
xlabel(ax,'Frequency [GHz]');
|
||
ylabel(ax,'Magnitude [dB]');
|
||
ylim(ax,[-30 0]);
|
||
xlim(ax,[0 f_max/1e9]);
|
||
|
||
%% GIF writer
|
||
g = GifWriter('Name','power_fading_vs_wavelength', ...
|
||
'DelayTime',0.12, ...
|
||
'Parallel',false);
|
||
|
||
%% Wavelength sweep (around ZDW)
|
||
lambda_vec = linspace(1260e-9, 1360e-9, 25); % 1260–1360 nm
|
||
|
||
for k = 1:length(lambda_vec)
|
||
|
||
lambda = lambda_vec(k);
|
||
|
||
%% Dispersion for current wavelength
|
||
D_lambda = (S0/4) * (lambda*1e9 - (lambda0*1e9)^4/(lambda*1e9)^3); % ps/(nm·km)
|
||
D_si = D_lambda * 1e-6; % s/m^2
|
||
b2 = -D_si * lambda^2 / (2*pi*c); % s^2/m
|
||
|
||
%% Power fading transfer function
|
||
phi = 2*pi^2 * b2 * f.^2 * L;
|
||
H = abs(cos(phi));
|
||
HdB = 10*log10(max(H, 1e-12));
|
||
|
||
cla(ax)
|
||
plot(ax, f/1e9, HdB, 'LineWidth',1.8,'Color','black');
|
||
|
||
%% First-null frequency
|
||
if abs(D_si) > 0
|
||
f_null = sqrt(c*(0.5)/(abs(D_si)*lambda^2*L));
|
||
xline(ax, f_null/1e9, 'r--', 'LineWidth',1.2, ...
|
||
'Label', sprintf('f_{null}=%.1f GHz', f_null/1e9), ...
|
||
'LabelOrientation','horizontal', ...
|
||
'LabelVerticalAlignment','bottom');
|
||
end
|
||
|
||
title(ax, sprintf('Power Fading for: 10 km @ %.0f nm', lambda*1e9));
|
||
|
||
drawnow;
|
||
g.addFrame(fig);
|
||
end
|
||
|
||
%% Compile GIF
|
||
g.compile(fig.Number);
|
||
|
||
disp(fullfile(g.OutputDir, sprintf('%s_fig_%d.gif', g.Name, fig.Number)));
|