MATLAB 实现汉明码编码译码
汉明码的编码就是如何根据信息位数
k ,求出纠正一个错误的监督矩阵
H ,然后根据 H 求出信息
位所对应的码字。
1、根据已知的信息位数 k,从汉明不等式中求出校验位数
2、在每个码字 C: (C1, C2 , ? , C2m -1) 中,用 c02 , c12 , cn-12 作为监督位,剩下的位作为
信息位;
m=n-k ;
3)用二进制数字表示 2m-1 列,得到 2m-1 列和 m 行监督矩阵 H ; 4)用 3 步的 H 形成 HCT =0 ,
从而得出 m 个监督方程;
5)将已知的信息代入方程组,然后求出满足上述方程组的监督位
例如,用以上方法,很容易求出
[7, 4,3] 汉明码的监督矩阵:
c (i=0 , 1, ? , m 一 1)。
H
1110100
1101010
1011001
及编码所对应的码字为 C=011001 。
clear
给定 m=3 的汉明码
m=3; %
[h,g,n,k]=hammgen(m);
msg=[0 0 0 1;0 0 0 1;0 0 0 1;0 0 1 1;0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;
1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1];
code=encode(msg,n,k,'hamming/binary') %
C=mod(code*h',2) %
newmsg=decode(code,n,k,'hamming/binary') %
对伴随式除 2 取余数
d_min=min(sum((code(2:2^k,:))')) %
编码
解码
最小码距
运行结果:
>> hangming
code =
1
1
1
0
0
1
1
0
0
0
0
1
1
1
0
0
1
1
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
1
1
0
1
1
1
1
1
1
1
1
0
1
C =
1
0
0
1
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
newmsg =
0
0
0
0
0
0
0
0
1
1
1
1
1
1
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
0
0
0
0
0
1
1
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
1
1
0
0
1
1
1
1
1
1
1
1
1
1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
1
1
1
1
1
1
0
1
0
1
0
1
1
1
1
1
1
1
1
1
0
0
1
1
0
1
0
1
d_min =
3
clear
m=3; %
[h,g,n,k]=hammgen(m);
给定 m=3 的汉明码
msg=[0 0 0 1;0 0 0 1;0 0 0 1;0 0 1 1;0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;
1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1];
code=encode(msg,n,k,'hamming/binary') %
subplot(121)
plot(code)
C=mod(code*h',2) %
对伴随式除 2 取余数
newmsg=decode(code,n,k,'hamming/binary') %
subplot(122)
plot(newmsg)
编码
解码
d_min=min(sum((code(2:2^k,:))')) %
最小码距
运行结果:
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
5
10
15
20
0
0
5
10
15
20