LDPC 符号の符号化と復号法
LDPC 符号について、下記の GitHub にある LdpcC (C++ surce code)を分析することにより、符号化と復号方法を詳解します。
LdpcC は、LdpcCode.cpp、Constellation.cpp、main.cpp の 3 つの source code と header file で記述されています。コンパイルは Visual Studio Code + MinGW の環境で、include file を幾つか追加して、下記のように g++ を呼び出して行えます。
追加する include file は、添付の file を参照。
- g++ -o LdpcC.exe main.cpp LdpcCode.cpp Constellation.cpp
LdpcC の Ldpc 符号は、符号化 bit = 648, 1296, 1944、符号化率 = 1/2 です。
復号は Eb/N0 をパラメータとして、Block Error Rate を出力します。(真値表示、% 表示は 100 倍)
Block Error Rate は、1 つの符号に対して 10000回行います。実行終了まで長時間かかる為、動作確認は 1000回に修正して実行しています。
Eb/No は、main() の中で設定されています。0.50 から 4.50 まで、0.25 step (unit:dB)
更に、3.0、7.0 の offset を付加して計算を繰り返しています。実行終了まで長時間かかる為、この部分を修正するか、Ctrl + C で実行停止すること。
符号化は WiFi (IEEE 802.11n)、復号は Belief Propagation Decoding を行います。
符号化
符号化は、情報 bit から各 bit に対して指定 bit を選択、選択した bit から情報 bit の パリティを計算する。
続いて、情報 bit のパリティの指定 bit を選択、選択した bit から 更にパリティを計算する。ここで計算されたパリティの指定 bit を選択して、情報 bit のパリティを更新する。
ここまでで計算されたパリティから情報 bit に続くParity bit を計算する。
LdpcC の動作は、情報 bit = 324、Block bit = 648、符号化率 1/2 の場合を確認しています。
詳細は、添付の Excel file : encode を参照。
復号
復号は、Belief Propagation Decoding (BP 復号)を行います。
BP 復号は、対数尤度比(log-likehood ratio: LLR)を使用して繰り返し復号を実行します。繰り返し計算される LLR が、0 or -1 に発散することを利用して情報 bit を推定後、推定した bit 列のパリティを計算することで正誤の判定を行います。
復号の計算を繰り返す為、復号に大きな遅延が伴います。
詳細は、添付の Excel file : decode を参照。
符号化、復号の処理は、source code を見ても理解することは難しいので、実行中の配列と変数をモニタすると理解しやすいです。
C++ のコンソールへの出力は、std::cout ... std::endl;
LdpcCode.cpp にコンソール出力を追加した修正 version と出力結果、動作確認用の Excel file
2019-11-24
ホーム