comnum.raman_profile#

comnum.raman_profile(fiber, freqs, power_dbm, raman)#

The power profiles of a span with distributed Raman amplification: the coupled equations of stimulated Raman scattering for the co-propagating channels and any number of co- and counter-propagating pumps (RK4, forward-backward sweeps), and the spontaneous Raman noise of every channel (see comnum_channel::optical::raman).

Parameters:
  • fiber (FiberParams) – the span (length, attenuation, carrier frequency).

  • freqs (array_like) – centre frequencies of the channels relative to the carrier (Hz).

  • power_dbm (float | array_like) – launch power of every channel (dBm, both polarisations).

  • raman (dict) – the keys of fiber.raman in a specification: pumps (a list of {wavelength_nm | frequency_thz, power_mw, direction: "co" | "counter", alpha_db_km}), aeff_um2 (80), temperature_k (300), isrs (True: the channels also exchange power), step_km (0.1), slice_hz (25e9, for the split-step solvers) and gain ({offsets_thz, gain_m_w, reference_thz}, the gain spectrum g_R A_eff; standard single-mode fibre by default).

Returns:

z_km, freqs_hz (absolute, the channels then the pumps), power_dbm (one row per wave), net_gain_db and on_off_gain_db (per channel), ase_psd (W/Hz, both polarisations, per channel at the end of the span) and iterations.

Return type:

dict

Raises:

ValueError – for an invalid parameter or input (the message names it).

Examples

>>> import comnum
>>> p = comnum.raman_profile(comnum.FiberParams(span_km=100), [0.0], -10.0,
...     {"pumps": [{"wavelength_nm": 1450, "power_mw": 400, "direction": "counter"}]})
>>> bool(10 < p["on_off_gain_db"][0] < 16)
True