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 avector<vector<idx_t>> mother_pos_varn
- Together, these also enable creating
RateAdaptiveCode
from QC-exponents stored statically in C++.
(see #19)