pccc 0.4.0

Parallel-concatenated convolutional code
Documentation

pccc

This package implements encoding and decoding functionality for a parallel-concatenated convolutional code (PCCC), commonly referred to as a turbo code. An instance of such a code is used for forward error correction in the 4G LTE standard for wireless broadband communication (see 3GPP TS 36.212).

The package comprises a library crate and a binary crate. Refer to the API documentation for details on the former (including illustrative examples), and read on for more on the latter.

Binary crate usage

The included binary crate can be used to run a Monte Carlo simulation that evaluates the error rate performance over a BPSK-AWGN channel of the rate-1/3 PCCC used in LTE. The parameters for such a simulation are specified on the command line, and the results from it are saved to a JSON file.

Execute cargo run -- -h for help on the command-line interface.

$ cargo run -- -h
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.05s
     Running `target/debug/pccc -h`
Evaluates the performance of the rate-1/3 LTE PCCC over a BPSK-AWGN channel

Usage: pccc [OPTIONS]

Options:
  -i <num_info_bits_per_block>      Number of information bits per block [default: 40]
  -a <decoding_algo_name>           Decoding algorithm name [default: LogMAP] [possible values: LogMAP, MaxLogMAP, LinearLogMAP]
  -t <num_turbo_iter>               Number of turbo iterations [default: 8]
  -r <first_snr_db>                 First Es/N0 (dB) [default: -5.0]
  -p <snr_step_db>                  Es/N0 step (dB) [default: 1.0]
  -s <num_snr>                      Number of Es/N0 values [default: 4]
  -e <num_block_errors_min>         Desired minimum number of block errors [default: 500]
  -b <num_blocks_per_run>           Number of blocks to be transmitted per run [default: 1000]
  -n <num_runs_min>                 Minimum number of runs of blocks to be simulated [default: 10]
  -x <num_runs_max>                 Maximum number of runs of blocks to be simulated [default: 100]
  -f <json_filename>                Name of JSON file to which results must be saved [default: results.json]
  -h, --help                        Print help
  -V, --version                     Print version

Execute cargo run --release -- [OPTIONS] to run a simulation (in release mode) with desired parameters. For example, the following command evaluates the bit error rate (BER) and block error rate (BLER) of the LTE PCCC for a block size of 1536 bits, with Log-MAP decoding and 8 turbo iterations. The signal-to-noise ratio (Es/N0) ranges from -5 dB to -4 dB in 0.1 dB steps. Results are saved to a file named results1536.json. (Some parameters are left at their default values.)

cargo run --release -- -i 1536 -a LogMAP -t 8 -r -5.0 -p 0.1 -s 11 -f results1536.json

For reference, the BER and BLER from a simulation with the above parameters are tabulated below:

Es/N0 (dB) BER BLER
-5.0 1.09e-1 9.65e-1
-4.9 8.79e-2 9.00e-1
-4.8 6.54e-2 7.86e-1
-4.7 4.27e-2 6.12e-1
-4.6 2.48e-2 4.15e-1
-4.5 1.20e-2 2.44e-1
-4.4 4.97e-3 1.15e-1
-4.3 1.67e-3 4.23e-2
-4.2 5.05e-4 1.55e-2
-4.1 1.31e-4 4.39e-3
-4.0 2.78e-5 1.06e-3

License: MIT