Non-binary LDPC codes encode and decode simulation programs
Install following tools.
galois++ and fftw are downloaded and compiled during this simulator's compilation process.
Clone simulator's repository.
git clone git@github.com:xenocaliver/gfq_ldpc.git ./
Build the simulator as follows.
cd gfq_ldpc
mkdir build
cd build
cmake ..
make
Before running the simulator, you must create generating matrix. You can convert parity check matrix alist file into generating matrix as follows.
./make-gen <parity check alist file name> <generating matrix file name>
Then, you can run the simulator as follows.
./gfq_simulator <alist file name> <generating matrix file name> <number of transmission> <sigma for AWGN channel> <Sum-Product iteration limit> <progress print interval>
This simulator uses galois++ for finite field calculation. galois++ wraps finite field element as a class and overrides operators, for example, +,-,* and /. Therefore, a programmer can code finite field calculations like as mathematical formulae. Thus parity check and encoding part of the simulator code are very simple.
The simulator's generating matrix is constructed as follows.
Let
holds. And we assume we can split
holds. Therefore one can calculate
Next, one can calculate make-gen
permuates
where
We assumed that channel is AWGN channel with standard deviation
where
We employ probability region Sum-Product algorithm for decoding according to Davey.
Let
For all variable nodes, initialize messages as follows:
Factor to variable node message update processes are given by
where
However, this update rule's computing complexity is very large and is not practical. Threfore, we use Fourier transformaion according to Hong. Another update rule is shown as follows. At first, we apply Fourier transformation
$$ \boldsymbol{Q}{mn} = \mathscr{F}\left[\boldsymbol{q}{mn}\right] $$
where $\boldsymbol{Q}{mn} = (Q{mn}(0),Q_{mn}(1),\ldots,Q_{mn}(2^{M}-1))$ and $\boldsymbol{q}{mn} = (q{mn}(0), q_{mn}(1),\ldots, q_{mn}(2^{M}-1))$. And we update factor to variable messages in frequency domain
Then, we apply inverse Fourier transform to
$$ \boldsymbol{r}{nm} = \mathscr{F}^{-1}\left[\boldsymbol{R}{nm}\right]. $$
Due to discrete Fourier transformation's property, we must do following renormalization:
Variable to factor node message update processes are given by
After that normalizing
In order to speculate temporal codeword, calculate probability which each symbols equals to
Finally, speculated
$$ \hat{x}{n}=\operatorname*{argmax}{g}p_{n}(g). $$