from #545
Observed:
The ROADM element equalizes total channel power (P_sig + P_ASE + P_NLI) to the configured per-channel target. However, in Fiber.propagate the NLI is computed and added at the fiber input via NliSolver.compute_nli(...) using only the signal power per channel (P_sig). As a result the NLI calculation ignores ASE + existing NLI that have already been added/equalized by upstream nodes, which leads to incorrect NLI accumulation when multiple OLSs are chained.
Expected:
NliSolver.compute_nli should consider the actual channel power entering the fiber, i.e. (P_channel = P_sig + P_ASE + P_NLI), when computing NLI contributions.
Suggested change:
Adjust SpectralInformation and differentiate between P_sig and P_channel, as almost all other elements are using (P_channel = P_sig + P_ASE + P_NLI). Or, adjust NliSolver.compute_nli(...) to derive the total channel power and use that as the power argument for NLI computation. This keeps NLI consistent with other elements especially ROADMs.
from #545
Observed:
The ROADM element equalizes total channel power (P_sig + P_ASE + P_NLI) to the configured per-channel target. However, in Fiber.propagate the NLI is computed and added at the fiber input via NliSolver.compute_nli(...) using only the signal power per channel (P_sig). As a result the NLI calculation ignores ASE + existing NLI that have already been added/equalized by upstream nodes, which leads to incorrect NLI accumulation when multiple OLSs are chained.
Expected:
NliSolver.compute_nli should consider the actual channel power entering the fiber, i.e. (P_channel = P_sig + P_ASE + P_NLI), when computing NLI contributions.
Suggested change:
Adjust SpectralInformation and differentiate between P_sig and P_channel, as almost all other elements are using (P_channel = P_sig + P_ASE + P_NLI). Or, adjust NliSolver.compute_nli(...) to derive the total channel power and use that as the power argument for NLI computation. This keeps NLI consistent with other elements especially ROADMs.