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 floor in terms of watts. |
|
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)
- 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:
- Return type:
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 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.
- class NRT¶
Type of noise realization
alias of TypeVar(‘NRT’, bound=
NoiseRealization
)