free5GRAN  V1.0
free5GRAN::phy::transport_channel Namespace Reference

Functions

int compute_N_polar_code (int E, int K, int nmax)
 
void rate_recover (int *input_bits, int *output_bits, int i_bil, int E, int N, int K)
 
void polar_decode (int *input_bits, int *output_bits, int N, int K, int nmax, int i_il, int n_pc, int n_wm_pc, int E)
 
void crc_validate (int *input_bits, int *crc_polynom, int *remainder, int length_input, int length_crc)
 
void compute_crc (int *input_bits, int *crc_polynom, int *remainder, int length_input, int length_crc)
 
void compute_ldpc_base_graph (int A, float R, int &graph)
 
void compute_transport_block_size (int n_re, float R, int mod_order, int num_layers, int nrb, int &tbs)
 
void compute_Zc_dl_sch (int kb, float k_p, int &Zc, int &i_ls)
 
void compute_code_block_segmentation_info_ldpc (int graph, int B, int &Zc, int &K, int &i_ls, int &L, int &C, int &N, int &K_p)
 
void rate_recover_ldpc (int *input_bits, int N, int i_lbrm, int E, int id_rv, int mod_order, int C, int Zc, int graph, int K, int K_p, int *output_sequence)
 
void rate_recover_ldpc (double *input_bits, int N, int i_lbrm, int E, int id_rv, int mod_order, int C, int Zc, int graph, int K, int K_p, double *output_sequence)
 
void compute_circular_permutation_matrix (int size, int offset, int **matrix)
 
void ldpc_decode_one_bit (vector< vector< int >> R, double *soft_bits, int i, double &new_bit)
 
void compute_H_matrix_ldpc (int Zc, int graph, int i_ls, vector< vector< int >> &matrix, int &size_i, int &size_j)
 
void ldpc_decode (double *input_bits, int N, int Zc, int graph, int K, int i_ls, int *output_sequence)
 
void decode_bch (int *bch_bits, bool &crc_validated, int *mib_bits, int pci)
 
void decode_dci (int *dci_bits, int E, int K, int *rnti, bool &validated, int *decoded_dci_bits)
 
vector< int > decode_dl_sch (double *dl_sch_bits, int n_re, float R, int nrb, int E, bool &validated, free5GRAN::dci_1_0_si_rnti dci_1_0_si_rnti)
 

Function Documentation

◆ compute_circular_permutation_matrix()

void free5GRAN::phy::transport_channel::compute_circular_permutation_matrix ( int  size,
int  offset,
int **  matrix 
)

Compute offset times right shifted identity matrix of size n

Parameters
[in]sizeIdentity matrix size
[in]offsetNumber of times to shift matrix
[out]matrixOutput matrix

Definition at line 718 of file transport_channel.cpp.

◆ compute_code_block_segmentation_info_ldpc()

void free5GRAN::phy::transport_channel::compute_code_block_segmentation_info_ldpc ( int  graph,
int  B,
int &  Zc,
int &  K,
int &  i_ls,
int &  L,
int &  C,
int &  N,
int &  K_p 
)

Compute code block segmentation informations for LDPC

3GPP standard: TS 38.212 V15.2.0 Section 5.2.2

Parameters
[in]graphLDPC base graph
[in]BCode block segmentation input size (inlcuding CRC)
[out]ZcReturned LDPC lifting size
[out]KCode block segmentation output size
[out]i_lsZc set index
[out]LCode block CRC length
[out]CNumber of code blocks
[out]NLDPC output sequence
[out]K_pK' intermediate K value

Definition at line 545 of file transport_channel.cpp.

◆ compute_crc()

void free5GRAN::phy::transport_channel::compute_crc ( int *  input_bits,
int *  crc_polynom,
int *  remainder,
int  length_input,
int  length_crc 
)

CRC computation

Compute the CRC for a given input and polynom

Parameters
[in]input_bitsInput bits sequence
[in]crc_polynomPolynom used for CRC computation
[out]remainderOutput CRC
[in]length_inputInput size
[in]length_crcPolynom size

Definition at line 392 of file transport_channel.cpp.

◆ compute_H_matrix_ldpc()

void free5GRAN::phy::transport_channel::compute_H_matrix_ldpc ( int  Zc,
int  graph,
int  i_ls,
vector< vector< int >> &  matrix,
int &  size_i,
int &  size_j 
)

Compute Hbg matrix for LDPC

3GPP standard: TS 38.212 V15.2.0 Section 5.3.2

Parameters
[in]ZcLDPC lifting size
[in]graphLDPC base graph
[in]i_lsZc set index
[out]matrixH matrix
[out]size_iH matrix number of rows
[out]size_iH matrix number of columns

Definition at line 786 of file transport_channel.cpp.

◆ compute_ldpc_base_graph()

void free5GRAN::phy::transport_channel::compute_ldpc_base_graph ( int  A,
float  R,
int &  graph 
)

Choose LDPC base graph

