IT++ Logo
Public Member Functions | Protected Member Functions | Protected Attributes | Static Protected Attributes | List of all members
itpp::BLDPC_Parity Class Reference

Block LDPC code parity-check matrix. More...

#include <itpp/comm/ldpc.h>

Inheritance diagram for itpp::BLDPC_Parity:
itpp::LDPC_Parity

Public Member Functions

 BLDPC_Parity ()
 Default constructor. More...
 
 BLDPC_Parity (const imat &base_matrix, int exp_factor)
 Construct BLDPC matrix from base matrix. More...
 
 BLDPC_Parity (const std::string &filename, int exp_factor)
 Construct BLDPC matrix parsing base matrix from a text file. More...
 
void expand_base (const imat &base_matrix, int exp_factor)
 Create BLDPC matrix from base matrix by expansion. More...
 
int get_exp_factor () const
 Get expansion factor. More...
 
imat get_base_matrix () const
 Get base matrix. More...
 
bool is_valid () const
 Verify initialisation. More...
 
void set_exp_factor (int exp_factor)
 Set expansion factor. More...
 
void load_base_matrix (const std::string &filename)
 Load base matrix from a text file. More...
 
void save_base_matrix (const std::string &filename) const
 Save base matrix to a text file. More...
 
void initialize (int ncheck, int nvar)
 Initialize an empty matrix of size ncheck x nvar. More...
 
GF2mat_sparse get_H (bool transpose=false) const
 Get the parity check matrix, optionally its transposed form. More...
 
Sparse_Vec< binget_col (int c) const
 Get a specific column from the matrix. More...
 
Sparse_Vec< binget_row (int r) const
 Get a specific row from the matrix. More...
 
int get_nvar () const
 Get the number of variable nodes (number of columns) More...
 
int get_ncheck () const
 Get the number of check nodes (number of rows) More...
 
void set (int i, int j, bin value)
 Set element (i,j) of the parity check matrix to value. More...
 
bin get (int i, int j) const
 Get element (i,j) of the parity check matrix. More...
 
bin operator() (int i, int j) const
 Get element (i,j) of the parity check matrix. More...
 
virtual void display_stats () const
 Display some information about the matrix. More...
 
double get_rate () const
 Get the code rate. More...
 
void import_alist (const GF2mat_sparse_alist &H_alist)
 Import matrix from GF2mat_sparse_alist format. More...
 
GF2mat_sparse_alist export_alist () const
 Export matrix to GF2mat_sparse_alist format. More...
 
void load_alist (const std::string &alist_file)
 Load matrix from alist_file text file in alist format. More...
 
void save_alist (const std::string &alist_file) const
 Save matrix to alist_file text file in alist format. More...
 

Protected Member Functions

int check_for_cycles (int L) const
 Check for cycles of length L. More...
 
int check_connectivity (int from_m, int from_n, int to_m, int to_n, int g, int L) const
 Check for connectivity between nodes. More...
 

Protected Attributes

bool init_flag
 Flag that indicates proper initialization. More...
 
GF2mat_sparse H
 The parity check matrix. More...
 
GF2mat_sparse Ht
 The transposed parity check matrix. More...
 
int nvar
 Number of variable nodes. More...
 
int ncheck
 Number of check nodes. More...
 
ivec sumX1
 Actual number of ones in each column. More...
 
ivec sumX2
 Actual number of ones in each row. More...
 

Static Protected Attributes

static const int Nmax = 200
 Maximum node degree class can handle. More...
 

Detailed Description

Block LDPC code parity-check matrix.

Author
Adam Piatyszek

Block LDPC Codes (B-LDPC) are a special class of Quasi-Cyclic LDPC Codes (QC-LDPC). Linear encoding properties and memory efficiency are their main advantages.

