参考資料は ここをクリックしてください。
$\mathbb{F}_2=\{0,1\}$
$\mathbb{F}_2$の演算は、整数として計算した後、
計算結果が偶数なら$0$奇数なら $1$と置き換えればよい。
特に、任意の$x \in \mathbb{F}_2$に対し$x+x=0$が成立する。
$\mathbb{F}_2^n$: $\mathbb{F}_2$上の$n$次元ベクトル空間
$v_1v_2...v_n$: $n$ビットのデータ
$v=(v_1,v_2,...,v_n)\in\mathbb{F}_2^n$:データのベクトル表記
$e=(e_1,e_2,...,e_n)$: 通信エラーのベクトル表記
データ$v$を送信しエラー$e$が発生した場合、受信されるデータは $r=v+e$で表される。このとき、$v=r+e$、$e=v+r$という関係も成立している($\mathbb{F}_2$上のベクトル空間の特殊性!)。
写像 $$\varphi :\mathbb{F}_2^k\ni u=(u_1,..,u_k)\to v=(v_1,...,v_n)\in \mathbb{F}_2^n$$ を 符号化と呼ぶ。ただし、$k\leq n$とする。 符号化によって得られる$\mathbb{F}_2^n$の部分集合 $$C=\{ \varphi(u);u\in \mathbb{F}_2^k \}$$ を 符号と呼び、$C$の要素を 符号語と呼ぶ。
\[ C=\{v\in \mathbb{F}_2^n; vH^T=0 \} \]
ハミング符号の検査行列$H$は、零ベクトル以外のすべての$\mathbb{F}_2^m$の 列ベクトルを並べて得られる
$m=3$の場合の例:
\begin{equation} H= \begin{pmatrix} 1&0&1&0&1&0&1\\ 0&1&1&0&0&1&1\\ 0&0&0&1&1&1&1 \end{pmatrix} \end{equation}ハミング符号の生成行列$G$は、検査行列$H$より求めることが出来る
(求め方については 資料を参考にしてください。)
$m=3$の場合の生成行列:
\begin{equation} G= \begin{pmatrix} 1&0&0&0&0&1&1\\ 0&1&0&0&1&0&1\\ 0&0&1&0&1&1&0\\ 0&0&0&1&1&1&1 \end{pmatrix} \end{equation}
$e_i$: 第$i$成分のみが$1$でそれ以外の成分はすべて0の$7$次元ベクトル
このような誤り訂正を行うことにより、$1$個の誤りが生じた場合でも正しい情報を受け取ることが可能になる。 実際、符号語$v=uG$を送信し誤り$e_j$が発生した場合、 受信語は $r=v+e_j$となるが、この場合のシンドローム$s$は $s=rH^T=vH^T+e_jH^T=e_jH^T=h'_j$ となり、 $r'=r+e_j=v+e_j+e_j=v$ と誤り訂正することにより符号語$v$が正しく復元されている。