(7,4)汉明码(Hamming Code)BPSK的C语言仿真实现
本文首先解释汉明码的编码译码方式和纠错原理,并给出于AWGN信道下,信道编码采用(7,4)汉明码,调制采用BPSK方式的C语言实现方式和结果。
一、汉明码的编译码纠错原理
1 线性分组码的编码原理
汉明码是一种特殊的线性分组码,首先需要介绍的是线性分组码的基本原理。
按照基本的纠错码原理,线性分组码同样有着信息位和纠错位,二者构成一组二进制分组码,设其长度为 n n n,其中信息位数为 k k k,纠错位数为 m m m,记为 ( n , k ) \left( {n,k} \right) (n,k)。结构如下图所示:
校验位生成的方式我们以生成矩阵来表示。给定长度为 M = 2 k M=2^k M=2k个信息序列集合映射到长度为 n n n的 2 n 2^n 2n个对应码字可以用一个矩阵 G G G表示,称其为生成矩阵: c m = u m G {c_m} = {u_m}G cm=umG其中 1 ≤ m ≤ 2 k 1 \le m \le {2^k} 1≤m≤2k, u m u_m um表示长度为 k k k的二进制矢量(行向量),即信息序列; c m c_m cm表示对应码字。此公式均在伽罗华域 G F ( 2 ) GF(2) GF(2)上运算,下同。
可见,生成矩阵为 k × n k\times n k×n阶的。为使得线性分组码为系统的,必须使生成矩阵行满秩。故一般我们设定生成矩阵的形式如下: G = [ I k ∣ P ] G = \left[ {
{I_k}|P} \right] G=[Ik∣P]其中 I k I_k Ik表示 k k k阶单位矩阵, P P P为一个 k × m k\times m k×m阶的矩阵,线性代数告诉我们,任何一个行满秩矩阵均可以通过行运算和列置换得到以上形式的矩阵,即任意系统线性分组码均对应等价的以上形式的矩阵。
2 线性分组码的译码纠错原理
以上我们给出了编码的过程,下面给出译码的过程。定义一个校验矩阵 H H H。由于码字 C C C虽然是 n n n长度的,但是其后 m m m位是由前 k k k位生成的,故其是 n n n维空间的一个 k k k维子空间。校验时我们认为当码字和校验矩阵相乘得零向量则认为无错码,此时利用正交特性,与码字 C C C正交的补集,即与 C C C中码字正交的所有 n n n维二进制向量集合,应该是 n n n维空间的一个 n − k n-k n−k,即 m m m维子空间。这个子空间定义了一个与 C C C对偶的线性分组码,其总长依旧为 n n n,但其信息位为 m m m,校验位为 k k k。偶线性分组码的生成矩阵设为 H H H(即原线性分组码的校验矩阵),因为 C C C内的任何码字都正交与 H H H的任意一行(显然,令 u k = [ 1 , . . . , 1 ] u_k = \left[1, ..., 1\right] uk=[1,...,1], H H H的任意一行均为码字),故对于所有的码字 c ∈ C c \in C c∈C,均有: c H T = 0 c{H^T} = 0 cHT=0其中 0 0 0表示零向量。相反的, G G G中的所有码字也处于向量空间 C C C内,故有 G H T = 0 G{H^T} = 0 GHT=0此时由于 G G G的结构为 G = [ I k ∣ P ] G = \left[ {
{I_k}|P} \right] G=[Ik∣P],故可以构造出 H H H矩阵的形式如下: H = [ − P T ∣ I m ] H = \left[ { - {P^T}|{I_m}} \right] H=[−PT∣Im]考虑到二进制码,故有 H = [ P T ∣ I m ] H = \left[ { {P^T}|{I_m}} \right] H=[PT∣Im]由此可以得到译码的校验矩阵。