B-LDPC codes' parity-check matrix is constructed from so-called base matrix by expansion of each single value with a zero matrix or cyclic-shifted identity matrix of size Z x Z, where Z is an expansion factor. Each non negative value of the base matrix represents the cyclic shift value, e.g. 0 means that the identity matrix should not be shifted; 6 means than the identity matrix should be circularly right-shifted by (6 mod Z). Negative values (usually -1) represents zero matrix of size Z x Z.

Please refer to [MYK05] for more details.

References:

[MYK05] S. Myung, K. Yang, J. Kim, "Quasi-Cyclic LDPC Codes for Fast Encoding", IEEE Trans. on Inform. Theory, vol. 51, no. 8, August 2005

Definition at line 461 of file ldpc.h.

Constructor & Destructor Documentation

◆ BLDPC_Parity() [1/3]

itpp::BLDPC_Parity::BLDPC_Parity ( )
inline

Default constructor.

Definition at line 465 of file ldpc.h.

◆ BLDPC_Parity() [2/3]

itpp::BLDPC_Parity::BLDPC_Parity ( const imat &  base_matrix,
int  exp_factor 
)

Construct BLDPC matrix from base matrix.

Definition at line 723 of file ldpc.cpp.

References expand_base().

◆ BLDPC_Parity() [3/3]

itpp::BLDPC_Parity::BLDPC_Parity ( const std::string &  filename,
int  exp_factor 
)

Construct BLDPC matrix parsing base matrix from a text file.

Definition at line 728 of file ldpc.cpp.

References expand_base(), and load_base_matrix().

Member Function Documentation

◆ expand_base()

void itpp::BLDPC_Parity::expand_base ( const imat &  base_matrix,
int  exp_factor 
)

Create BLDPC matrix from base matrix by expansion.

Definition at line 734 of file ldpc.cpp.

References itpp::LDPC_Parity::initialize(), and itpp::LDPC_Parity::set().

Referenced by BLDPC_Parity(), and set_exp_factor().

◆ get_exp_factor()

int itpp::BLDPC_Parity::get_exp_factor ( ) const

Get expansion factor.

Definition at line 762 of file ldpc.cpp.

Referenced by itpp::BLDPC_Generator::construct().

◆ get_base_matrix()

imat itpp::BLDPC_Parity::get_base_matrix ( ) const

Get base matrix.

Definition at line 767 of file ldpc.cpp.

◆ is_valid()

bool itpp::BLDPC_Parity::is_valid ( ) const
inline

Verify initialisation.

Definition at line 483 of file ldpc.h.

Referenced by itpp::BLDPC_Generator::construct().

◆ set_exp_factor()

void itpp::BLDPC_Parity::set_exp_factor ( int  exp_factor)

Set expansion factor.

Definition at line 772 of file ldpc.cpp.

References expand_base().

◆ load_base_matrix()

void itpp::BLDPC_Parity::load_base_matrix ( const std::string &  filename)

Load base matrix from a text file.

Definition at line 784 of file ldpc.cpp.

References itpp::concat(), itpp::LDPC_Parity::init_flag, it_assert, and it_warning.

Referenced by BLDPC_Parity().

◆ save_base_matrix()

void itpp::BLDPC_Parity::save_base_matrix ( const std::string &  filename) const

Save base matrix to a text file.

Definition at line 821 of file ldpc.cpp.

References it_assert.

◆ initialize()

void itpp::LDPC_Parity::initialize ( int  ncheck,
int  nvar 
)
inherited

◆ get_H()

GF2mat_sparse itpp::LDPC_Parity::get_H ( bool  transpose = false) const
inlineinherited

Get the parity check matrix, optionally its transposed form.

Definition at line 104 of file ldpc.h.

References itpp::transpose().

Referenced by itpp::BLDPC_Generator::construct(), and itpp::LDPC_Generator_Systematic::construct().

◆ get_col()

Sparse_Vec< bin > itpp::LDPC_Parity::get_col ( int  c) const
inlineinherited

◆ get_row()

