您的当前位置:首页正文

实验五汉明码的编译码

来源:帮我找美食网
《数据通信原理》实验报告

实验题目: 专业班级: 姓名学号: 指导教师:

、实验目的

汉明码的编译码 信息工程2班

叔星敏201342351

刘饪

实验五汉明码的编译码

李明阳201342300

1、 理解汉明码的编码原理

2、 掌握利用simulink进行汉明码编译码仿真的方法 3、 掌握利用mat lab指令进行汉明码编译码的方法

二、实验原理

在数字通信系统中,为了实现信息的可靠传输,需要采用差错控制来发现并 纠正错 误。进行差错控制的方法就是对信息进行差错控制编码,差错控制编码种类较多,其中线 性分组码是常用的一类编码,具有编码效率高,实现较简单以及检 纠错能力较强等特点。

一般数字通信系统模型山信源信宿、加解密、编解码、调制解调等模块组成,其中有 些通信模块是组成整个通信系统所必不可少的,有些模块是可以不需要的。差错控制编解 码属于编解码器通信模块,为了方便分析差错控制编码性能,通过将通信系统简化为如图 5-1所示的信息传输系统来搭建仿真实验平台进行 分析研究°

差错控制解码器一》信宿

图5-1

编码,有时也称为纠错编码。不同的编码方法,有不同的检错或纠错能力,有的编码 只能检错,不能纠错。一般说来,付出的代价越大,检纠错的能力就越强。在选择差错控 制编码时需要考虑到编码效率、检纠错的能力等方面因素的影响。按照是否将信息码元进 行分组可以将差错控制编码分为分组码和非分组码,线性码是指信息位和监督位满足一组 线性方程的码,任一(n, k)线性分组码的编码效率为k/no Simulink通信模块中提供 了二进制线性分组码编解码器:Binary

Linear Encoder 和 Binary Linear Decoder -

汉明码是汉明(Hamming)于1950年提出的能纠正一位错码且编码效率较高 的线性 分组码,它可以用一种简洁有效的方法进行解码。汉明码不是仅指某一种码,而是指一类 码。二进制汉明码应满足条件:2%1+n,令m=n-k,汉明码n和k服从矢系式:码长n二 2=-1;信息位k=2。-

1-m;最小距离dmin二3(指汉明距离)。当nr3, 4, 5, 6, 7, &… 时 , 分 另【【有 (7,4), (15, 11), (31,26), (63, 57), (127, 120), (255, 247),

…汉明码。

汉明码的基本思想:在k个信息位上加r个校验位,构成n二k+r位的码字,其中 每个校验位和某儿个特定的信息位构成偶校验的矢系。接收端对这r个偶矢系进行校 验,即将每个校验位与它矢联的信息位进行异或加,相异或的结果称为校正因子。如果 没有错的话,这r个校正因子都为0:如果有一个错则校正因子不会全为0,根据校正因 子的不同取值,可以知道错误发生在码字的哪一个位置上。线性分组码的生成原理与 Hamming码基本一致,下面以(7, 4)

Hamming码为 例简单地介绍一下汉明码的构造 过程。

构造一个⑺4)汉明码,就是求出它的生成矩阵,或等效地,求出它的监督 矩阵

(也叫校验矩阵)。山于(7, 4)汉明码的校验矩阵是矩阵,而监督矩阵的列矢量不能

为全零(零与任何码元的乘积为零,失去检验功能),因此监督矩阵H的7个列矢量正

好是除全零矢量外3重矢量的全部可能组合。将[001] \\ [010]\\ [011]\\ [100]\\ [101]\\

[110]\\ [111]排列起来就是监督矩阵,排列顺序不同,所得矩阵也就不同,说

明H不是唯一的。ill于交换列不会影响最小距离,所以可以通过列置换将最初的H变换 为系统形式的H (若信息组以不变的形式,在码字的任意k位中岀现,则称该码为系统 码。否则,称为非系统码),成为系统汉明码:

1

0 0 0 111 H= 0 1 10 0 1

10 10 10 1

经过变换,整理为典型监督矩阵形式为

r

0 1 1110

110 1

0 0 =[PI}]

//= 1 0

1 10 10 0 1

根据校验矩阵与生成矩阵的转换矢系式得到系统汉明码的生成矩阵G为:

10 0 0

0

0 1 1 0 1 1 1 1

1 1 0

1

G= KP =

1k

0 0

