- sdr.shannon_limit_ebn0(rho: ArrayLike) NDArray[float64]
Calculates the Shannon limit on the bit energy-to-noise power spectral density ratio \(E_b/N_0\) in the AWGN channel.
- Parameters:¶
- rho: ArrayLike¶
The nominal spectral efficiency \(\rho\) of the modulation in bits/2D.
- Returns:¶
The Shannon limit on \(E_b/N_0\) in dB.
See also
Notes
\[C = \rho = \log_2\left(1 + \frac{S}{N}\right) = \log_2\left(1 + \rho\frac{E_b}{N_0}\right) \ \ \text{bits/2D}\]\[\frac{E_b}{N_0} = \frac{2^{\rho} - 1}{\rho}\]Examples
The absolute Shannon limit on power efficiency is -1.59 dB \(E_b/N_0\). This can only be achieved when the channel capacity approaches 0.
In [1]: sdr.shannon_limit_ebn0(0) Out[1]: -1.591745389548616
The Shannon limit for various FEC code rates is shown below. The modulation is assumed to be binary.
In [2]: rate = np.array([1/8, 1/4, 1/3, 1/2, 2/3, 3/4, 7/8]) # Code rate, n/k In [3]: rho = 2 * rate # bits/2D In [4]: sdr.shannon_limit_ebn0(rho) Out[4]: array([-1.21002545, -0.8174569 , -0.54974021, 0. , 0.56859734, 0.85986396, 1.30533298])
Plot the AWGN channel capacity as a function of \(E_b/N_0\).
In [5]: rho = np.logspace(-2, 1, 101) In [6]: ebn0 = sdr.shannon_limit_ebn0(rho) In [7]: plt.figure(); \ ...: plt.semilogy(ebn0, rho); \ ...: plt.xlabel("Bit energy-to-noise PSD ratio (dB), $E_b/N_0$"); \ ...: plt.ylabel("Capacity (bits/2D), $C$"); \ ...: plt.title("Capacity of the AWGN Channel"); ...: