itpp::LDPC_Parity Class Reference

LDPC parity check matrix generic class. More...

`#include <itpp/comm/ldpc.h>`

Inheritance diagram for itpp::LDPC_Parity:

## Public Member Functions

| LDPC_Parity ()
| Default constructor.
| LDPC_Parity (int ncheck, int nvar)
| Constructor that gives an empty matrix of size ncheck x nvar.
| LDPC_Parity (const std::string &filename, const std::string &format)
| Load an LDPC parity check matrix from a file.
| LDPC_Parity (const GF2mat_sparse_alist &alist)
| Constructor, from a `GF2mat_sparse_alist` object.
virtual | ~LDPC_Parity ()
| Virtual destructor.
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.

## Friends

class | LDPC_Code

## Detailed Description

LDPC parity check matrix generic class.

This class provides a basic set of functions needed to represent a parity check matrix, which defines an LDPC code. This class is used as base class for a set of specific LDPC parity check matrix classes, e.g. regular or irregular LDPC codes.

This class stores a parity check matrix as a sparse matrix. The transpose of the matrix is also stored to enable efficient access to its rows.

All parity check matrices can be loaded from (saved to) a file by converting them from (to) a portable `GF2mat_sparse_alist` format.

However, typically one will want to create a `LDPC_Code` from the parity check matrix (and optionally a generator) and save the codec binary data instead.

Please refer to the tutorial Generation of LDPC codes for some examples of code generation.

Author
  Erik G. Larsson, Mattias Andersson and Adam Piatyszek

Definition at line 71 of file ldpc.h.

## Constructor & Destructor Documentation

## LDPC_Parity() [1/4]

itpp::LDPC_Parity::LDPC_Parity | ( |  | ) |

inline

Default constructor.

Definition at line 76 of file ldpc.h.

## LDPC_Parity() [2/4]

itpp::LDPC_Parity::LDPC_Parity | ( | int | ncheck,
|  | int | nvar
| ) |  |

Constructor that gives an empty matrix of size ncheck x nvar.

Definition at line 50 of file ldpc.cpp.

References initialize().

## LDPC_Parity() [3/4]

itpp::LDPC_Parity::LDPC_Parity | ( | const std::string & | filename,
|  | const std::string & | format
| ) |  |

Load an LDPC parity check matrix from a file.

Parameters

  filename | file name
  format | file format

Note
  Currently, only "alist" format is supported (see `GF2mat_sparse_alist` for its definition).

See also
  `load_alist()` and `save_alist()`

Definition at line 55 of file ldpc.cpp.

References it_error, and load_alist().

## LDPC_Parity() [4/4]

itpp::LDPC_Parity::LDPC_Parity | ( | const GF2mat_sparse_alist & | alist | ) |

Constructor, from a `GF2mat_sparse_alist` object.

Definition at line 66 of file ldpc.cpp.

References import_alist().

## ~LDPC_Parity()

virtual itpp::LDPC_Parity::~LDPC_Parity | ( |  | ) |

inlinevirtual

Virtual destructor.

Definition at line 98 of file ldpc.h.

## Member Function Documentation

## initialize()

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

Initialize an empty matrix of size ncheck x nvar.

Definition at line 72 of file ldpc.cpp.

References H, Ht, init_flag, ncheck, nvar, sumX1, sumX2, and itpp::zeros_i().

Referenced by itpp::BLDPC_Parity::expand_base(), itpp::LDPC_Parity_Unstructured::generate_random_H(), import_alist(), and LDPC_Parity().

## get_H()

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

inline

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

inline

Get a specific column from the matrix.

Definition at line 109 of file ldpc.h.

Referenced by check_connectivity(), check_for_cycles(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), and display_stats().

## get_row()

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

inline

Get a specific row from the matrix.

Definition at line 112 of file ldpc.h.

Referenced by check_connectivity(), and display_stats().

## get_nvar()

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

inline

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

inline

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
| ) |  |

Set element (i,j) of the parity check matrix to value.

Definition at line 83 of file ldpc.cpp.

References itpp::Sparse_Mat< T >::clear_elem(), H, Ht, init_flag, it_assert, it_assert_debug, ncheck, nvar, itpp::Sparse_Mat< T >::set(), sumX1, and sumX2.

Referenced by itpp::LDPC_Generator_Systematic::construct(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), itpp::BLDPC_Parity::expand_base(), itpp::LDPC_Parity_Unstructured::generate_random_H(), and import_alist().

