基于matlab的(7.4)汉明码编译码仿真 - 图文 下载本文

武汉理工大学《MATLAB》课程设计说明书

东北大学秦皇岛分校电子信息系

综合课程设计

基于matlab的(7,4)汉明码编译仿真

专业名称 班级学号 学生姓名 指导教师 设计时间

通信工程 4090719 何云瑞 李雅珍

2011.12.19~2012.1.4

武汉理工大学《MATLAB》课程设计说明书

课程设计任务书

专业:通信工程 学号:409719 学生姓名(签名):

设计题目:(7,4)汉明码的编码、译码仿真

一、设计实验条件

电子信息创新实验室

二、设计任务及要求

1. 了解、掌握汉明码编码、译码原理;

2. 用仿真软件对(7.4)汉明码进行编码、译码仿真; 3. 画出编码后、译码后的信号波形图。

三、设计报告的内容

1. 设计题目与设计任务(设计任务书) 2. 前言(绪论)(设计的目的、意义等)

3. 设计主体(各部分设计内容、分析、结论等) 4. 结束语(设计的收获、体会等) 5.

参考资料

四、设计时间与安排

1、设计时间: 2周 2、设计时间安排:

熟悉实验设备、收集资料:设计图纸、实验、计算、程序编写调试:编写课程设计报告:答辩:

天天天天

武汉理工大学《MATLAB》课程设计说明书

目 录

摘要 ....................................................................................................................................................................... I 1.引言 ................................................................................................................................................................ 0 2.设计原理 ........................................................................................................................................................... 1

2.1汉明码编码原理 .................................................................................................................................... 1 2.2汉明码纠错原理 ................................................................................................................................. 3 3.程序与SIMULINK仿真 .............................................................................................................................. 5

3.1程序 ........................................................................................................................................................ 5

3.1.1程序函数介绍 ............................................................................................................................. 5 3.1.2 主程序 ........................................................................................................................................ 5 3.1.3调试结果 ..................................................................................................................................... 6 3.2 SIMULINK仿真 ................................................................................................................................... 7

3.2.1 SIMULINK电路图 .................................................................................................................... 7 3.2.2 m 文件程序 ................................................................................................................................ 8 3.2.3 模块参数设置 ............................................................................................................................ 8 3.2.3仿真波形 ................................................................................................................................... 10 3.2.4仿真结果分析 ........................................................................................................................... 14

4.总结 ................................................................................................................................................................. 15 参考文献 ............................................................................................................................................................ 16

摘要

汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。

本文主要利用MATLAB中SIMULINK通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制时域波形,频谱及误码率与信噪比关系曲线图。在此基础上,对汉明码的性能进行分析,得出结论。

关键词:MATLAB 汉明码 SIMULINK 性能

I

1.引言

MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。

MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。

在SIMULINK通信系统仿真模型库中,整个通信系统的流程图被概括为:信号的产生与输出、编码与解码、调制与解调。在SIMULINK中,通信系统仿真的一般模型如图1所示。

Source Source Coding

信源 信源编码

Receiver/Filter Channel

接收机/滤波器 信道

Multiple Access Demodulation

多址复用 解调

Sink

输出

图1 通信系统仿真模型

Error Control Coding 纠错控制编码 Modulation 调制 Transmitter/Filter 发射机/滤波器 Multiple Access 多址复用 Error Control Decoding 纠错控制解码 Source Decoding 信源解码

2.设计原理

2.1汉明码编码原理

一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求

2r?1?n或2?1?k?r?1 (1)

下面以(7,4)汉明码为例说明原理:

设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用a6a5a4a3a2a1a0来表示这7个码元,用值表示3个监督关系式中的校正子,则规定如表1所列。

表1 校正子和错码位置的关系

rs1s2s3的

s1s2s3的值与错误码元位置的对应关系可以

s1s2s3 错码位置 s1s2s3101 错码位置 001 a0a1a2a3 a4a5a6 010 100 011 110 111 000 无错码 则由表1可得监督关系式:

