Skip to content

Rate Adaptive LDPC Codes for Distributed Source Coding

Latest
Compare
Choose a tag to compare
@adomasbaliuka adomasbaliuka released this 02 May 16:26
· 7 commits to main since this release
79908eb

Header-only library for distributed source coding.

Includes

  • 6 LDPC codes including rate adaption, stored in a custom memory-efficient JSON-based format. The format has two versions, one for storing general LDPC matrices (same use-case as alist format), the other is used explicitly to store quasi-cyclic exponents for very space-efficient storage of large quasi-cyclic LDPC matrices.
  • Julia utilities to handle these file formats and generate C++ code that allows embedding LDPC codes into an executable as constant static data (both as binary matrix in CSC-storage, as well as QC-exponents directly).
  • Separate C++ implementation of syndrome encoding (binary sparse-matrix-dense-vector multiplication)
  • Ability to group and the CSC-stored QC-exponents into constexpr objects (requires C+++20)
  • Example implementation of a general Belief Propagation decoder suited for Slepian-Wolf setting. This is a single C++ header, that should be easy to use.
  • Frame error rate and critical rate simulations. These benchmarks are not yet automated and no plots are yet generated from the simulation results.

Changes from last release:

LDPC Codec that can now be directly initialized from compressed-sparse-column storage of QC-exponents

Breaking changes:

  • removes RateAdaptiveCode template parameter Bit. This is now a template parameter of underlying functions, which is more flexible (and hopefully not too much more complicated/prone to errors...)
  • (ABI-breaking) reworks underlying data representation for RateAdaptiveCode.

Non-breaking changes:

  • New header encoder_advanced.hpp. Enables constexpr storage of QC-exponents for a code in a grouped manner. For how to use, see unit test in test_encoder_advanced.cpp. Requires C++20!
  • Enable construction of RateAdaptiveCode from a vector<vector<idx_t>> mother_pos_varn
  • Together, these also enable creating RateAdaptiveCode from QC-exponents stored statically in C++.

(see #19)