的分组码,并使得译码的平均差错概率
[9]。
上述定理描述的是:
只要信息在传输过程中满足速率比信道容量小,就存在一类编码,可以使信息传输的错误概率非常小,理论上达到0也是可能的。
其一般的思路就是通过构造一个理想的码,之后再定义一个译码规则,最后计算这个码的误码率。
1.2.1线性分组码
线性分组码从字面上可以理解为既是线性码也是分组码。
由码的分类知道,监督码元仅与本组监督码元有关的码称为分组码,监督码元与信息码元之间的关系可以用线性方程表示的码称为线性码[5]。
所以,在线性分组码中,一个码字中的监督码元只与这个码字中的信息码元相关,而且这种关系是使用线性方程来表示的。
线性分组码也是属于奇偶效验码,其形式是由(n,k)表示的。
编码器将一个k比特信息分组转变为一个更长的由给定元素符号集组成的n比特编码分组。
如果此元素符号集只是包含0和1两个元素的时候,与二进制相对,就被称为二进制编码[6]。
以长度为n的二进制分组码为例,可将其表示成(n,k)的形式,它一般情况用于前向纠错。
在分组码中,监督位加到信息位之后就生成新的码,在编码过程中,k个信息位加入监督位形成n位长度,n-k为监督码的个数,用以实现检错和纠错[7]。
1.2.2循环码
循环码它是一种重要的线性分组码。
如果线性分组码中的任一码字循环移位之后得到的码字在该码字集中仍然存在,那么就把这种线性分组码称为循环码。
可以知道在循环码中两个码字之和还是该码字中的一个码字。
循环码是由其码字长度n及生成多项式g(x)所决定。
除去全零的码字外,循环码中次数最低的码字多项式称为生成的多项式[8]。
循环码的生成多项式g(x)有以下三个特性:
(1)g(x)是
的一个因子。
(2)g(x)是r=n-k次多项式。
(3)g(x)的常数项为1.
1.2.3卷积码
卷积码是在线性码之后提出的,但是卷积码和线性分组码有很大不同,首先卷积码是属于非分组码的,它的所有(n,k)码字内的n个码元不仅与该码字内的信息码元有关,还与前面m个码字内的信息码元有关联。
或者说,各子码内的监督码元不仅对本子码起监督作用,而且对前面m个子码内的信息码元也起着监督作用[10]。
所以,卷积码通常用(n,k,m)表示。
通常称m为编译存储,它反映了输入信息码元在编码器中需要存储时间长短;称N=m+1为编码约束度,它是相互约束的码字个数;称nN为编码约束长度,它是相互约束的码元个数。
卷积码也有系统码和非系统码两种情况,如果其子码是系统码,则称这个卷积码为系统卷积码,反之,就是非系统卷积码。
2MATLAB简介
2.1MATLAB
MATLAB是英文MATrixLABoratory缩写的意思,矩阵实验室是其中文翻译,它是一款商业数学软件。
MATLAB是用于数据可视化、交互式环境和数据分析的高级技术计算语言和交互环境。
MATLAB矩阵运算、实现算法,绘制函数和数据图像是其常用的功能,MATLAB也用来创建用户界面及与调用一些例如C,C++的语言编写的程序[12]。
MATLAB的基本数据单位是矩阵,与一般我们在数学等领域用到的表达式相比,它们及其相似,也是因此,相对于用C、C++等语言来解决运算问题,用MATLAB要比它们简单很多,使之成为一个非常强大的数学软件。
还有一点就是它有很强的荣扩性,能直接调用其他语言编写的程序,将程序导入MATLAB函数库中就能很好的使用,也可以直接运行一些已经被编好的程序。
Matlab的特点:
(1)此高级语言可以用于技术计算
(2)此开发环境可对代码、文件及数据进行管理
(3)其内部的二维或三维图形函数一般用于可视化数据
(4)交互式工具可以按迭代的方式探查、设计及求解问题
(5)其数学函数一般用于fft分析、线性代数、统计等功能
(6)各种工具可用于构建自定义的图形用户界面
(7)各种函数可集成一些外部应用程序或语言,例如C、C++、Java等
2.2Simulink简介
Simulink是可视化动态系统仿真环境,其拥有动态系统建模和仿真的功能。
Simulink是MATLAB最重要的组件之一,其集成环境具有综合分析的能力[20]。
在这个环境中,根本不用大量书写程序,仅仅通过简单操作,就能构造出复杂的系统,用于仿真分析等。
在MATLAB中,Simulink是的一种可视化仿真工具,是实现动态系统建模、仿真和分析的一个软件包,被广泛应用于线性和非线性系统、数字控制及数字信号处理的建模和仿真中[13]。
.
Simulink的优点:
(1)直接通过图形搭建模型,不需要编程,用户使用起来很方便。
(2)具有结构和流程清晰,效率很高,灵活性强等优点;
(3)其扩展能力较强、移植性和开发性好
(4)语言简洁,内容丰富
3汉明码
3.1汉明码编码原理
在电信领域,汉明码是一种线性调试码。
当计算机进行存储或转移等操作时,其数据位上的信息很有可能会产生错误,这种情况发生时就需要利用汉明码来对其检测并纠错。
汉明码是一个错误校验码码集,是Hamming发明,所以命名为汉明码。
汉明码也利用了奇偶校验位的概念,这一点与其他的错误校验码相似。
通过在数据位之后添加加一定数量比特,就能达到验证数据的有效性的目的,这种方法非常实用。
它是通过利用多余一个的校验位,来验证数据的有效性,以及在出错的情况下找到错误的位置,方便纠错。
在接受端纠错译码,通过自动纠正传输中的差错来实现码纠错功能,称为前向纠错FEC。
FEC属于三种常用的差错控制方式中的一种,另外两种分别是检错重发(ARQ)以及混合纠错。
而FEC的特点主要体现在其根本不需要反向信道而且实时性非常好。
前向纠错码(FEC)的码字是具有一定纠错能力的码,它是自动纠错的,在接收端译码后,对其中错误的码进行自动纠错,不需人为操纵。
汉明码就是利用奇偶块机制从而达到降低了前向纠错的成本的目的。
进行奇偶校验的方法:
先计算数据中1的个数,然后通过增加一个0或1(称为校验位),使1的个数变为奇数就叫奇校验,变成偶数就叫偶校验。
汉明码是编码效率较高的线性分组码,解码方式简单、方便、有效。
汉明码指某一种码这种说法不太正确,它其实而指一类码。
当m=3,4,5,6,7,…时,分别有(7,4),(15,11),(31,26),(63,57),…汉明码。
下面以(7,4)hamming码为例,简单介绍其参数:
码长:
信息位:
效验位:
(m大于等于3)
最小码距:
其生成矩阵G如下:
(其中前四位是信息位,后三位是监督位)
此次也是利用(7,4)汉明码进行仿真,使用的是高斯白噪声信道,可以通过观察仿真结果观察其编译码性能的优缺点。
3.2汉明码对高斯白噪声信道编码及仿真
3.2.1
对仿真过程进行分析,确定编码过程中需要使用的函数,分放置在.m文件中。
代码见附录一。
编译码程序是由一个主程序和6个子函数组成。
Number.m为随机信号源函数,Hm74.m和Dehm74.m分别为汉明码编码和解码函数,Modd.m和Demod.m分别为调制和解调函数。
Noise.m为产生高斯噪声函数,Exception.m文件中为业务控制函数,Main.m为主程序文件。
Number.m中随机信号源函数,rc=rand(k,1)中rand函数是产生在(0,1)之间均匀分布的随机数组成的数组。
这里是生成4乘1的矩阵。
数组中的数大于等于0.5输出1,小于0,5输出0,就得到了信息矩阵。
Hm74.m中函数为汉明码编码过程,先将随机信息矩阵、信息位k、矩阵P传入函数,通过Y=eye(k)得到k*k的单位矩阵,后面的G=[Y,P']就得到相应的生成矩阵G,rem(ic*G,2)函数用来求两数的余数,因此就可以求出信息矩阵通过生成矩阵G后生成的码字,将生成码字赋给code。
Modd.m中Modd()函数其中传入Hm74函数求得的生成码字、信息位k、监督位r,将生成码字中的值放入循环中,根据条件输出对应的载波信号1和-1。
Noise.m中noise函数是传入的是信号的分贝值SNR、信息位k以及监督位r的值。
函数中snr=10^(snr/10)就将对应的分贝转换成了对应的信噪比snr,再根据信息位与码长(信息位k加监督位r)之比得到编码效率,一般情况下,编码效率越高,传输效率越高,但纠错或是检错的能力会降低一些。
根据对信噪比、编码效率进行运算,再加入一个1*k+r的矩阵,就得到了经过高斯白噪声信道之后的码字。
Demod.m中Demod()函数将已调信号中携带的信号恢复出来的过程。
将载波信号1、-1转换为对应的1*7的0、1序列矩阵。
Dehm74.m中Dehm74()函数为汉明码译码过程。
函数传入的数据有解调后的信息矩阵in,信息位k、监督位r、矩阵P的值,得到码长m,然后先是生成r*r的单位矩阵,再将其与矩阵P结合得监督矩阵H,通过rem(in*H,2)将信息矩阵in与H的转置矩阵
相乘再取余得到输出的信息码S,利用H(:
n)取得监督矩阵H中第1列到第7列的数据赋给h。
将循环得到的每一个h的转置
与S做比较,当它们相等时跳出循环,得到此时的n值,将信号矩阵in的第n位上的数字做一次改变由0变为1,或者由1变0,就达到了纠错一位码字的功能。
将修改后的k位信息码输出。
Example.m中定义了信号位k、监督位r的值,监督矩阵P,给出测试数据包的数量以及用来统计译码后错误码元的数量w的初始值0。
通过调用随机信号源、编码译码、调制解调等函数得到译码后输出的信息码dhc,将其与随机信号函数得到的信息码ic进行比较,不相等的情况下w自增1,得打所以测试数据包检测完后的w。
代码中通过BER=w/(N*k)就就将误码率求出来了。
Main.m为主程序文件,定义一个信噪比s变量,调用Example函数,run(运行)主程序输出信噪比和误码率的关系曲线图。
Main.m函数仿真结果如图3-1所示:
2
图3-1误码率曲线图
观察图3-1中发现,汉明码的编码效率很好,在高斯白噪声信道中,当信噪比较小时,误码率略高,但当信噪比不断增大时,误码率随之越来越低了,理论上当信噪比非常大的时候,误码就会无限接近于0或等于0,
此设计代码完成了汉明码的编码和译码过程,令人遗憾的是,汉明码的编码效率虽好,但它是不能同时对7位码字进行两位纠错的,也就是说,只能完成一位信息码的纠错。
这一点制约了汉明码在实际系统的应用,如果能通过整合其他技术,到达检错并纠错多位码元,那么汉明码的发展前景会非常大。
4循环码
4.1循环码编译码原理
循环码的编码系统是以比特组为基础建立起来的,也就是字节了,但不要理解为它是单个的0和1,也就是说是非二进制BCH码,这种非二进制BCH码具有很强的处理突发错误的能力,在这一点上汉明码是不具有的。
循环码的特点:
(1)循环码是一类重要的线性分组码,因此它具有线性分组码的一般特性,还具有循环性,纠错能力强的特点。
(2)循环码是一种无权码,其相邻数码间只有一位码元不同,因此它它满足邻接条件,没有瞬时错误的优点。
循环码完全由其码字长度n及生成多项式g(x)所决定。
以(7,4)循环码为例,n=7,k=4,r=3.生成多项式为
,效验多项式为
。
其生成矩阵和效验矩阵分别为:
4.1.1编码原理
在讨论循环码时,一般是用代数多项式来表示循环码的码字,此多项式就被称为码字多项式了。
对于(n,k)循环码的码字,其码字多项式的一般形式为式(4-1):
(4-1)
系统循环码的码字多项式可表示为式(4-2):
(4-2)
其中,前一部分代表信息码元组,后一部分用[]’表示,是
被g(x)除得的余式,它代表监督码组。
(1)有信息码构成信息多项式:
,其中高幂次为k-1。
(2)用
乘上信息多项式m(x),得最高幂次为n-1,做移位。
(3)用g(x)除
和到余式r(x)。
4.1.2译码原理
发送码字多项式A(x)是生成多项式g(x)的倍式,换言之,生成多项式g(x)能将发送码字多项式A(x)整除.如果码字经信道传输后没有发生错误,那么接收码字多项式B(x)也是生成多项式g(x)的倍式,但如果码字在传输过程中发生错误,则接收码字多项式不再是生成多项式g(x)的倍式,即此时g(x)不能整除接收码字多项式[15]。
所以定义伴随多项式S(x)为:
(4-3)
即S(x)是接收码字多项式B(x)除以g(x)后的余式,是不大于r-1次多项式。
接收码字多项式B(x)是发送码字多项式A(x)和差错多项式e(x)(错误图样所对应的多项式)相加的结果,即
(4-4)
得:
(4-5)
由式可发现,伴随多项式只与差错多项式有关。
所以,循环码的译码过程也可以归纳为如下三个步骤:
(1)根据式(4-5)计算出可纠错图样多项式e(x)的伴随式S(x),将e(x)与S(x)的对应关系列成译码表。
(2)当收到一个码字B(x)后,利用式(4-3)求出伴随式S(x),对照译码表找到e(x);
(3)利用式(4-4)求出发送码字A(x),即
.
4.1.3循环码的检错与纠错
循环码的译码是可以检测和纠正突发错误的。
循环码的检错能力优越于其它码主要表现在他的超强检错能力和超强纠错能力,它的超强检错能力具体表现在以下的方面:
(1)能检出全部单个错码;
(2)能检查全部离散的二位错码;
(3)能检测出所以的奇数个错码;
(4)能检测所以