Phase Noise

Inheritance diagram of hermespy.simulation.rf.noise.phase_noise.PhaseNoise, hermespy.simulation.rf.noise.phase_noise.PhaseNoiseRealization, hermespy.simulation.rf.noise.phase_noise.NoPhaseNoise, hermespy.simulation.rf.noise.phase_noise.NoPhaseNoiseRealization, hermespy.simulation.rf.noise.phase_noise.OscillatorPhaseNoise, hermespy.simulation.rf.noise.phase_noise.OscillatorPhaseNoiseRealization

Phase noise refers to the effect random fluctuations in a non-ideal osciallators phase have on a signal modulated by that osicallator. The effect of phase noise is to spread the signal out in the frequency domain. The currently implemented phase noise models are

Phase Noise Model

Description

NoPhaseNoise

No phase noise is added to the signal.

OscillatorPhaseNoise

Phase noise is added to the signal based on its freuency domain characteristics.

class PhaseNoise(mother_node=None, seed=None)[source]

Bases: RandomNode, Serializable

Base class of phase noise models.

Parameters:
  • mother_node (RandomNode | None) – Mother node of this random node. By default, nodes are considered to be roots.

  • seed (int | None) – Random seed used to initialize the pseudo-random number generator.

add_noise(signal)[source]

Add phase noise to a signal model.

Parameters:

signal (RFSignal) – The signal model to which phase noise is to be added.

Return type:

RFSignal

Returns:

Noisy signal model.

abstract realize(bandwidth, oversampling_factor)[source]
Return type:

PhaseNoiseRealization

class PhaseNoiseRealization[source]

Bases: ABC

Realization of a phase noise model.

abstract add_noise(signal)[source]

Add phase noise to an existing signal stream.

Parameters:

signal (RFSignal) – Signal to which phase noise is to be added.

Return type:

RFSignal

Returns:

Signal with added phase noise.

No Phase Noise

The NoPhaseNoise is HermesPy’s implementation of an ideal oscillator that does not add any phase noise.

class NoPhaseNoise(mother_node=None, seed=None)[source]

Bases: PhaseNoise

No phase noise considered within the device model.

Parameters:
  • mother_node (RandomNode | None) – Mother node of this random node. By default, nodes are considered to be roots.

  • seed (int | None) – Random seed used to initialize the pseudo-random number generator.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

NoPhaseNoise

Returns:

The deserialized object.

realize(bandwidth, oversampling_factor)[source]
Return type:

NoPhaseNoiseRealization

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

class NoPhaseNoiseRealization[source]

Bases: PhaseNoiseRealization

Realization of a phase noise model that does not add any noise.

add_noise(signal)[source]

Add phase noise to an existing signal stream.

Parameters:

signal (RFSignal) – Signal to which phase noise is to be added.

Return type:

RFSignal

Returns:

Signal with added phase noise.

Oscillator Phase Noise

Oscillator phase noise model according to Khanzadi et al.[1], modeling the phase noise of an oscillator as a function of the distance to the carrier frequency \(\Delta f\) in frequency domain. Phase noise is modeled as a superposition of three noise power spectral densities (PSDs)

\[S_{\phi}(\Delta f) = S_{\phi_0}(\Delta f) + S_{\phi_2}(\Delta f) + S_{\varphi_3}(\Delta f)\]

where

\[S_{\phi_0}(\Delta f) = K_0\]

denotes the white noise floor PSD of power \(K_0\),

\[S_{\phi_2}(\Delta f) = \frac{K_2}{f^2}\]

denotes the flicker noise PSD of power \(K_2\) following a square law decay with distance to the carrier frequency \(\Delta f\) and

\[S_{\phi_3}(\Delta f) = \frac{K_3}{f^3}\]

denotes the flicker noise PSD of power \(K_3\) following a cubic law decay with distance to the carrier frequency \(\Delta f\). A starting point for the parameter values is given by Khanzadi et al.[1] as

\[\begin{split}K_0 &= -110~\mathrm{dB} = 10^{-110/10} \\ K_2 &= 10 \\ K_3 &= 10^4 \quad \text{.} \\\end{split}\]
class OscillatorPhaseNoise(K0=1e-11, K2=10, K3=10000, seed=None)[source]

Bases: PhaseNoise, Serializable

Oscillator phase noise model defined in frequency domain.

Refer to Khanzadi et al.[1] for addtional information.

Parameters:
  • K0 (float) – White noise floor power level, denoted as \(K_0\) [1].

  • K2 (float) – Power level of the 2nd order flicker noise component, denoted as \(K_2\) [1].

  • K3 (float) – Power level of the 3rd order flicker noise component, denoted as \(K_3\) [1].

  • seed (int | None) – Seed with which to initialize the random state of the model.

classmethod Deserialize(process)[source]

Deserialize an object’s state.

Objects cannot be deserialized directly, instead a Factory must be instructed to carry out the deserialization process.

Parameters:

process (DeserializationProcess) – The current stage of the deserialization process. This object is generated by the Factory and provides an interface to deserialization methods supporting multiple backends.

Return type:

OscillatorPhaseNoise

Returns:

The deserialized object.

classmethod FromPSD(frequency_offsets, noise_levels, precision=1e-20, seed=None)[source]

Create an oscillator phase noise model from a given power spectral density (PSD).

Parameters:
  • frequency_offsets (TypeAliasType) – Frequency offset to the assumed carrier frequency in Hz.

  • noise_levels (TypeAliasType) – Noise levels corresponding to the frequency offsets (linear scale).

  • precision (float) – Precision of the resulting model fit.

  • seed (int | None) – Seed with which to initialize the random state of the model.

Return type:

OscillatorPhaseNoise

Returns:

An instance of OscillatorPhaseNoise fitted to the provided PSD.

realize(bandwidth, oversampling_factor)[source]
Return type:

OscillatorPhaseNoiseRealization

serialize(process)[source]

Serialize this object’s state.

Objects cannot be serialized directly, instead a Factory must be instructed to carry out the serialization process.

Parameters:

process (SerializationProcess) – The current stage of the serialization process. This object is generated by the Factory and provides an interface to serialization methods supporting multiple backends.

Return type:

None

property K0: float[source]

White noise floor power level, denoted as \(K_0\).

Raises:

ValueError – If the value is negative.

property K2: float[source]

Power level of the 2nd order flicker noise component, denoted as \(K_2\).

Raises:

ValueError – If the value is negative.

property K3: float[source]

Power level of the 3rd order flicker noise component, denoted as \(K_3\).

Raises:

ValueError – If the value is negative.

class OscillatorPhaseNoiseRealization(K0, K2, K3, seed)[source]

Bases: PhaseNoiseRealization

Realization of an oscillator phase noise model defined in frequency domain

Refer to Khanzadi et al.[1] for addtional information.

Parameters:
  • K0 (float) – White noise floor power level, denoted as \(K_0\) [1].

  • K2 (float) – Power level of the 2nd order flicker noise component, denoted as \(K_2\) [1].

  • K3 (float) – Power level of the 3rd order flicker noise component, denoted as \(K_3\) [1].

  • seed (int) – Seed with which to initialize the random state of the model.

add_noise(signal)[source]

Add phase noise to an existing signal stream.

Parameters:

signal (RFSignal) – Signal to which phase noise is to be added.

Return type:

RFSignal

Returns:

Signal with added phase noise.