汉明码编译码器系统
班级: 姓名: 学号:
一.实验原理描述
1.1汉明码编码原理
一般来说,若汉明码长为n,信息位数为k,则监督位数r=n—k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求
2r1n或21kr1(1)
r下面以(7,4)汉明码为例说明原理:
设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3.若取r=3,则n=k+r=7。我们用
a6a5a4a3a2a1a0来表示这7个码元,用
s1s2s3的
值表示3个监督关系式中的校正子,则以规定如表1所列。
s1s2s3的值与错误码元位置的对应关系可
表1 校正子和错码位置的关系
s1s2s3001 错码位置 s1s2s3101 错码位置 a0a1a2a3 a4a5a6 010 110 111 000 100 无错码 011 则由表1可得监督关系式:
(2)
(3)
⊕(4)
在发送端编码时,信息位监督位
a6a5a4a3的值决定于输入信号,因此它们是随机的。
a2a1a0、、应根据信息位的取值按监督关系来确定,即监督位应使式(2)~
sss式(4)中1、2、3的值为0(表示编成的码组中应无错码)
(5)
式(5)经过移项运算,接触监督位
(6)
式(5)其等价形式为:
(7)
式(6)还可以简记为
或
(8)
其中
所以有
(9)
式(6)等价于
(10)
其中Q为P的转置,即
QPT(11)
式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。 我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G
(12)
G称为生成矩阵,因为由它可以产生整个码组,即有
(13)
或者
式(13)即汉明码的编码原理 1。2汉明码纠错原理
当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪
(14)
声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
一般来说接收码组与A不一定相同.若设接收码组为一n列的行矩阵B,即
(15)
则发送码组和接收码组之差为
(16)
E就是传输中产生的错码行矩阵
(17)
若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成
(18)
若E=0,即接收码组无错,则BAEA,将它代人式(8),该是仍成立,即有
(19)
当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立.在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即
(20)
将
代入式(20),可得
由式(8)可知,所以
(21)
此处S与前面的
s1s2s3有着一一对应关系,则S能代表错码位置.
因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。
二。实验仪器
1.通信原理综合实验系统一台 2。电脑-MATlab一台
三.实验目的
1。熟悉掌握汉明码的原理与实现 2。观察了解汉明距离的作用
3.通过已经知道的汉明码监督方程为传输的编码进行纠错也验证
四。实验内容
1.汉明码编码规则
汉明码是1950年由美国贝尔实验室提出来的,是第一个设计用来纠正一位误码的线性分组码,汉明码及其变型已广泛应用于数字通信和数据存储系统中作为差错控制码。
汉明码的原始设计思想来自于前面讨论的奇偶监督码。 通过一个例子来说明如何具体构造这些监督关系式.
设分组码 (n,k)中k = 4。为了纠正一位错码,按汉明不等式可得r≥
3,若取r =3,则n = k+r =7.我们用
a6 a5 a4 a3 a2 a1 a0 a2= a6 ⊕ a5 ⊕ a4 a1= a6 ⊕ a5 ⊕ a3 a0= a6 ⊕ a4 ⊕ a3 2.编码的检验与纠错
用S1,S2,S3表示三个监督关系式式中的校正子, 监督方程为:
S1 =a6 ⊕ a5 ⊕ a4 ⊕ a2 S2 =a6 ⊕ a5 ⊕ a3 ⊕ a1 S3 =a6 ⊕ a4 ⊕ a3 ⊕ a0
则S1,S2,S3的值与错码位置的对应关系可以规定如下表:
五。实验要求
1.编写7位汉明码的程序,输出汉明码 function f=hammingencod(a)
a=input('输入信息元序列:’); c=mod(a*G,2); disp(’编码后序列为:’); disp(c); x=。01:.01:4;
[m,n]=size([a]'*ones(1,100)); y=reshape(([a]’*ones(1,100))’,1,m*n); plot(x,y)
axis([0 4 0 1。5]); set(gca,’XTick’,0:1:4); set(gca,'YTick’,0:0。5:1。5); title(’hanmingencode') xlabel(’value’) ylabel(’value') end
G=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1];
输入信息元序列:1101 编码后序列为:
1 0 0 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1
2.任意输入一个7位编码使用程序判断编码是否正确,如果错误,指出错位并纠正。
function g=hammingdecod(B)
H=[1 1 1 0 1 0 0 ;1 1 0 1 0 1 0;1 0 1 1 0 0 1]; B=input(’输入接收序列B=');
S=mod(B*H’,2); %计算B的伴随式 if S==0
disp(’接收到的码字无错误。’); E=dec2bin(0,7); end
fori=1:1:7
if S==H(:,i)’
E=dec2bin(2^(7—i),7); %计算R的错误图样
fprintf(’错误出现在第%1。0f位\\n',i); break; end end
a=mod(B—E,2); %计算原发送码序列 disp('原发送码字为:'); disp(a) x=.01:.01:7;
[m,n]=size([a]'*ones(1,100)); y=reshape(([a]'*ones(1,100))',1,m*n); [m,n]=size([B]'*ones(1,100)); z=reshape(([B]'*ones(1,100))',1,m*n); plot(x,y) holdon;
plot(x,z,'——r') axis([0 7 0 1。5]); set(gca,’XTick’,0:1:7); set(gca,'YTick',0:0。5:2.5); set(gca,'ZTick’,0:0。5:2.5); title('hanmingdecode’) xlabel('value’) ylabel(’value’) zlabel('value’) end
输入接受序列为[1 1 0 1 0 1 0] 译码后的仿真图如下:
hanmingdecode1.51value0.500123value4567
如图上所示测接收到的码子无错误。如果输入接受序列为[1 1 0 0 0
1 0]则仿真图:
hanmingdecode1.51value0.500123value4567
hanmingdecode1.51value0.500123value4567如上图所示,则四位有错误,原发送码子为[1 1 0 1 0 1 0] 如果输入的序列为[1 0 0 0 0 1 0],则仿真图为
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务