s1?a6?a5?a4? a 2 ?2?

s2?a6?a5?a3? a?3? s3?a6?a4?a3?a0 ?4?

在发送端编码时,信息位a6a5a4a3的值决定于输入信号,因此它们是随机的。

监督位a2、a1、a0应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中s1、s2、s3的值为0(表示编成的码组中应无错码)

1

??a6?a5?a4?a2?0?a6?a5?a3?a1?0??a6?a4?a3?a0?0 (5)

式(5)经过移项运算,接触监督位

??a2?a6?a5?a4?a?1?a6?a5?a3?a0?a6?a4?a3 (6)

式(5)其等价形式为:

??a6??110100?a?5??1???a4??0??1101010?a???0??1011001??3????????a2???0???a??1??a0?? (7)

式(6)还可以简记为

H?AT?0T或A?HT?0 (8)

其中

?1110100?H???1101010??1001??101?? A??a6a5a4a3a2a1? a 0??1110?00?P??1101??I?1r?010??1011?????

??001???

所以有

H??PIr? (9)

式(6)等价于

??a2a1a0?????111?a?110?6a5a4a3????a6a5?101??011??其中Q为P的转置,即

2

0??00?0

a4a3?Q (10

)

Q?PT (11)

式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。 我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G

?1?0k?G???IQ????0??01?0??1??1? (12)

G称为生成矩阵,因为由它可以产生整个码组,即有

01000010000111101101?a6a5a4a3a2a1a0???a6a5a4a3??G (13)

或者

A??a6a5a4a3??G (14)

式(13)即汉明码的编码原理 2.2汉明码纠错原理

当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。

一般来说接收码组与A不一定相同。若设接收码组为一n列的行矩阵B,即 B??b6b5b4b3b2bb(15)10?

则发送码组和接收码组之差为

B?A?E (16)

E就是传输中产生的错码行矩阵 E??e6e5e4e3e2e1e0? (17)

若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成

B?A?E (18)

若E=0,即接收码组无错,则B?A?E?A,将它代人式(8),该是仍成立,即有

B?HT?0 (19)

3

当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立。在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即

?20?B?HT?S

将 B?A?E代入式(20),可得

S?(A?E)HT?A?HT?E?HT 由式(8)可知,所以

S?E?HT ?21?

此处S与前面的

s1s2s3有着一一对应关系,则S能代表错码位置。

因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。

4

3.程序与SIMULINK仿真

3.1程序

3.1.1程序函数介绍

MATLAB中提供了汉明码的编码和译码函数,本程序直接调用进行编程。 ①encode函数 功能:编码函数

语法:code=encode(msg,N,K)

说明:该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。msg是一个K列矩阵。 ②decode函数 功能:译码函数

语法:rcvcode=decode(code,N,K)

说明:该函数对接受码字进行译码,恢复出原始信息,译码参数及方式必须和编码时采用的完全相同。 ③hammgen函数

功能:汉明码生成矩阵和校验矩阵产生函数 语法:H=hammgen(M) [H,G]=hammgen(M) [H,G,N,K]=hammgen(M)

说明:该函数的功能是产生生成矩阵和校验矩阵,其中M=N-K为校验位的长度,H为汉明码的校验矩阵,G为汉明码的生成矩阵。 3.1.2 主程序 K=4; N=7;

msg=randint(200,4,2) %信息产生

5

code=encode(msg,N,K) %汉明编码 code_noise=rem(code+rand(200,7)>0.95,2 ) %加噪声 rcv=decode(code_noise,N,K) %汉明译码 disp(['Error rate in the received code: '

num2str(symerr(code,code_noise)/length(code))])

disp(['Error rate after decode: ' num2str(symerr(msg,rcv)/length(msg))]) %计算误码率

3.1.3调试结果

6

3.2 SIMULINK仿真

本系统由信号产生模块、信号汉明编码模块、AWGN信道、信号汉明译码模块、误码率计算模块组成,在图形观察模块还包括频谱仪和示波器。 3.2.1 SIMULINK电路图

