24 lines
725 B
Matlab
24 lines
725 B
Matlab
function [eta, deltaBeta] = calcFwmEfficiency(f_i, f_j, f_k, f_0, Ds, alphaDbPerKm, Lkm)
|
|
% FWM efficiency including phase mismatch and attenuation.
|
|
% alphaDbPerKm is the power attenuation in dB/km, Lkm is the fiber length in km.
|
|
|
|
deltaBeta = calcPhaseMatching(f_i, f_j, f_k, f_0, Ds);
|
|
|
|
alphaNpPerM = alphaDbPerKm .* log(10) ./ 10 ./ 1e3;
|
|
Lm = Lkm .* 1e3;
|
|
|
|
denominator = alphaNpPerM.^2 + deltaBeta.^2;
|
|
term1 = alphaNpPerM.^2 ./ denominator;
|
|
|
|
loss_term = 1 - exp(-alphaNpPerM .* Lm);
|
|
|
|
if abs(alphaNpPerM) < eps
|
|
term2 = 4 .* sin(deltaBeta .* Lm ./ 2).^2 ./ max((alphaNpPerM .* Lm).^2, eps);
|
|
else
|
|
term2 = 1 + 4 .* exp(-alphaNpPerM .* Lm) .* sin(deltaBeta .* Lm ./ 2).^2 ./ (loss_term.^2);
|
|
end
|
|
|
|
eta = term1 .* term2;
|
|
|
|
end
|