Block LDPC code parity-check matrix. More...
#include <itpp/comm/ldpc.h>
Public Member Functions | |
| BLDPC_Parity () | |
| 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 format. | |
| GF2mat_sparse_alist | export_alist () const |
Export matrix to GF2mat_sparse_alist format. | |
| void | load_alist (const std::string &alist_file) |
Load matrix from alist_file text file in alist format. | |
| void | save_alist (const std::string &alist_file) const |
Save matrix to alist_file text file in alist format. | |
Protected Member Functions | |
| 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. | |
Protected Attributes | |
| bool | init_flag |
| Flag that indicates proper initialization. | |
| GF2mat_sparse | H |
| The parity check matrix. | |
| GF2mat_sparse | Ht |
| The transposed parity check matrix. | |
| int | nvar |
| Number of variable nodes. | |
| int | ncheck |
| Number of check nodes. | |
| ivec | sumX1 |
| Actual number of ones in each column. | |
| ivec | sumX2 |
| Actual number of ones in each row. | |
Static Protected Attributes | |
| 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.
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
|
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.
| L | length of cycles to look for |
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.
|
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.
| 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.)
Definition at line 192 of file ldpc.cpp.
References 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_for_cycles(), and itpp::LDPC_Parity_Unstructured::generate_random_H().
Generated on Sat Jul 6 2013 10:54:32 for IT++ by Doxygen 1.8.2