k =4# meesage bitsn =7# codeword bitsR = k/nNblocks =100000
3.1. Hard Decision
def get_BER(EbNodB): EbNo =10**(EbNodB/10) sigma = (1/(2* EbNo))**0.5 Nerrs =0for i inrange(Nblocks): msg = messages[np.random.randint(0, 16)] cword = G.T @ msg %2 s =1-2* cword r = s + sigma * np.random.randn(n)# Hard decision b = (r <0).astype(int) Nerrs = Nerrs + np.sum(b != cword)return Nerrs / (Nblocks * n) / kget_BER(6)
0.0005839285714285714
import matplotlib.pyplot as pltEbNodB = np.arange(0, 10, 2)BER = [get_BER(x) for x in EbNodB]plt.semilogy(EbNodB, BER)plt.xlabel('Eb/No (dB)')plt.ylabel('BER')plt.ylim([1e-10, 1])plt.grid()plt.show()
import matplotlib.pyplot as pltEbNodB = np.arange(0, 10, 2)BER = [get_BER_soft(x) for x in EbNodB]plt.semilogy(EbNodB, BER)plt.xlabel('Eb/No (dB)')plt.ylabel('BER')plt.ylim([1e-10, 1])plt.grid()plt.show()