ハミング符号をpythonで実装してみた

前回ハミング符号について紹介しました

planet-meron.hatenablog.com

今回は一つのエラーを訂正するハミング符号と一つのエラー訂正・2つのエラー検知の拡大ハミング符号ををpythonを使って実装してみたいと思います

(7,4)ハミング符号

(7,4)のハミング符号の実装したコードを下記に示します

Desktop/PPP/python/audio/HammingCode.ipynb

実装に関しては主にWikipediaを参照

en.wikipedia.org

ハミング符号の計算とシンドロームの計算は生成行列\textbf{G}と検査行列\textbf{H}を利用すると容易に行うことができます

シンドロームが計算されるとp_1, p_2, p_3がそれぞれ20, 21, 22としてインデックスを示す値と計算されます

あとは該当データを訂正して、情報データを取り出せばよし

(8,4) 拡張ハミング符号

同様に1つのエラー訂正、2つのエラー検知(SECDED)の拡張ハミングの実装も行いました

Desktop/PPP/python/audio/HammingCode-Copy1.ipynb

こちらは生成行列・検査行列に行を追加し、全体の偶数パリティを計算してデータの後ろにつけています

全体の偶数パリティ d_1, d_2, d_3で表されるのが面白いですね

これは、パリティを含めた計算で同じデータ同士の排他的論理和を取ると偶数になるので、残ったものがこうなると言うことですね


\begin{align}
p_4 &= p_1 \oplus p_2 \oplus d_1 \oplus p_3 \oplus d_2 \oplus d_3 \oplus d_4 \\
&= d_1 \oplus d_2 \oplus d_4 \oplus d_1 \oplus d_3 \oplus d_4 \oplus d_1 \oplus d_2 \oplus d_3 \oplus d_4 \oplus d_2 \oplus d_3 \oplus d_4 \\
&= d_1 \oplus d_2 \oplus d_3
\end{align}

まとめ

ハミング符号pythonで実装してみました

検査ビット数が任意のものにも対応したものも作成したので、もしよろしければこちらもどうぞ

github.com