Block LDPC code parity-check matrix. More...
|Default constructor. |
|BLDPC_Parity (const imat &base_matrix, int exp_factor)|
|Construct BLDPC matrix from base matrix. |
|BLDPC_Parity (const std::string &filename, int exp_factor)|
|Construct BLDPC matrix parsing base matrix from a text file. |
|void||expand_base (const imat &base_matrix, int exp_factor)|
|Create BLDPC matrix from base matrix by expansion. |
|int||get_exp_factor () const|
|Get expansion factor. |
|imat||get_base_matrix () const|
|Get base matrix. |
|bool||is_valid () const|
|Verify initialisation. |
|void||set_exp_factor (int exp_factor)|
|Set expansion factor. |
|void||load_base_matrix (const std::string &filename)|
|Load base matrix from a text file. |
|void||save_base_matrix (const std::string &filename) const|
|Save base matrix to a text file. |
|void||initialize (int ncheck, int nvar)|
|Initialize an empty matrix of size ncheck x nvar. |
|GF2mat_sparse||get_H (bool transpose=false) const|
|Get the parity check matrix, optionally its transposed form. |
|Sparse_Vec< bin >||get_col (int c) const|
|Get a specific column from the matrix. |
|Sparse_Vec< bin >||get_row (int r) const|
|Get a specific row from the matrix. |
|int||get_nvar () const|
|Get the number of variable nodes (number of columns) |
|int||get_ncheck () const|
|Get the number of check nodes (number of rows) |
|void||set (int i, int j, bin value)|
|Set element (i,j) of the parity check matrix to value. |
|bin||get (int i, int j) const|
|Get element (i,j) of the parity check matrix. |
|bin||operator() (int i, int j) const|
|Get element (i,j) of the parity check matrix. |
|virtual void||display_stats () const|
|Display some information about the matrix. |
|double||get_rate () const|
|Get the code rate. |
|void||import_alist (const GF2mat_sparse_alist &H_alist)|
|Import matrix from |
|GF2mat_sparse_alist||export_alist () const|
|Export matrix to |
|void||load_alist (const std::string &alist_file)|
|Load matrix from |
|void||save_alist (const std::string &alist_file) const|
|Save matrix to |
|int||check_for_cycles (int L) const|
|Check for cycles of length L. |
|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. |
|Flag that indicates proper initialization. |
|The parity check matrix. |
|The transposed parity check matrix. |
|Number of variable nodes. |
|Number of check nodes. |
|Actual number of ones in each column. |
|Actual number of ones in each row. |
|static const int||Nmax = 200|
|Maximum node degree class can handle. |
Block LDPC code parity-check matrix.
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.
[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
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.
|L||length of cycles to look for|
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 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.
|from_m||starting coordinate, row number|
|to_m||goal coordinate, row number|
|from_n||starting coordinate, column number|
|to_n||goal coordinate, row number|
|g||direction: 1=start going vertically, 2=start going horizontally|
|L||number of permitted steps|
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.)