A package for Polar codes simulation.
pip install python-polar-coding
Here is a simple example of simulation using python_polar_coding
.
Binary messages encoded with Polar code, modulated using BPSK, transmitted over channel with AWGN and decoded using Fast SSC algorithm.
from python_polar_coding.channels import SimpleBPSKModulationAWGN
from python_polar_coding.polar_codes import FastSSCPolarCodec
from python_polar_coding.simulation.functions import (
compute_fails,
generate_binary_message,
)
N = 128
K = 64
design_snr = 0.0
messages = 1000
# SNR in [.0, .5, ..., 4.5, 5]
snr_range = [i / 2 for i in range(11)]
codec = FastSSCPolarCodec(N=N, K=K, design_snr=design_snr)
bpsk = SimpleBPSKModulationAWGN(fec_rate=K/N)
result_ber = dict()
result_fer = dict()
print('Python polar coding simulation')
print(f'Simulating ({codec.N}, {codec.K}) systematic polar code with Design SNR {codec.design_snr} dB')
print()
print('\tSNR (dB)|\tBER\t|\tFER')
for snr in snr_range:
ber = 0
fer = 0
for _ in range(messages):
msg = generate_binary_message(size=K)
encoded = codec.encode(msg)
transmitted = bpsk.transmit(message=encoded, snr_db=snr)
decoded = codec.decode(transmitted)
bit_errors, frame_error = compute_fails(msg, decoded)
ber += bit_errors
fer += frame_error
result_ber[snr] = ber / (messages * codec.K)
result_fer[snr] = fer / messages
print(f'\t{snr}\t|\t{result_ber[snr]:.4f}\t|\t{result_fer[snr]:.4f}')
- Arikan's Bhattacharyya bounds Section V.A
- BPSK
- Arikan’s Monte-Carlo estimation Section V.B
- Trifonov’s Gaussian approximation Section V.D
- SC STACK Decoding
- Fast SSC List Decoding
- Generalized Fast SSC LIST Decoding
- CRC-aided decoders
- Q-PSK
- 4-QAM