3GPP standard: TS 38.212 V15.2.0 Section 7.2.2

Parameters
[in]ATransport block size
[in]RCode rate
[out]graphOutput graph

Definition at line 471 of file transport_channel.cpp.

◆ compute_N_polar_code()

int free5GRAN::phy::transport_channel::compute_N_polar_code ( int  E,
int  K,
int  nmax 
)

Compute polar coding out sequence size

3GPP standard: TS 38.212 V15.2.0 Section 5.3.1

Parameters
[in]ERate matching output sequence length
[in]KPolar coding input sequence length (including CRC)
[in]nmaxMaximum value of n
Returns
Polar coding out sequence size

Definition at line 41 of file transport_channel.cpp.

◆ compute_transport_block_size()

void free5GRAN::phy::transport_channel::compute_transport_block_size ( int  n_re,
float  R,
int  mod_order,
int  num_layers,
int  nrb,
int &  tbs 
)

Transport block size computation

3GPP standard: TS 38.214 V15.2.0 Section 5.1.3.2

Partial implementation: n_info > 3824 not implemented

Parameters
[in]n_reNumber of PDSCH RE per RB
[in]RCode rate
[in]mod_orderModulation order
[in]num_layersNumber of transport layers
[in]nrbNumber of RB in PDSCH allocation
[out]tbsTransport block size

Definition at line 488 of file transport_channel.cpp.

◆ compute_Zc_dl_sch()

void free5GRAN::phy::transport_channel::compute_Zc_dl_sch ( int  kb,
float  k_p,
int &  Zc,
int &  i_ls 
)

Compute LDPC lifting size for DL-SCH encoding/decoding

3GPP standard: TS 38.212 V15.2.0 Section 5.2.2

Parameters
[in]kbIntermediate value for Zc computation
[in]k_pK' value
[out]ZcReturned value
[out]i_lsZc set index

Definition at line 523 of file transport_channel.cpp.

◆ crc_validate()

void free5GRAN::phy::transport_channel::crc_validate ( int *  input_bits,
int *  crc_polynom,
int *  remainder,
int  length_input,
int  length_crc 
)

CRC validation

Computes the remainder of the division of the input sequence by the polynom. If the remainder is equal to 0, CRC is validated

Parameters
[in]input_bitsInput bits sequence
[in]crc_polynomPolynom used for CRC computation
[out]remainderOutput remainder of the division
[in]length_inputInput size
[in]length_crcPolynom size

Definition at line 297 of file transport_channel.cpp.

◆ decode_bch()

void free5GRAN::phy::transport_channel::decode_bch ( int *  bch_bits,
bool &  crc_validated,
int *  mib_bits,
int  pci 
)

Decode broadcast channel

3GPP standard: TS 38.212 V15.2.0 Section 7.1

Details:

  • Rate recovering
  • Polar decoding
  • CRC validation
  • Scrambling
  • Payload de-interleaving
Parameters
[in]bch_bitsInput bits sequence
[out]crc_validatedIndicator for CRC validation
[out]mib_bitsOutput MIB bits
[in]pciCell PCI

Definition at line 936 of file transport_channel.cpp.

◆ decode_dci()

void free5GRAN::phy::transport_channel::decode_dci ( int *  dci_bits,
int  E,
int  K,
int *  rnti,
bool &  validated,
int *  decoded_dci_bits 
)

DCI decoding

3GPP standard: TS 38.212 V15.2.0 Section 7.3

Partial implementation: Only DCI Format 1_0 has been tested

Details:

  • Rate recovering
  • Polar decoding
  • RNTI scrambling
  • CRC validation
Parameters
[in]dci_bitsInput bits sequence
[in]EPDCCH payload size
[in]KDCI payload size (including CRC)
[in]rntiRNTI for identifying DCI Format
[out]validatedIndicator for CRC validation
[out]decoded_dci_bitsOutput bits sequence

Definition at line 1044 of file transport_channel.cpp.

◆ decode_dl_sch()

vector< int > free5GRAN::phy::transport_channel::decode_dl_sch ( double *  dl_sch_bits,
int  n_re,
float  R,
int  nrb,
int  E,
bool &  validated,
free5GRAN::dci_1_0_si_rnti  dci_1_0_si_rnti 
)

DL-SCH decoding

3GPP standard: TS 38.212 V15.2.0 Section 7.2

Partial implementation: Implemented for one code block (C=1)

Details:

  • Rate recovering
  • LDPC decoding
  • CRC validation
Parameters
[in]dl_sch_bitsInput soft bits sequence
[in]n_reNumber of RE per PDSCH RB
[in]RCode Rate
[in]nrbNumber of PDSCH allocated RB
[in]EPDSCH output sequence length
[out]validatedCRC validation indicator
[in]dci_1_0_si_rntiInput DCI Format 1_0 object

Definition at line 1112 of file transport_channel.cpp.

◆ ldpc_decode()

