diff --git a/sw/main.py b/sw/main.py index a371c75..52ef0f5 100644 --- a/sw/main.py +++ b/sw/main.py @@ -21,30 +21,44 @@ def main(): [0, 1, 1, 0, 0, 1, 1], [0, 0, 0, 1, 1, 1, 1]]) + # Define encoder and decoders + encoder = channel.Encoder(G) - proximal_decoder = proximal.ProximalDecoder(H, K=100, gamma=0.01) - soft_decision_decoder = naive_soft_decision.SoftDecisionDecoder(G, H) + decoders = {"naive_soft_decision": naive_soft_decision.SoftDecisionDecoder(G, H), + # "proximal": proximal.ProximalDecoder(H, K=100, gamma=0.01), + } - # Test decoder + # Test decoders k, n = G.shape d = np.zeros(k) # All-zeros assumption - SNRs_sd, BERs_sd = utility.test_decoder(encoder=encoder, - decoder=soft_decision_decoder, - d=d, - SNRs=np.linspace(1, 7, 9), - target_bit_errors=500) + SNRs = np.linspace(1, 7, 9) + data = pd.DataFrame({"SNR": SNRs}) - data = pd.DataFrame({"SNR": SNRs_sd, "BER_sd": BERs_sd}) + for decoder_name in decoders: + decoder = decoders[decoder_name] + _, BERs_sd = utility.test_decoder(encoder=encoder, + decoder=decoder, + d=d, + SNRs=SNRs) + + data[f"BER_{decoder_name}"] = BERs_sd # Plot results - ax = sns.lineplot(data=data, x="SNR", y="BER_sd") + fig, axes = plt.subplots(1, 1) + fig.suptitle("Bit-Error-Rates of various decoders") + + for decoder_name in decoders: + ax = sns.lineplot(data=data, x="SNR", y=f"BER_{decoder_name}", label=f"{decoder_name}") + + ax.set_title("Hamming(7,4) Code") ax.set(yscale="log") ax.set_yticks([10e-5, 10e-4, 10e-3, 10e-2, 10e-1, 10e0]) - # ax.set_ylim([10e-6, 10e0]) + ax.legend() + plt.show()