LDPCでDVC(1)

とりあえず,検査行列と生成行列が出来たので,ここにメモしておく.

石田貴史,和田山正,”単項式と等重みベクトルを利用したレギュラーLDPC符号の確定的構成法”,信学論A,Vol.J87-A,No.11,pp.1457-1459,2004年11月.

元ネタは上のレター.ウェブで普通に検索して出てくるPDFは分かり難いことこの上ない.省略しすぎて間違ってるんじゃないかな,と思わせるほどに.

そこは信学論の査読者.ちゃんと具体例を書かせて理解を即させている(というか,このレターを見てようやく理解できた).査読者に感謝.

あれ,はてなってファイルアップロードできないのか・・・.誤算だった.とりあえず,ここにプログラムをアップロードします.コンパイルして,m,v,uを引数にすればmathematicaの疎行列の書式で標準出力にはき出されます.ディレクティブをかえれば,PBM形式で出力されます.例えば,4 3 2だと6行4列の検査行列,30 4 3だと4060行27450列の検査行列が出来ます.mが32(intのビット長)以上だとムリです.エラー処理もしてないのです.

さて,この検査行列を画像で見るとこうなります.

なんだかかなり規則的ですね.並び順は組み合わせの生成順なのでたまたまなのですが,ラッキーだったかも.

これに対応する生成行列はこうなります.

これまた規則的ですね.対角行列が見えますので,この部分は実質的に計算する必要もないかな.逆に,この部分は元のデータで残りがパリティ行列とも見なせます.

この検査行列の生成はまだ試行錯誤中です.とりあえず,Mathematicaで力業で生成してます.Cに落とせたらいいのですが,まだよくわからない.やり方は以下の通り.

<< "ldpc_15_03_02.txt"
G = NullSpace[H, Modulus -> 2];
Normal[G] >> "ldpc_15_03_02_G.txt"

何だ,まとめるとたった1行(NullSpace)ですか.この命令にたどり着くまでに何時間もかかったんですけどね.最初のテキストファイルは先のプログラムで生成した結果です.今日はここまで.