ebnodb2no#
- sionna.phy.utils.ebnodb2no(ebno_db: float | torch.Tensor, num_bits_per_symbol: int, coderate: float, resource_grid: Any | None = None, precision: Literal['single', 'double'] | None = None, device: str | None = None) torch.Tensor[source]#
Computes the noise variance No for a given Eb/No in dB.
The function takes into account the number of coded bits per constellation symbol, the coderate, as well as possible additional overheads related to OFDM transmissions, such as the cyclic prefix and pilots.
The value of No is computed according to the following expression
\[N_o = \left(\frac{E_b}{N_o} \frac{r M}{E_s}\right)^{-1}\]where \(2^M\) is the constellation size, i.e., \(M\) is the average number of coded bits per constellation symbol, \(E_s=1\) is the average energy per constellation per symbol, \(r\in(0,1]\) is the coderate, \(E_b\) is the energy per information bit, and \(N_o\) is the noise power spectral density. For OFDM transmissions, \(E_s\) is scaled according to the ratio between the total number of resource elements in a resource grid with non-zero energy and the number of resource elements used for data transmission. Also the additionally transmitted energy during the cyclic prefix is taken into account, as well as the number of transmitted streams per transmitter.
- Parameters:
ebno_db (float | torch.Tensor) – Eb/No value in dB.
num_bits_per_symbol (int) – Number of bits per symbol.
coderate (float) – Coderate.
resource_grid (Any | None) – An optional resource grid for OFDM transmissions.
precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None,
precisionis used.device (str | None) – Device for computation. If None,
deviceis used.
- Outputs:
no – Value of \(N_o\) in linear scale.
Examples
import torch from sionna.phy.utils import ebnodb2no no = ebnodb2no(ebno_db=10.0, num_bits_per_symbol=4, coderate=0.5) print(no.item())