Noise

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

AWGNRealization

Complex additive white Gaussian noise.

The currently available noise levels

Level

Description

N0

Noise power spectral density.

ThermalNoise

Thermal noise level depending on the system bandwidth and temperature.

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)