Noise

Inheritance diagram of hermespy.simulation.noise.model.NoiseModel, hermespy.simulation.noise.level.NoiseLevel, hermespy.simulation.noise.model.NoiseRealization

Hardware noise is one of the primary factors limiting the performance of wireless systems in both communication and sensing applications. While any processing step introduces noise to some extent, Hermes currently assumes receiving front-ends to be the primary source of noise power added to any incoming signal.

HermesPy’s noise configuration consists of classes, the NoiseModel representing the noise’s statistical properties and the NoiseLevel representing the noise’s power level.

When generating a new realization of the statistical NoiseModel, the expected power returned by the NoiseLevel's get_power() method is passed to the realize method to obtain a NoiseRealization instance.

        flowchart LR

model[NoiseModel] -->|realize| realization[NoiseRealization]
level[NoiseLevel] -->|get_power| realization
    

The currently available implementations of noise models are

Model

Realization

Description

AWGN Model

AWGN Realization

Complex additive white Gaussian noise.

The currently available noise levels

Level

Description

N0

Noise floor in terms of watts.

SNR

Signal-to-noise ratio with respect to a reference.

EBN0

Bit energy to noise power ratio with respect to a waveform.

ESN0

Symbol energy to noise power ratio with respect to a waveform.

Configuring a SimulatedDevice's thermal noise model is as simple as setting its noise porperty to an instance of a noise model.

1# Create a new device
2simulation = Simulation()
3device = simulation.new_device()
4
5# Configure the device's default noise model
6device.noise_model = NoiseModel()

Of course, the abstract Noise model in the above snippet has to be replaced with a specific implementation from the above table. The actual noise level can be adjusted indepentely from the model by either setting the default noise level property.

1# Specify the noise's default power
2device.noise_level = NoiseLevel(dB(-20))
3
4# Alternatively: Specify the device's receive SNR
5device.noise_level = SNR(dB(20), device)

If the noise level object is already initialized and only the represented power level needs to be adjusted, the shift operator can be used as a shortcut.

1# Shorthand for the noise level
2device.noise_level << dB(-21)
class NoiseModel(seed=None)[source]

Bases: RandomNode, Generic[NRT]

Noise modeling base class.

Parameters:

seed (int, optional) – Random seed for initializating the pseud-random number generator.

add_noise(signal, power)[source]

Add noise to a signal model.

Parameters:
  • signal (Signal) – The signal to which the noise should be added.

  • power (float) – Power of the added noise in Watt.

Return type:

Signal

Returns: Signal model with added noise.

abstract realize(power)[source]

Realize the noise model.

Parameters:

power (float, optional) – Power of the added noise in Watt.

Return type:

TypeVar(NRT, bound= NoiseRealization)

Returns: Noise model realization.

class NoiseLevel[source]

Bases: ScalarDimension, Serializable

Base class for all noise level configuration classes.

abstract get_power()[source]

Power of the noise level.

Returns: Power in Watt.

Return type:

float

abstract property level: float

Scalar level of the represented noise.

Raises:

ValueError – If the noise level is negative.

class NoiseRealization(noise, power)[source]

Bases: RandomRealization

Realization of a noise model

Parameters:
  • noise (Noise) – Noise model to be realized.

  • power (float) – Power indicator of the noise model.

abstract add_to(signal)[source]
Parameters:

signal (Signal) – The signal to which the noise should be added.

Return type:

Signal

Returns: Signal model with added noise.

property power: float

Power of the noise realization.

Returns: Power in Watt.

class NRT

Type of noise realization

alias of TypeVar(‘NRT’, bound=NoiseRealization)