This program is a density evolution demo program for Low-Density Parity Check(LDPC) codes. This program can evaluate performance of regular and irregular LDPC codes and shows probability distribution function of Log-Likelihood ratio on GUI.
Install following tools.
gcc, g++, make, cmake, boost, Qt6, and qwt are installed by package management system. fftw3 is downloaded and compiled during this program's compilation process.
Clone demo program's repository.
git clone https://github.com/xenocaliver/density.git ./
Before building the demo program, you must modify CMakeLists.txt file for your system. This CMakeLists.txt is written for mac OS and homebrew.
cd density
mkdir build
cd build
cmake ..
make
Run demo program as follows.
./density <degree distribution polynomial json file> <sigma>
I implemented Chung's denisty evolution method. And this program is fork of Professor Wadayama's code. I added GUI plotting pdf(probability density function) convergence process and adopted to irregular LDPC codes.
Let
And check node update rule is shown as follows:
where
Let
And let
where
So, we apply (complex) Fourier transform once, and calculate simple product of transformed functions and revert the result via inverse Fourier transform
However, check node update calculation is more complicated. Before we formulate update rule for check node update, we define
Then, we can convert check node update rule into
$$ \bar{u}=\mathcal{R}\left(\bar{v}{1},\mathcal{R}(\bar{v}{2},\mathcal{R}(\bar{v}{3},\ldots,\mathcal{R}(\bar{v}{d_{c}-2},\bar{v}{d{c}-1}))\right). $$
In order to execute above calculation, let
We construct lookup table for
Above all, we execute quantized density evolution of pdfs variable node update and check node update back and forth.
An irregular LDPC code's profile is specified by degree distribution polynomials. Variable node degree distribution polynomial in edge perspective is defined by
and check node degree distribution polynomial is defined by
Where
I expressed degree distribution polynomial by a json file. For example,
And an example of optimized irregular LDPC code's degree distribution polynomials are
The content of json file corresponding to the first example is shonw below.
{
"degree_distribution":
{
"lambda":
[{"degree": 2, "weight": 1.0}],
"rho":
[{"degree": 5, "weight": 1.0}]
}
}
The content of json file corresponding to the second example is shown below.
{
"degree_distribution":
{
"lambda":
[
{"degree": 1, "weight": 0.18411},
{"degree": 2, "weight": 0.50891},
{"degree": 14, "weight": 0.09001},
{"degree": 15, "weight": 0.21697}
],
"rho":
[
{"degree": 3, "weight": 0.5},
{"degree": 4, "weight": 0.5}
]
}
}
This program read these json file and reflect density evolution update rules.