通信系统仿真-基于MATLAB汉明码仿真课程设计.doc
- 文档编号:595927
- 上传时间:2023-04-29
- 格式:DOC
- 页数:23
- 大小:354.96KB
通信系统仿真-基于MATLAB汉明码仿真课程设计.doc
《通信系统仿真-基于MATLAB汉明码仿真课程设计.doc》由会员分享,可在线阅读,更多相关《通信系统仿真-基于MATLAB汉明码仿真课程设计.doc(23页珍藏版)》请在冰点文库上搜索。
摘要
在通信系统中,要提高信息传输的有效性,我们将信源的输出经过信源编码用较少的符号来表达信源消息,这些符号的冗余度很小,效率很高,但对噪声干扰的抵抗能力很弱。
汉明码(HammingCode)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(SingleErrorCorrecting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。
为了提高信息传输的准确性,我们引进了差错控制技术。
而该技术采用可靠的,有效的信道编码方法来实现的。
纠错码是一种差错控制技术,目前已广泛应用于各种通信系统和计算机系统中,纠错编码主要用于数字系统的差错控制,对于保证通信、存储、媒体播放和信息转移等数字传递过程的质量有着重要意义,是通信、信息类科知识结构中不可缺少的一部分。
本文系统地介绍了纠错码在数字系统中的应用和发展,以及纠错码的基本原理和含义,常用纠错码的简介和分类,主要利用MATLAB中通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制时域波形曲线图。
在此基础上,对汉明码的性能进行分析,得出结论。
关键字:
通信系统、MATLAB、线性分组码、Hamming码
目录
一、引言 1
二、设计原理 2
2、1汉明码的构造原理 2
2、2汉明码的纠错原理 3
2、3监督矩阵H 4
2、4生成矩阵G 6
2、5校正子(伴随式)S 7
2、6程序函数介绍 9
三、(7,4)汉明码编码的设计 9
3、1(7,4)汉明码编码方法 9
3、2编码流程图 10
3、3(7,4)汉明码编码程序设计 10
四、(7,4)汉明码的译码器的设计 11
4、1(7,4)汉明码译码方法 11
4、2译码流程图 13
4、3(7,4)汉明码译码程序的设计 13
五、(7,4)汉明码编译码程序的编译及仿真波形 14
六、 总结 17
七、参考文献 18
附录 19
一、引言
MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。
其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。
MATIAB通信工具箱由两大部分组成:
通信系统功能函数库和SIMULINK通信系统仿真模型库。
MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。
这些函数包括:
信号源产生函数、信源编码/译码函数、纠错控制编码/译码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。
以纠错控制编译码函数为例:
函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。
通信信号是通过信道的传输,从信源到信宿。
由于新到有着不同的特征,这些特征将会影响传输中的通信信号,使信宿不能正确接收和识别信源的信号。
因此需要采取各种方式抗信道干扰,信道编码就是一种广泛采用的抗信道干扰的方法。
信道编码是人为地按照一定的规则加入冗余信息,从而使信息传输中的差错率降低,甚至达到无措传输的一种提高信息系统可靠性的编码方法。
在信道编码中,有一类所谓汉明码,在理论上十分成熟,并且在通信实践中已被广泛使用。
本文简述了汉明码的编码方法、译码方法,并给出了相应的MATLAB程序。
二、设计原理
2、1汉明码的构造原理
线性分组码是一类重要的纠错码,应用很广泛。
在(n,k)分组码中,若监督码元是按线性关系模2相加而得到的,则称其为线性分组码。
在偶数监督码中,由于使用了一位监督位a0,它和信息位an-1 „ a1一起构成一个代数式:
(1)
在接收端解码时,实际上就是在计算
(2)
若S = 0,就认为无错码;若S = 1,就认为有错码。
现将上式称为监督关系式,S称为校正子。
由于校正子S只有两种取值,故它只能代表有错和无错这两种信息,而不能指出错码的位置。
若监督位增加一位,即变成两位,则能增加一个类似的监督关系式。
由于两个校正子的可能值有4中组合:
00,01,10,11,故能表示4种不同的信息。
若用其中1种组合表示无错,则其余3种组合就有可能用来指示一个错码的3种不同位置。
同理,r个监督关系式能指示1位错码的(2r–1)个可能位置。
一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k.若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求
或(3)
现在以(7,4)分组码为例来说明线性分组码的特点。
设其码字为,前4位是信息元,后3位是监督元,可用下列线性方程组来描述该分组码产生监督元:
(4)
显然,这3个方程是线性无关的。
代入上述公式可得(7,4)码的全部码组,如表1所示。
表1(7,4)汉明码的全部码组
信息位
a6a5a4a3
监督位
a2a1a0
信息位
a6a5a4a3
监督位
a2a1a0
0000
000
1000
111
0001
011
1001
100
0010
101
1010
010
0011
110
1011
001
0100
110
1100
001
0101
101
1101
010
0110
011
1110
100
0111
000
1111
111
由上表可知:
(7,4)汉明码的最小码距=3,它能纠1位错或检2位错。
由此可见,汉明码是能够纠正单个错误的线性分组码,其特点是:
最小码距=3,码长n与监督位r满足关系式:
,说明上述所说的(7,4)线性分组码就是汉明码。
同时,由于码率,故当很大和很小时,码率接近1,可见,汉明码是一种高效码。
2、2汉明码的纠错原理
当数字信号编码成汉明形式(A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。
一般来说,接收码组与A不一定相同。
若设接收码组为一n列的行矩阵B,即
(5)
则发送码组与接收码组之差为
(6)
E就是传输中产生的错码行矩阵
(7)
若,表示接收到的码元无错误;若,则表示该接收码元有错。
式(7)可改写为
(8)
若E=0,即接收码组无错误,则,将它代入式或中,该式仍成立,则有
(9)
当接收码组有错时,,将B代入式或后,该式不一定成立。
在未超过检错能力时,式(9)不成立。
假设此式(9)的右端为S,即
(10)
将代入式(10),可得
(11)
由式或可知,所以
(12)
此处S与前面的有着一一对应的关系,则S能代表错码位置。
因此,纠错原理即接收到码组后按式(10)计算出S,再根据表2判断错码情况,进行差错纠正。
2、3监督矩阵H
式(3.1)所示的(7,4)汉明码的监督方程可以改写为:
(13)
用矩阵的形式可以将上式表示为:
(mod2)(14)
上式可以简记为:
或
式中
(15)
(16)
(17)
右上标“T”表示将矩阵转置。
例如,HT是H的转置,即HT的第一行为H的第一列,HT的第二行为H的第二列等等。
其中,H成为监督矩阵,只要监督矩阵H给定,编码时信息位和监督位的关系也就随即确定下来了。
H矩阵的性质:
(1)H的行数就是监督矩阵的数目,等于监督位的数目r。
H的每行中“1”的位置表示相应码元之间存在的监督关系。
例如,H的第一行1110100表示监督位a2是由a6a5a4之和决定的。
H矩阵可分为两部分,例如
(18)
其中P为阶矩阵,为阶单位阵。
我们将具有[PIr]形式的H矩阵称为典型阵。
(2)由代数理论可知,H矩阵的各行应该是线性无关的,否则将得不到r个线性无关的监督关系式,从而也得不到r个独立的监督位。
若一矩阵能写成典型阵形式[PIr],则其各行一定是线性无关的。
因为容易验证[Ir]的各行是线性无关的,故[PIr]的各行也是线性无关的。
因为或,所以可以用这个关系式来作为判断接收码字A是否出错的依据。
若,则说明码字A有错,反之则说明码字A无错。
2、4生成矩阵G
上面汉明码例子中的监督位公式为
也可改写成矩阵形式:
(19)
或者写成
(20)
式中,Q为一个k*r阶矩阵,它为P的转置,即Q=PT
上式表示,在信息位给定后,用信息位的行矩阵车乘矩阵Q就产生出监督位。
若将(17)的监督方程补充完整并写成矩阵的形式:
(21)
即:
(22)
即汉明码的编码原理
上式中
(23)
G为生成矩阵,根据式2.3.4知:
由G和信息码就能产生所有码字。
生成矩阵也可分为两部分,即
(24)
上式中
(25)
Q为阶矩阵,为阶单位阵。
因此,如果找到了码的生成矩阵G,则编码的方法就完全确定了。
具有[KQ]形式的生成矩阵称为典型生成矩阵。
由典型生成矩阵得出的码组A中,信息位的位置不变,监督位附加于其后,这种形式的码称为系统码。
G矩阵的性质:
(1)G矩阵的各行是线性无关的。
因为由上式可以看出,任一码组A都是G的各行的线性组合。
(2)G共有k行,若他们线性无关,则可以组合出2k种不同的码组A,它恰是有k位信息位的全部码组。
若G的各行是线性相关的,则不可能由G生成2k种不同的码组了。
实际上,G的各行本身就是一个码组。
因此,如果已有k个线性无关的码组,则可以用其作为生成矩阵G,并由它生成其余码组。
2、5校正子(伴随式)S
设一发送码组,在传输的过程中可能发生误码。
接受码组,收发码组之差定义为错误图样E。
(26)
其中,,令。
(27)
式中S称为校正子,他用来表示错码位置。
可见:
校正子S与错误图样E之间由确定的线性变换关系。
若S和E之间一一对应,则S将能代表错码位置。
(7,4)汉明码的校正子和错误图样之间的对应关系如表2所示。
表2(7,4)汉明码S与E对应关系
错误码位
错误图样E
校正子S
错误位置C
0000001
001
1
0000010
010
2
0000100
100
3
0001000
011
4
0010000
101
5
0100000
110
6
1000000
111
7
无错
0000000
000
无错
由上表可知:
当S=001时,则出错在1位,即b0出错;
当S=010时,则出错在2位,即b1出错;
当S=100时,则出错在3位,即b2出错;
当S=011时,则出错在4位,即b3出错;
当S=101时,则出错在5位,即b4出错;
当S=110时,则出错在6位,即b5出错;
当S=111时,则出错在7位,即b6出错;
当S=000时,则无错。
2、6程序函数介绍
MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。
(1)encode函数
功能:
编码函数
语法:
code=encode(msg,N,K)
说明:
该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。
msg是一个K列矩阵。
(2)decode函数
功能:
译码函数
语法:
rcvcode=decode(code,N,K)
说明:
该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。
(3)hammgen函数
功能:
汉明码生成矩阵和校验矩阵产生函数
语法:
H=hamming(M)[H,G]=hamming(M)[H,G,N,K]=hamming(M)
说明:
该函数的功能是产生生成矩阵和校验矩阵,其中M=N-K为校验位的长度,H为汉明码的校验矩阵,G为汉明码的生成矩阵。
三、(7,4)汉明码编码的设计
3、1(7,4)汉明码编码方法
(7,4)汉明码的编码就是将输入的4位信息码加上3位监督码从而编成7位汉明码,编码输出。
由式可知,信息码M与生成矩阵G的乘积就是编好以后的(7,4)汉明码。
3、2编码流程图
根据(7,4)汉明码的编码原理,输入四位信息码,经由监督位得到七位汉明码,画出程序设计的流程图:
图1编码流程图
3、3(7,4)汉明码编码程序设计
根据(7,4)汉明码的编码原理,由于输入的是4位的信息码,输出的是7位的(7,4)汉明码,最后将上式计算所得的监督位和输入的信息位一起输出,则此次编码就算完成了。
(7,4)汉明码的编码源程序见下文附录1。
四、(7,4)汉明码的译码器的设计
4、1(7,4)汉明码译码方法
(7,4)汉明码的译码器的功能就是把输入的7位汉明码译为4位信息码,并且根据伴随矩阵S从而纠正编码中可能出现的1位错码。
根据监督矩阵H和生成矩阵G的关系,即:
,其中是的单位阵,
,其中是的单位阵,
(28)
生成矩阵
由式(28),得
监督矩阵
(29)
由式(29)知,其中(30)
从而即可得到校正子S与(7,4)汉明码各位之间的关系:
(31)
[
算出校正子S()后,对照表3,即可判断出哪位出错,并纠正出错的那位,从而输出正确的码字。
表3(7,4)汉明码译码输入、输出对应关系
序号
译码输入
译码输出
校正子S
错误码位
错码位置
C
0
0000010
0000
010
2
1
0001111
0001
100
3
2
0010101
0010
000
无错
0
3
0011110
0011
000
无错
0
4
0101110
0100
011
4
5
0100101
0101
011
4
6
0010011
0110
100
6
7
0111000
0111
000
无错
0
8
1000111
1000
000
无错
0
9
1001101
1001
001
1
10
1010000
1010
010
2
11
1011101
1011
100
3
12
1101001
1100
011
4
13
1111000
1101
101
5
14
1010100
1110
110
6
15
0111111
1111
111
7
4、2译码流程图
根据(7,4)汉明码的译码原理及检纠错原理,输入七位码,根据矫正子及错码关系得到四位信息码,画出程序设计的流程图:
图2译码流程图
4、3(7,4)汉明码译码程序的设计
根据前面分析的译码原理,由于译码器的输入为7位汉明码:
输出是4位信息码:
a3a2a1a0,并且同时输出校正子S与错误的码位C。
在程序中,C表示错误在哪一位。
若第1位(a0)出错,则C输出0;若第2位出错,则C输出1;若无错,则C输出0。
这样译码程序就可以编出来了。
译码源程序见附录2。
五、(7,4)汉明码编译码程序的编译及仿真波形
根据(7,4)汉明码的编译码及纠错原理编写源程序代码并在MATLAB中创建其m-file,在MATLAB中运行得到仿真波形如下所示,其中包括信息元序列波形及译码后的7位码序列和错误码波形,‘—’代表原发送7位码字波形;‘——’代表错误码字波形。
(1)输入信息元序列[0001]
编码后序列为:
0001011
输入接收序列B=[0000011]
错误出现在第4位
原发送码字为:
0001011
图3信息元序列波形图4输入序列“0000011”后的译码波形
(2)输入信息元序列[0010]
编码后序列为:
0010101
输入接收序列B=[0010101]
接收到的码字无错误。
原发送码字为:
0010101
图5信息元序列波形图6输入序列“0010101”后的译码波形
(3)输入信息元序列[1101]
编码后序列为:
1101010
输入接收序列B=[1101011]
错误出现在第7位
原发送码字为:
1101010
图7信息元序列波形图8输入序列“1101011”后的译码波形
(4)输入信息元序列[1010]
编码后序列为:
1010010
输入接收序列B=[1110010]
错误出现在第2位
原发送码字为:
1010010
图9信息元序列波形图10输入序列“1110010”后的译码波形
(5)输入信息元序列:
[0110]
编码后序列为:
0110011
输入接收序列B=[0110011]
接收到的码字无错误。
原发送码字为:
0110011
图11信息元序列波形图12输入序列“0110011”后的译码波形
六、 总结
通信系统课程设计圆满结束了,体会和收获颇多。
这次通信原理课程设计我做的是(7,4)汉明码的编译码的设计,刚接到这个题目时,感觉有点迷茫和彷徨,不知道从何入手。
尽管上学期刚学的《通信原理》中也讲过线性分组码中的(7,4)汉明码的编译码方法,但因时间太久已遗忘所剩不多,通过查阅以前的书籍资料,对相关知识进行温习,通过反复温习,终于领会了(7,4)汉明码的编解码的原理、方法,顿时觉得豁然开朗,脑海里也有了大致的实施方案。
此外,借鉴网上可用资源,通过学习相关的教程和查阅MATLAB中的help,这些困难都迎刃而解了。
这其中我深刻地体会到专业英语的重要性。
可想而知,多积累点英语对今后的工作、学习将有极大的帮助。
通过本次学习,我再一次体会到MATLAB的强大。
丰富的库函数、强大的数据处理能力,出色的绘图功能,友好的工作平台,简单一用的操作语言等等,这些优点都促使MATLAB成为数学处理软件发展史上的巅峰之作。
这激发了我之后学习MATLAB的决心。
知识的构架是千枝
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信 系统 仿真 基于 MATLAB 汉明码 课程设计