void free5GRAN::phy::transport_channel::ldpc_decode ( double *  input_bits,
int  N,
int  Zc,
int  graph,
int  K,
int  i_ls,
int *  output_sequence 
)

Compute H matrix for LDPC using Belief propagation algorithm

3GPP standard: TS 38.212 V15.2.0 Section 5.3.2

Details:

  • Compute H matrix
  • Recover LDPC input bits from input sequence
  • Compute columns and row bit relations
  • Iterate 10 time:
  1. Try to correct each input bit value
  2. If H times corrected bits value equals 0, algorithm ends, otherwise it continues
Parameters
[in]input_bitsInput soft bits sequence
[in]NLDPC input bit sequence length
[in]ZcLDPC lifting size
[in]graphLDPC base graph
[in]KCode block length
[in]i_lsZc set index
[out]output_sequenceCorrected output bits sequence

Definition at line 821 of file transport_channel.cpp.

◆ ldpc_decode_one_bit()

void free5GRAN::phy::transport_channel::ldpc_decode_one_bit ( vector< vector< int >>  R,
double *  soft_bits,
int  i,
double &  new_bit 
)

LDPC correct one bit value (using belief propagation algorithm)

Parameters
[in]RInput set of rows connected to bit i
[in]soft_bitsInput soft bits
[in]iBit index
[out]new_bitNew bit value

Definition at line 735 of file transport_channel.cpp.

◆ polar_decode()

void free5GRAN::phy::transport_channel::polar_decode ( int *  input_bits,
int *  output_bits,
int  N,
int  K,
int  nmax,
int  i_il,
int  n_pc,
int  n_wm_pc,
int  E 
)

Polar decoding

3GPP standard: TS 38.212 V15.2.0 Section 5.3.1

Partial implementation: Only n_wm_pc=0 is implemented

Details:

  • Polar decoding using Gn inverse matrix
  • Computing required sets
  • Recover c'
  • De-interleave c' to recover output
Parameters
[in]input_bitsInput bits sequence
[out]output_bitsOutput bits sequence
[in]NRate matching input sequence length
[in]KPolar coding input sequence length (including CRC)
[in]nmaxMaximum value of n
[in]i_ilInterleaving indicator (0: No interleaving, 1: Interleaving)
[in]n_pcNumber of parity check bits
[in]n_wm_pcNumber of other parity check bits

Definition at line 125 of file transport_channel.cpp.

◆ rate_recover()

void free5GRAN::phy::transport_channel::rate_recover ( int *  input_bits,
int *  output_bits,
int  i_bil,
int  E,
int  N,
int  K 
)

Rate recovering for polar coding.

3GPP standard: TS 38.212 V15.2.0 Section 5.4.1

Partial implementation: Code block de-interleaving not implemented

Parameters
[in]input_bitsInput bits sequence
[out]output_bitsOutput bits sequence
[in]i_bilCoded blocks interleaving indicator (0: No interleaving, 1: Interleaving)
[in]ERate matching output sequence length
[in]NRate matching input sequence length

Definition at line 74 of file transport_channel.cpp.

◆ rate_recover_ldpc() [1/2]

void free5GRAN::phy::transport_channel::rate_recover_ldpc ( int *  input_bits,
int  N,
int  i_lbrm,
int  E,
int  id_rv,
int  mod_order,
int  C,
int  Zc,
int  graph,
int  K,
int  K_p,
int *  output_sequence 
)

Rate recovering for LDPC (hard bits)

3GPP standard: TS 38.212 V15.2.0 Section 5.4.2

Parameters
[in]input_bitsDL-SCH input bits
[in]NOutput sequence length
[in]i_lbrmIndicator for N_cb computation
[in]EDL-SCH input sequence length
[in]id_rvRedundancy version
[in]mod_orderModulation order
[in]CNumber of code blocks
[in]ZcLDPC lifting size
[in]graphLDPC base graph
[in]KCode block length
[in]K_pK' code block intermediate length
[out]output_sequenceOutput bits

Definition at line 592 of file transport_channel.cpp.

◆ rate_recover_ldpc() [2/2]

void free5GRAN::phy::transport_channel::rate_recover_ldpc ( double *  input_bits,
int  N,
int  i_lbrm,
int  E,
int  id_rv,
int  mod_order,
int  C,
int  Zc,
int  graph,
int  K,
int  K_p,
double *  output_sequence 
)

Rate recovering for LDPC (soft bits)

3GPP standard: TS 38.212 V15.2.0 Section 5.4.2

Parameters
[in]input_bitsDL-SCH input soft bits
[in]NOutput sequence length
[in]i_lbrmIndicator for N_cb computation
[in]EDL-SCH input sequence length
[in]id_rvRedundancy version
[in]mod_orderModulation order
[in]CNumber of code blocks
[in]ZcLDPC lifting size
[in]graphLDPC base graph
[in]KCode block length
[in]K_pK' code block intermediate length
[out]output_sequenceOutput soft bits

Definition at line 653 of file transport_channel.cpp.