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