49 lines
1.3 KiB
Matlab
49 lines
1.3 KiB
Matlab
function [P_fwm, eta, deltaBeta, Leff] = calcFwmPower( ...
|
|
f_i, f_j, f_k, f_0, Ds, alphaDbPerKm, Lkm, ...
|
|
P_i, P_j, P_k, gammaWInvKmInv, degeneracyFactor)
|
|
% Calculate FWM power for a fiber with attenuation and phase mismatch.
|
|
%
|
|
% Inputs:
|
|
% f_i, f_j, f_k, f_0 : frequencies in Hz
|
|
% Ds : dispersion slope in ps / (nm^2 km)
|
|
% alphaDbPerKm : attenuation in dB/km
|
|
% Lkm : fiber length in km
|
|
% P_i, P_j, P_k : launch powers in W
|
|
% gammaWInvKmInv : nonlinear coefficient in 1/(W km)
|
|
% degeneracyFactor : typically 3 for degenerate FWM, 6 for non-degenerate
|
|
|
|
if nargin < 8 || isempty(P_i)
|
|
P_i = 1;
|
|
end
|
|
if nargin < 9 || isempty(P_j)
|
|
P_j = P_i;
|
|
end
|
|
if nargin < 10 || isempty(P_k)
|
|
P_k = 1;
|
|
end
|
|
if nargin < 11 || isempty(gammaWInvKmInv)
|
|
gammaWInvKmInv = 1;
|
|
end
|
|
if nargin < 12 || isempty(degeneracyFactor)
|
|
degeneracyFactor = 1;
|
|
end
|
|
|
|
[eta, deltaBeta] = calcFwmEfficiency(f_i, f_j, f_k, f_0, Ds, alphaDbPerKm, Lkm);
|
|
|
|
alphaNpPerM = alphaDbPerKm .* log(10) ./ 10 ./ 1e3;
|
|
Lm = Lkm .* 1e3;
|
|
gammaWInvMInv = gammaWInvKmInv ./ 1e3;
|
|
|
|
if abs(alphaNpPerM) < eps
|
|
Leff = Lm;
|
|
else
|
|
Leff = (1 - exp(-alphaNpPerM .* Lm)) ./ alphaNpPerM;
|
|
end
|
|
|
|
P_fwm = degeneracyFactor .* eta .* ...
|
|
(gammaWInvMInv .* Leff).^2 .* ...
|
|
P_i .* P_j .* P_k .* ...
|
|
exp(-alphaNpPerM .* Lm);
|
|
|
|
end
|