在设计中,本系统信号产生模块选用伯努利二进制序列产生器(Bernoulli Binary Generator)来输出速率为100Bd的随机数字信号,进入Hamming encoder进行编码,在送入AWGN信道(加入高斯白噪声)传输,接收信号送入Hamming decoder进行差错纠正,其后加一误码率计算模块(Error Rate Calculation)计算误码率。再用示波器scope观察波形,用spectrum scope观测频谱。电路如图2所示。

图2 SIMULINK仿真电路图

由于要绘制Hamming decoder模块输入信噪比与输出误码率的关系曲线图,所以将SNR设置成一个变量,通过ratio文件编程绘制误码率曲线图。

7

3.2.2 ratio文件程序

x=0:20 %定义信噪比的范围 y=x;

for i=1:length(x)

xSNR=x(i); %输入信噪比

sim('fangzhen'); %运行’fangzhen ’SIMULINK仿真文件 y(i)=xErrorRate(1); %误码率 end

semilogy(x,y); grid on;

xlabel('高斯信道中的信噪比/dB'); ylabel('误码率'); 3.2.3 模块参数设置

图3 Bernoulli Binary Generator

图4 AWGNA Channel

8

图5 Error Rate Calculation

图6 To Workplace 图7 Spectrum Scope

9

3.2.3仿真波形

图8 Bernoulli Binary Generator输出信号波形

图9 Bernoulli Binary Generator输出信号频谱

10

图10 Hamming Encoder输出信号

图11 Hamming Encoder输出信号频谱

11

图12 AWGN Channel输出信号

图13 AWGN Channel输出信号频谱

12

图14 Hamming decoder输出信号

图15 Hamming decoder输出信号频谱

13

图16 SNR=10dB的误码率

图17 输入信噪比与输出误码率的关系曲线图

3.2.4仿真结果分析

通过结果可知,汉明码可以降低误码率,提高系统抗干扰能力。在SIMULINK仿真中,利用ratio文件编程绘制误码率函数曲线近似于一条直线,但是若直接控制AWGN参数模块的SNR,误码率发生变化,比较奇怪,不明白。

14

4.总结

这次通信原理课程设计的题目是汉明码的编码、译码的仿真。通过到图书馆查阅相关的资料,得知汉明码的编码、译码仿真可以用FPGA和MATLAB来做。

为了尽可能多地学到知识,我们选择了一组用FPGA,另一组用MATLAB。因为之前并没有接触过MATLAB中的SIMULINK,所以在画原理图和设置参数的时候遇到了不少困难。但好在网上可借鉴的资源很多,通过学习相关的教程和查阅MATLAB中的help,这些困难都迎刃而解了。这其中我深刻地体会到专业英语的重要性。可想而知,多积累点英语对今后的工作、学习将有极大的帮助。

通过本次学习,我再一次体会到MATLAB的强大。丰富的库函数、强大的数据处理能力,出色的绘图功能,友好的工作平台,简单一用的操作语言等等,这些优点都促使MATLAB成为数学处理软件发展史上的巅峰之作。这激发了我之后学习MATLAB的决心。

知识的构架是千枝交错的。学到大学,知识之间相互渗透的现象可谓比比皆是,

这启发我们不仅要发散思维的领域,也要拓宽知识的领域。对与本专业相关的领域多加了解百利而无一害。

最后,还是那句话,实践出真知。在渴望知识的道路上,用双脚探索出来的路

才是你自己的路。我还将上下左右而求索。

15

参考文献

[1] 葛哲学.精通MATLAB.北京:电子工业出版社,2008年. [2] 樊昌信,曹丽娜.通信原理.北京:国防工业出版社,2008年.

[3]赵静.基于MATLAB的通信系统仿真.北京:北京航空航天大学出版社,2008年. [4]韩利竹,王华.MATLAB电子仿真与应用.北京:国防工业出版社,2003年.

16