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 |
|---|---|---|
Complex additive white Gaussian noise. |
The currently available noise levels
Level |
Description |
|---|---|
Noise power spectral density. |
|
Thermal noise level depending on the system bandwidth and temperature. |
|
Signal-to-noise ratio with respect to a reference. |
|
Bit energy to noise power ratio with respect to a waveform. |
|
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)