这样输入信息组m二[nh, m:

mJ,将m与G相乘即得到编码后的码字A。

当数字信号编码成汉明码形式后在信道中传输,由于信道中噪声的干扰,可

能山于干扰引入差错,使得接收端收到错码 信系统的抗干扰能力及可靠性O

因此在接收端进行汉明码纠错,以提高通

解码的时候将接收到的信息组r与Hl相乘,如果rH-O,

接收码组无错;如果rHVO,则根据译码图样进行纠错。Simulink通信模块中提供f Hamming 码编解码器:Hamming Encoder 和 Hamming Decoder。 三、实验内容

1、simulink仿真汉明码编译码过程

汉明码编译码仿真的模型图如图5-2所示。

各模块参数及说明:

①Bernoulli Binary Generator (伯努利:进制随机数产生器)

模块描述:产生服从伯努利分布的随机二进制序列,模块的输出可以是帧结构的矩阵, 也可以是数据流形式的行或列向量或一维数组。

模块位置:Communications Blockset-Comm Sources-Random Data Sources-

Bernoulli Binary Generator

数:

参数说明:

Probability of a zero:模块产生的二进制序列中出再0的概率。 Initial seed:随

机数种子,不同的随机数种子通常产生不同的序列。

Sample time:抽样时间,表示输出序列中每个二进制符号的持续时间。此处参数表示 在0. 02秒内产生4个比特。

Frame-based outputs:选种表示输出为帧格式,否则输出数据流。

Samples per frame:只有Frame-based outputs选种后才可编辑此参数,它表 示输 出

一帧中包含的抽样点数。此处表示1帧由4个比特组成。

② Hamming Encode (汉明码编码器)

模块描述:用于对输入信息进行汉明编码,汉明码是一种能够纠正一位错误的红 性分组码,码长为\\。该信息位的长度为K,其中,N二2 了・1

(M>=3) , K二N-M。

模块位置:Communications Blockset-Error Detection and Correction- Block-

Hamming Encode

模块参数:

Parameters

Codeword length N:

Message Length・ K。or M-degree primitive polynomial:

F ③ Binary Symmetric Channel ( —•进制对称信道)

模块描述:用于对二进抽制信号的误比特率性能进行仿真,添加二进制噪声到输入信 号,可以是

标量、数据流向量或帧结构的行向量。

模块位置:Communications Bl ockset-Channe 1 s Binary Symmetric Channel 模块参数:

参数说明:

Error probab订ity :添加噪声比特的概率。 ④Hamming Decode (汉明码译码器)

模块描述:创建一个码长为N,信息码长为K的汉明码。其中,

N=2-1 (M>=3) , K=X-Mo

模块位置:Communications Blockset-Error Det ection and Correct ion-

X

Block- Hamming Decode

模块参数:此处的两个参数要与前面的Hamming Encode参数一致。

Parameters Codeword length N: Message Length. K? or MMdegree primitive polynomial:

⑤ Error Rate Calculation (误码率计算)

模块描述:通过比较传输数据和接收数据来计算误码率,模块的输出数据是长度为3的 向量,其中每个元素的意义分别是:误码率或误比物率、总的错误个数、总的参加比较 的符号或比特数。 模块位置:Communications Blockset-Comm Sinks-Error Rate Calculation 模块 参数:

参数说明:

Receive delay:指定接收方滞后发送的抽样点数,即接收的第儿个值对应发送的第一Comput at ion delay:指定开始比较时模块忽略的抽样点数。 Computation mode:指定模块是比较全部还是输入数据。 Output data:指定计算结果是输出到工作区还是端口。 ⑥To Workspace (输出到工作区)

模块描述:写入专门的数据到MATLAB的主工作区。数据不可用直到仿真结束或暂停。 模块位置:Simulink -Sinks To Workspace 模块参数:

参数说明:

Variable name:写入工作区间的数据名称,默认为simouto

Limit data points to last:模块最多可以保留的数据个数,inf表示无穷大。 Decimation:写入数据的抽样频率‘即每隔多少抽样点输入一个值。

个值。 Sample time:写入数据的抽样时间,默认值为T,表示与上一模块抽样时间相同 Save format:输出数据的形式。

⑦Display (显示仿真结果) 模块描述:显示结果

模块位置:Simulink -Sinks-Display 模块参数:

Parameters Fgmt: I short DecimationV

1一 Fl o=aii spl ay

IF

Sample 七 im 电 C~1 for inherited.) !

参数说明:

Format:显示在模块对话框上的数据形式,short显示小数据点后5位数字。

2、利用mat lab语句进行汉明码编译码

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

将用到的程序函数说明如下:

①encode函数

功能:编码函数

语法:code二encode (msg, N, K, hamming * )

