fiber.raman_profile
raman_profile( length_km: Annotated[float, exclusiveMinimum=0], *, pump_power: Annotated[float, minimum=0, units='W'] = 0.0, signal_power: Annotated[float, minimum=0, units='W'] = 0.001, efficiency: Annotated[float, minimum=0, units='1/(W·km)'] = 0.4, signal_attenuation: Annotated[float, minimum=0, units='dB/km'] = 0.2, pump_attenuation: Annotated[float, minimum=0, units='dB/km'] = 0.25, pump_wavelength: Annotated[ float, exclusiveMinimum=0, units='μm' ] = 1.45, signal_wavelength: Annotated[ float, exclusiveMinimum=0, units='μm' ] = 1.55, backward: bool = True, points: int = 400,) -> dictSolve the coupled Raman power equations along the fibre.
The on the pump depletion is the photon bookkeeping: one pump photon makes one signal photon, and the energy difference goes into an optical phonon. Dropping it violates photon number by the 7% that the wavelengths differ by, which is the sort of error that hides for a long time.
Counter-pumping (backward=True, the usual choice) makes this a two-point
boundary value problem, since the pump enters at the far end. It is solved
by alternating: integrate the signal forward through the current pump
profile, then the pump backward through the current signal, until neither
moves. Each half is exact in log power given the other, and each integrates
along its own direction of decay. Two details are load bearing. Shooting on
a boundary instead would integrate the counter-propagating pump along +z,
where it grows exponentially, and overflow before converging. And the update
is damped by taking the geometric mean with the previous iterate: the bare
fixed point diverges once the undepleted gain is large, because a hotter
signal drains the pump, which cools the signal, and the two overshoot. With
damping it converges even at 96% pump depletion. Non-convergence raises
rather than returning a profile that is not self consistent.
Args
- length_km: Span length, in km.
- pump_power: Pump power launched, in W.
- signal_power: Signal power launched at z = 0, in W.
- efficiency: Raman gain efficiency at the pump-signal shift, in 1/(W km). Use
raman_efficiency_at_shiftto get it from the spacing. - signal_attenuation: Fibre loss at the signal, in dB/km.
- pump_attenuation: Fibre loss at the pump, in dB/km. Higher than the signal’s, since the pump sits at a shorter wavelength.
- pump_wavelength: Pump wavelength, in μm.
- signal_wavelength: Signal wavelength, in μm.
- backward: Counter-pump if
True, co-pump ifFalse. - points: Samples along the fibre in the returned profile.
Returns
Dict with z_km, pump, signal (all arrays), plus
on_off_gain_db, net_gain_db and pump_depletion.