sdr.snr_to_ebn0(snr: ArrayLike, bps: ArrayLike, rate: ArrayLike = 1.0, sps: ArrayLike = 1) NDArray[float64]

Converts from \(S/N\) to \(E_b/N_0\).

\[ \frac{E_b}{N_0} = \frac{S}{N} \frac{f_s}{f_{sym}} \frac{n}{k} \frac{1}{\log_2 M} \]

Parameters:
snr: ArrayLike

Signal-to-noise ratio \(S/N\) in dB.

bps: ArrayLike

Coded bits per symbol \(\log_2 M\), where \(M\) is the modulation order.

rate: ArrayLike = 1.0

Code rate \(r = k/n\), where \(k\) is the number of information bits and \(n\) is the number of coded bits.

sps: ArrayLike = 1

Samples per symbol \(f_s / f_{sym}\).

Returns:

The bit energy \(E_b\) to noise PSD \(N_0\) ratio in dB.

Examples

Convert from \(S/N = 5\) dB to \(E_b/N_0\) for a 4-QAM signal with \(r = 2/3\) and 1 sample per symbol.

In [1]: sdr.snr_to_ebn0(5, 2, rate=2/3, sps=1)
Out[1]: 3.7506126339170005

Convert from \(S/N = 10\) dB to \(E_b/N_0\) for a 16-QAM signal with \(r = 1\) and 4 samples per symbol.

In [2]: sdr.snr_to_ebn0(10, 4, rate=1, sps=4)
Out[2]: 10.0