Sparse_Vec< bin > itpp::LDPC_Parity::get_row ( int  r) const
inlineinherited

Get a specific row from the matrix.

Definition at line 112 of file ldpc.h.

Referenced by itpp::LDPC_Parity::check_connectivity(), itpp::LDPC_Code::decoder_parameterization(), and itpp::LDPC_Parity::display_stats().

◆ get_nvar()

int itpp::LDPC_Parity::get_nvar ( ) const
inlineinherited

Get the number of variable nodes (number of columns)

Definition at line 115 of file ldpc.h.

References it_assert_debug.

Referenced by itpp::LDPC_Generator_Systematic::construct().

◆ get_ncheck()

int itpp::LDPC_Parity::get_ncheck ( ) const
inlineinherited

Get the number of check nodes (number of rows)

Definition at line 124 of file ldpc.h.

References it_assert_debug.

Referenced by itpp::LDPC_Generator_Systematic::construct().

◆ set()

void itpp::LDPC_Parity::set ( int  i,
int  j,
bin  value 
)
inherited

◆ get()

bin itpp::LDPC_Parity::get ( int  i,
int  j 
) const
inlineinherited

Get element (i,j) of the parity check matrix.

Definition at line 136 of file ldpc.h.

References it_assert_debug.

Referenced by itpp::LDPC_Parity::check_connectivity(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), and itpp::LDPC_Parity_Unstructured::generate_random_H().

◆ operator()()

bin itpp::LDPC_Parity::operator() ( int  i,
int  j 
) const
inlineinherited

Get element (i,j) of the parity check matrix.

Definition at line 142 of file ldpc.h.

References it_assert_debug.

◆ display_stats()

void itpp::LDPC_Parity::display_stats ( ) const
virtualinherited

◆ get_rate()

double itpp::LDPC_Parity::get_rate ( void  ) const
inlineinherited

Get the code rate.

Definition at line 152 of file ldpc.h.

Referenced by itpp::LDPC_Parity::display_stats().

◆ import_alist()

void itpp::LDPC_Parity::import_alist ( const GF2mat_sparse_alist H_alist)
inherited

◆ export_alist()

GF2mat_sparse_alist itpp::LDPC_Parity::export_alist ( ) const
inherited

◆ load_alist()

void itpp::LDPC_Parity::load_alist ( const std::string &  alist_file)
inherited

Load matrix from alist_file text file in alist format.

Definition at line 155 of file ldpc.cpp.

References itpp::LDPC_Parity::import_alist().

Referenced by itpp::LDPC_Parity::LDPC_Parity().

◆ save_alist()

void itpp::LDPC_Parity::save_alist ( const std::string &  alist_file) const
inherited

Save matrix to alist_file text file in alist format.

Definition at line 160 of file ldpc.cpp.

References itpp::LDPC_Parity::export_alist(), and itpp::GF2mat_sparse_alist::write().

◆ check_for_cycles()

int itpp::LDPC_Parity::check_for_cycles ( int  L) const
protectedinherited

Check for cycles of length L.

This function implements a recursive routine to find loops. The function is mainly a tool for testing and debugging more sophisticated functions for graph manipulation.

Parameters
Llength of cycles to look for
Returns
The function returns the number of cycles found of length L or shorter. Cycles may be counted multiple times.
Note
This function can be very slow for large matrices. It is mainly intended as a debugging aid.

Definition at line 249 of file ldpc.cpp.

References itpp::LDPC_Parity::check_connectivity(), itpp::LDPC_Parity::get_col(), itpp::Sparse_Vec< T >::get_nz_indices(), itpp::LDPC_Parity::init_flag, it_assert, itpp::length(), and itpp::LDPC_Parity::nvar.

◆ check_connectivity()

int itpp::LDPC_Parity::check_connectivity ( int  from_m,
int  from_n,
int  to_m,
int  to_n,
int  g,
int  L 
) const
protectedinherited

