Skip to main content

StepRule

Enum StepRule 

Source
#[non_exhaustive]
pub enum StepRule { Fixed(f64), NonlinearPhase(f64), Logarithmic(usize), Fwm { phase_rad: f64, bandwidth_hz: Option<f64>, update: StepUpdate, max_nl_phase_rad: Option<f64>, }, }
Expand description

The step size of ManakovSplitStep.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Fixed(f64)

Steps of a fixed length (km); the last step of a span is shortened.

§

NonlinearPhase(f64)

Steps whose largest nonlinear phase $\max_{t} \phi(t)$ is this rotation (rad).

§

Logarithmic(usize)

This number of steps over every propagated length (a span), distributed logarithmically (logarithmic_steps, Bosco et al. 2000, eq. (6)): every step carries the same integrated power, short where the power is high. Without loss, equal steps.

§

Fwm

The four-wave-mixing-aware rule of Musetti, Serena and Bononi (2018): the first step of every span bounds the phase mismatch of the four-wave mixing across the signal bandwidth $B$ (eq. (13)),

$$ h_{1} = \frac{\Phi_{\mathrm{FWM}}}{|\beta_{2}| (2\pi B)^{2}}, $$

and the next steps grow with the attenuation by update. The rule does not depend on the power: the error it leaves on the SNR is fixed by $\Phi_{\mathrm{FWM}}$ (about 0.01 dB for 20 rad with the constant local error, 4 rad with the nonlinear-phase update, Sec. IV-B).

Fields

§phase_rad: f64

$\Phi_{\mathrm{FWM}}$ (rad).

§bandwidth_hz: Option<f64>

$B$ (Hz): the bandwidth of the signal; None measures it on the fields at the start of the propagation (signal_bandwidth).

§update: StepUpdate

The growth of the steps along a span.

§max_nl_phase_rad: Option<f64>

Also bound the largest nonlinear phase of a step to this rotation (rad), the rule of StepRule::NonlinearPhase: the four-wave-mixing rule alone lets the steps of a single channel exceed its dispersion length at high power.

Implementations§

Source§

impl StepRule

Source

pub const FWM_DEFAULT: StepRule

The default rule: Musetti et al. for an SNR error of about 0.01 dB in WDM ($\Phi_{\mathrm{FWM}}$ = 20 rad, the constant local error, the bandwidth measured on the fields), and at most 0.02 rad of nonlinear phase per step, which a single channel at high power needs: one DP-16QAM channel of 32 GBd over 10 × 80 km at 2 to 8 dBm gets 0.3 to 0.7 dB too much SNR with the four-wave-mixing rule alone, the converged values with both (validation/cards/musetti2018_fig7.yaml).

Trait Implementations§

Source§

impl Clone for StepRule

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Copy for StepRule

Source§

impl Debug for StepRule

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for StepRule

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for StepRule

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.