## get()

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

inline

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

Definition at line 136 of file ldpc.h.

References it_assert_debug.

Referenced by 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

inline

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

virtual

Display some information about the matrix.

Reimplemented in itpp::LDPC_Parity_Irregular, itpp::LDPC_Parity_Regular, and itpp::LDPC_Parity_Unstructured.

Definition at line 109 of file ldpc.cpp.

References itpp::elem_mult(), get_col(), get_rate(), get_row(), init_flag, it_assert, it_info, itpp::Array< T >::length(), itpp::length(), itpp::linspace(), itpp::max(), ncheck, nvar, itpp::sum(), sumX1, sumX2, itpp::to_ivec(), and itpp::zeros().

Referenced by itpp::LDPC_Parity_Irregular::display_stats(), and itpp::LDPC_Parity_Regular::display_stats().

## get_rate()

double itpp::LDPC_Parity::get_rate | ( |  | ) | const

inline

Get the code rate.

Definition at line 152 of file ldpc.h.

Referenced by display_stats().

## import_alist()

void itpp::LDPC_Parity::import_alist | ( | const GF2mat_sparse_alist & | H_alist | ) |

Import matrix from `GF2mat_sparse_alist` format.

Definition at line 167 of file ldpc.cpp.

References initialize(), ncheck, nvar, and set().

Referenced by LDPC_Parity(), and load_alist().

## export_alist()

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

Export matrix to `GF2mat_sparse_alist` format.

Definition at line 182 of file ldpc.cpp.

References H, init_flag, and it_assert.

Referenced by save_alist().

## load_alist()

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

Load matrix from `alist_file` text file in alist format.

Definition at line 155 of file ldpc.cpp.

References import_alist().

Referenced by LDPC_Parity().

## save_alist()

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

Save matrix to `alist_file` text file in alist format.

Definition at line 160 of file ldpc.cpp.

References export_alist().

## check_for_cycles()

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

protected

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

  L | length 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 check_connectivity(), get_col(), itpp::Sparse_Vec< T >::get_nz_indices(), init_flag, it_assert, itpp::length(), and 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

protected

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_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

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 check_connectivity(), get(), get_col(), itpp::Sparse_Vec< T >::get_nz_indices(), get_row(), init_flag, it_assert, and itpp::length().

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

## Friends And Related Symbol Documentation

## LDPC_Code

friend class LDPC_Code

friend

Definition at line 73 of file ldpc.h.

## Member Data Documentation

## init_flag

bool itpp::LDPC_Parity::init_flag

protected

Flag that indicates proper initialization.

Definition at line 170 of file ldpc.h.

Referenced by check_connectivity(), check_for_cycles(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), display_stats(), export_alist(), initialize(), itpp::BLDPC_Parity::load_base_matrix(), and set().

## Nmax

const int itpp::LDPC_Parity::Nmax = 200

staticprotected

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

protected

The parity check matrix.

Definition at line 174 of file ldpc.h.

Referenced by export_alist(), initialize(), and set().

## Ht

GF2mat_sparse itpp::LDPC_Parity::Ht

protected

The transposed parity check matrix.

Definition at line 176 of file ldpc.h.

Referenced by initialize(), and set().

## nvar

int itpp::LDPC_Parity::nvar

protected

Number of variable nodes.

Definition at line 178 of file ldpc.h.

Referenced by check_for_cycles(), itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), display_stats(), itpp::LDPC_Parity_Unstructured::generate_random_H(), import_alist(), initialize(), and set().

## ncheck

int itpp::LDPC_Parity::ncheck

protected

Number of check nodes.

Definition at line 180 of file ldpc.h.

Referenced by itpp::LDPC_Parity_Unstructured::cycle_removal_MGW(), display_stats(), itpp::LDPC_Parity_Unstructured::generate_random_H(), import_alist(), initialize(), and set().

## sumX1

ivec itpp::LDPC_Parity::sumX1

protected

Actual number of ones in each column.

Definition at line 182 of file ldpc.h.

Referenced by display_stats(), initialize(), and set().

## sumX2

ivec itpp::LDPC_Parity::sumX2

protected

Actual number of ones in each row.

Definition at line 184 of file ldpc.h.

Referenced by display_stats(), initialize(), and set().

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

- itpp/comm/ldpc.h
- itpp/comm/ldpc.cpp

Generated on Mon Jun 10 2024 11:49:36 for IT++ by Doxygen 1.9.8