说明:该函数对二进制信息msg进行汉明编码,K为信息位长度,N为码字长度。 是一个任意行K列的矩阵。 比如:

» code 二 encode([1 0 0 0;1 1 0

lamming'

运行结果为:

msg

code

110 10 0 0 0 1 1 ②decode函数

功能:译码函数 语法:rcvcode二decode (code, N, K, hamming* )

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

比如,在①结果的基础上:

» rcvcode 二 decode(code, 7, 4, ' hamming')

运行结果为:

rcvcode =

10 0 0 110 1

③randint函数

功能:产生一个均匀分布的维的整数矩阵,矩阵的元素是随机的。 语法:randint (m, n)

说明:randint (m, n),矩阵中的元素或者是0或者是1, 0或者1的出现是随机的。 比如:

» randint(3, 2)

运行结果为:

ans 二

0 0 0

0 1 1

语法:randint (m, n, range)

说明:产生一个ni*n的随机矩阵,矩阵元素值的范Rllllrange确定。比如range设 定 为一个区间:randint (2, 3, [1 6]),就是产生一个2*3随机矩阵,这个矩阵的元素 是区间

[1 6]的随机整数。

比如:

» randint (3, 2, [1 2])

运行结果为:

ans

2 1 1 2 1

2

⑤rem函数 功能:求余数

语法:R二rem(X, Y),求X除以Y的余数,X, Y应该为正数。当Y为2时,相当于模二算。

@randerr 函数

功能:产生比特误差样本 语法:randerr (A, B) 说明:

产生A行B列的随机误差样本矩阵 比如:

» randerr(3, 2)

运行结果为:

ans —

0 1 1 0 0

1

说明:计算A、B两个矩阵中的误比特数,返回给num,讣算误码率返回rat

⑦biterr函数

功能:计算误比特数和误比特率

语法:[num, rat]二bi terr (A, B)

说明:计算A、B两个矩阵中的误比特数,返回给num,计算误码率返回wt

运 参考mat lab编译码的指令代码为:

K 二 4; N 二 7;

row num=20: msg=randint (row_num, 4) %信息产生 产生row_num行4列的二进制随

机矩

阵,r ow_num表示要对r ow_nuni组信息数进行编码

code encode (msg, N, K, hamming') %(7, 4)汉明编码,输出为 3 行 7 列的 已编码

矩阵

nois=randerr(row_num, N)

code_noise=rem(code(:, :)+nois(:, :), 2) %编码后进入有噪信道,则加上噪声 (3行7列的随机数)rem运算相当于取了模二和code(:, : )+nois(:,:)表示两个 二维

矩阵求和

rev 二 decode (code_noise, N, K, 'hamming') %汉明译码

[num, rat] =biterr (rev, msg) %比较编码询和译码后矩阵,计算误码率 运行指令的方

法:

1、 直接在mat lab的command window窗「1卜-输入上述语句。

2、 在mat lab主界面下,新建一个空白文档,输入以下命令行,然后保存为*・m文件。 按F5

键,或者在.m文件界面选择菜单debug-run运行,运行结果会显示在mat lab fit)

command window 窗口下。

四、实验结果

五、实验结论

通过结果可知,汉明码可以降低误码率,提高系统抗干扰能力。

六、实验总结

通过这次通信原理课程设汁的题U是汉明码的编码、译码。因为之前并没有接触过 MATLAB中的SIMULINK,所以在画原理图和设置参数的时候遇到了不少困难。但好在网上 可借鉴的资源很多,通过学习相矢的教程和查阅MATLAB中的help,这些困难都迎刃而解 T。这其中我深刻地体会到专业英语的重要性。可想 而知,多积累点英语对今后的工作、 学习将有极大的帮助。通过本次学习,我再一次体会到

MATLAB的强大。丰富的库函数、 强大的数据处理能力,出色的绘图功

能,友好的工作平台,简单一用的操作语言等等,这 些优点都促使MATLAB成 为数学处理软件发展史上的巅峰之作。这激发了我之后学习 MATLAB的决心。知识的构架是千枝交错的。学到大学,知识之间相互渗透的现象可谓比 比皆是,这启发我们不仅要发散思维的领域,也要拓宽知识的领域。对与本专业相矢的领 域多加了解白利而无一害。最后,还是那句话,实践出真知。在渴望知识的道路上,用双 脚探索出来的路才是你自己的路。我还将上下左右而求索。

(注:本资料素材和资料部分来自网络,仅供参考。请预览后才下载,期待您的好评与 矢注!)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top