pub struct SplitStep { /* private fields */ }Expand description
The Steps of one span in double precision.
Implementations§
Source§impl SplitStep
impl SplitStep
Sourcepub fn new(medium: &Medium, steps: Steps, n: usize, fs: f64) -> SplitStep
pub fn new(medium: &Medium, steps: Steps, n: usize, fs: f64) -> SplitStep
The steps through medium for a block of n samples at fs (no plan for an
empty block: the steps then leave it empty).
Sourcepub fn run(&self, e: &mut [C64])
pub fn run(&self, e: &mut [C64])
Propagate e (√W, time domain) through the steps, in place.
§Panics
If e has another length than the block of SplitStep::new.
Sourcepub fn run_dual(&self, x: &mut [C64], y: &mut [C64])
pub fn run_dual(&self, x: &mut [C64], y: &mut [C64])
The steps for the Manakov equation: both polarisations (√W, time domain, equal lengths) in place, with the nonlinear phase $\frac{8}{9} \gamma (|A_{x}|^{2} + |A_{y}|^{2}) h_{\mathrm{NL}}$ at the middle of every step (the back-propagation of a dual-polarisation link).
§Panics
If the polarisations have different lengths, or another length than the block of
SplitStep::new.
Sourcepub fn run_with_gain(&self, e: &mut [C64], gain: FieldGain<'_>)
pub fn run_with_gain(&self, e: &mut [C64], gain: FieldGain<'_>)
SplitStep::run with a distributed gain: before the nonlinear phase and after
it, every half step also multiplies the spectrum by gain(z_0, z_1, g), the gain
of the field at every frequency (FFT order) from $z_{0}$ to $z_{1}$ (km, from the
start of the steps). The medium then carries no attenuation: gain holds the
loss as well (the power profile of a Raman-pumped span, comnum_channel::optical::raman).
As in SplitStep::run, the field stays in the frequency domain from the end of
a step to the start of the next: two FFTs per step.
§Panics
If e has another length than the block of SplitStep::new.