5.1. C++ and MATLAB Software Models
The C++ and MATLAB models represent the functionality of the 5G LDPC IP and can generate BLER vs. SNR graphs for different parameterizations.
The models allow you to:
- Optimize the network performance.
- Shorten the time to determine the channel coding parameters for 5G LDPC such as the base graph, the lifting size, and the code rate.
- Tune the network for better throughput by allowing estimation of the maximum number of iterations needed to decode the majority of codewords under certain channel conditions.
Block Diagram of a Wireless Communication System Emulated with the 5G LDPC IP Software Models
Decoder C++ Model
The file is: LdpcDecoder_fxp.cpp.
Function signature:
int LdpcDecoder_fxp (
// Outputs
vector<int> &BitErrors, // comparison result of input: data vs output: DecodedBits
vector<int> &DecodedBits, // decoded bits
int &DecodedIters, // number of iterations used to decoded
int &et_pass, // 1: early terminated
// Inputs
vector<int> &input, // LLRs
int ExpFactor, // Z (lifting factor): 2,3,4,5,...,320,352,384
int max_iter, // number of iterations allowed
vector<int> &data, // expected data, to be used to compare with DecodedBits
int BaseGraph, // 0: BG#1, 1: BG#2
int CodeRate, // BG#1: 1: 1/3, 2: 2/5, 3: 1/2, 4: 2/3, 5: 3/4, 6: 5/6, 7: 8/9
// BG#2: 0: 1/5, 1: 1/3, 2: 2/5, 3: 1/2, 4: 2/3
int in_width = 6, // bit width of input LLRs (2 of that are fractional bits)
int llr_eq_0_as_negative = 0,// 3: treat LLR == 0 as negative-signed at internal and output (hard decision)
// 2: treat LLR == 0 as negative-signed at internal
// 1: treat LLR == 0 as negative-signed at output (hard decision)
// 0: treat LLR == 0 as positive-signed
int et_dis = 0, // disable early termination
int skip_deg1 = 0 // syndrome check: 0: all layers, 1: first 4 layers only
)
Note:
- BitErrors
- size = max_iter
- each element is the number of error comparing input data vs output DecodedBits after each iteration, e.g. BitErrors[1] is the number of errors after iteration 1
- DecodedBits
- size = max_iter * message length
- DecodedBits[iter + i * max_iter] is the decoded bits after iteration iter at bit position i, e.g. DecodedBits[DecodedIters + i * max_iter] is the final decoded bits at bit position i
Encoder C++ Model
The file is: LdpcEncoder.c
Function signature:
void LdpcEncoder (
// Inputs
int z, // Lifting factor: 2,3,4,5,...,320,352,384
int base_graph, // 0: BG#1, 1: BG#2
int code_rate, // BG#1: 1: 1/3, 2: 2/5, 3: 1/2, 4: 2/3, 5: 3/4, 6: 5/6, 7: 8/9
// BG#2: 0: 1/5, 1: 1/3, 2: 2/5, 3: 1/2, 4: 2/3
int kb, // BG#1: 22, BG#2: 10, 9, 8, 6
int *msg, // msg array, each element is a symbol (0 or 1) in message
// Outputs
int *cw,// codeword array, each element is a symbol (0 or 1) in codeword
int *cw_size // no. of valid elements in cw_int[]
);