Check for connectivity between nodes.

This function examines whether the point (to_m, to_n) in the matrix can be reached from the point (from_m, from_n) using at most L steps. A recursive search is used.

The function can be used to search for cycles in the matrix. To search for a cycle of length L, set from_m=to_m and from_n=to_n, and godir=0.

Parameters
from_mstarting coordinate, row number
to_mgoal coordinate, row number
from_nstarting coordinate, column number
to_ngoal coordinate, row number
gdirection: 1=start going vertically, 2=start going horizontally
Lnumber of permitted steps
Returns
  • -1 or -3 : destination unreachable
  • -2 : meaningless search (started in a "0" point),
  • -4 : meaningless search
  • >=0 : destination reached with certain number of steps left
Note
This function can be very slow depending on the nature of the matrix.

Note that smaller cycles may appear as longer cycles when using this method. More specifically, suppose the method is run with a given L and there are cycles in the neighborhood of (from_m,from_n) of length L-2 or less, but which do not contain (from_m,from_n). These shorter cycles may then also be reported as a cycle of length L. For example, if one of the immediate neighbors of (from_m,from_n) is part of a cycle of length 4 this method will report that (from_m,from_n) is part of a cycle of length 6, if run with L=6. However, if it is known that there are no cycles of length L-2 or smaller, and check_connectivity(from_m,from_n,from_m,from_n,0,L) returns a non-negative value, then one will know with certainty that the point (from_m,from_n) is part of a cycle of length L. (This behavior is inherent to the simple recursive search used.)

Definition at line 192 of file ldpc.cpp.

References itpp::LDPC_Parity::check_connectivity(), itpp::LDPC_Parity::get(), itpp::LDPC_Parity::get_col(), itpp::Sparse_Vec< T >::get_nz_indices(), itpp::LDPC_Parity::get_row(), itpp::LDPC_Parity::init_flag, it_assert, and itpp::length().

Referenced by itpp::LDPC_Parity::check_connectivity(), itpp::LDPC_Parity::check_for_cycles(), and itpp::LDPC_Parity_Unstructured::generate_random_H().

Member Data Documentation

◆ init_flag

bool itpp::LDPC_Parity::init_flag
protectedinherited

◆ Nmax

const int itpp::LDPC_Parity::Nmax = 200
staticprotectedinherited

Maximum node degree class can handle.

Definition at line 172 of file ldpc.h.

Referenced by itpp::LDPC_Parity_Unstructured::compute_CR(), and itpp::LDPC_Parity_Unstructured::generate_random_H().

◆ H

GF2mat_sparse itpp::LDPC_Parity::H
protectedinherited

The parity check matrix.

Definition at line 174 of file ldpc.h.

Referenced by itpp::LDPC_Parity::export_alist(), itpp::LDPC_Parity::initialize(), and itpp::LDPC_Parity::set().

◆ Ht

GF2mat_sparse itpp::LDPC_Parity::Ht
protectedinherited

The transposed parity check matrix.

Definition at line 176 of file ldpc.h.

Referenced by itpp::LDPC_Parity::initialize(), and itpp::LDPC_Parity::set().

◆ nvar

int itpp::LDPC_Parity::nvar
protectedinherited

◆ ncheck

int itpp::LDPC_Parity::ncheck
protectedinherited

◆ sumX1

ivec itpp::LDPC_Parity::sumX1
protectedinherited

Actual number of ones in each column.

Definition at line 182 of file ldpc.h.

Referenced by itpp::LDPC_Code::decoder_parameterization(), itpp::LDPC_Parity::display_stats(), itpp::LDPC_Parity::initialize(), and itpp::LDPC_Parity::set().

◆ sumX2

ivec itpp::LDPC_Parity::sumX2
protectedinherited

The documentation for this class was generated from the following files:

Generated on Tue Aug 17 2021 10:59:15 for IT++ by Doxygen 1.9.4