差错控制编码解决加性噪声 开题报告
毕业设计(论文)的主要内容:
首先建立有、无加性噪声的信道传输模型,然后对比有、无采用差错控制编码技术所统计的误码率,再对误码率进行比较,得出正确结论。
差错控制编码采用hamming码,BCH编码。
设计(论文)的技术路线及预期目标:
使用Matlab构建仿真模型,发送一随机的二进制信号,再将二进制信号转换成矩形波输出,接着对矩形波进行采样,判决,最后比较误码率,结果应该是没有误码。
接着就要加入噪声,再比较误码率,结果应该是有误码出现。最后就要加入编码,再比较误码率,结果应该是误码率大大降低。
课题进度计划
3月份:收集资料,熟悉理论及平台
4月份:构建仿真模型,编写具体程序
5月份:编写论文,准备答辩
完成课题所需条件及落实措施:
使用Matlab仿真软件做平台,编写.m源程序。
参考文献、资料:
[1] 樊昌信. 通信原理. 北京:国防工业出版社,2001.5--5
[2] 徐明远,邵玉斌. MATLAB仿真在通信与电子工程中的应用,西安:西安电子科技大学出版社, 2005.6—1
[3] 王新梅 纠错码-原理与方法.西安:西安电子科技大学出版社,1991
[4] 张贤达,通信信号处理.北京:国防工业出版社,34
差错控制编码解决加性噪声
目录
摘要... iii
Abstract iii
前言... iv
第一章 差错控制编码的基本理论... 1
1.1 差错控制方式... 1
1.2 差错控制编码的分类... 2
1.3 检错和纠错的基本原理... 3
1.4 汉明(Hamming)码... 5
1.5 BCH码... 7
第二章 介绍Matlab仿真语言... 8
2.1 Matlab语言发展简介... 8
2.2 Matlab的程序设计... 10
2.2.1 .M文件简介... 10
2.2.2 程序控制流语句... 11
第三章 差错控制编码解决加性噪声... 13
3.1 无噪声,无编码... 13
3.2 无噪声,有编码... 14
3.3 有噪声,无编码... 16
3.4 有噪声,有hamming(7,4)编码... 18
3.5 有噪声,有BCH(7,4)编码... 22
3.6 有噪声,有BCH(15,5)编码... 24
结论... 28
结论... 28
总结与体会... 29
谢辞... 30
参考文献... 31
附录一 .m程序... 32
程序一. 无噪声,无编码... 32
程序二. 无噪声,有编码... 33
程序三. 有噪声,无编码... 34
程序四. 有噪声,有hamming(7,4)编码... 35
程序五. 有噪声,有BCH(7,4)编码... 37
程序六. 有噪声,有BCH(15,5)编码... 39
附录二 英文翻译... 42
BCH Codes. 42
BCH编码... 54
差错控制编码解决加性噪声
摘要
本文介绍了差错控制编码中的Hamming码和BCH码解决加性噪声的.m源程序仿真方法,使用了Matlab仿真工具,通过对有无噪声,有无编码,以及使用不同编码等多种情况的仿真,得出误码主要是有噪声引起的,差错控制编码可以有效的降低误码率。
关键词:差错控制编码加性噪声 Hamming码 BCH码 Matlab 误码率
Abstract
This article introduce in the error control coding by using Hamming code and the BCH code to solution additive noise simulation method of m the source program, has used the Matlab simulation the many kinds of situations simulation, obtains harms the code mainly to have the noise to cause, the error control coding may effective reduce the error rate
Key Words:Error control coding additive noise Hamming code
BCH code Matlab Error rate
前言
在实际信道上传输数字信号时,由于信道传输特性不理想及加性噪声的影响,接收端所收到的数字信号不可避免地会发生错误。为了在已知信噪比情况下达到一定的比特误码率指标,首先应该合理设计基带信号,选择调制解调方式,采用时域、频域均衡,使比特误码率尽可能降低。但实际上,在许多通信系统中的比特误码率并不能满足实际的需求。此时则必须采用信道编码(即差错控制编码)才能将比特误码率进一步降低,以满足系统指标要求。
差错控制随着差错控制编码理论的完善和数字电路技术的飞速发展,信道编码已经成功地应用于各种通信系统中,并且在计算机、磁记录与各种存储器中也得到日益广泛的应用。差错控制编码的基本实现方法是在发送端将被传输的信息附上一些监督码元,这些多余的码元与信息码元之间以某种确定的规则相互关联(约束)。接收端按照既定的规则校验信息码元与监督码元之间的关系,一旦传输发生差错,则信息码元与监督码元的关系就受到破坏,从而接收端可以发现错误乃至纠正错误。因此,研究各种编码和译码方法是差错控制编码所要解决的问题。 编码涉及到的内容也比较广泛,前向纠错编码(FEC)、线性分组码(汉明码、循环码)、理德-所罗门码(RS码)、BCH码、FIRE码、交织码,卷积码、TCM编码、Turbo码等都是差错控制编码的研究范畴。本文只对其中的汉明码、BCH码做介绍,并对相关内容进行仿真。
差错控制编码解决加性噪声
第一章 差错控制编码的基本理论
1.1 差错控制方式
1、检错重发方式(ARQ)2、前向纠错方式(FEC)3、混合纠错检错方式(HEC)4、反馈校验方式(IRQ)
1、检错重发方式(ARQ)。 采用检错重发方式,发端经编码后发出能够发现错误的码,接收端收到后经检验如果发现传输中有错误,则通过反向信道把这一判断结果反馈给发送端。然后,发送端把信息重发一次,直到接收端确认为止。采用这种差错控制方法需要具备双向通道,一般在计算机数据通信中应用。检错重发方式分为三种类型,如图所示。图中ACK是确认信号,NAK是否认信号。 (1)停发等待重发,发对或发错,发送端均要等待接收端的回应。特点是系统简单,时延长。 (2)返回重发,无ACK信号,当发送端收到NAK信号后,重发错误码组以后的所有码组,特点是系统较为复杂,时延减小。 (3)选择重发。无ACK信号,当发送端收到NAK信号后,重发错误码组,特点是系统复杂,时延最小。 2、前向纠错方式(FEC)。 发送端经编码发出能纠正错误的码,接收端收到这些码组后,通过译码能发现并纠正误码。前向纠错方式不需要反馈通道,特别适合只能提供单向信道的场合,特点是时延小,实时性好,但系统复杂。但随着编码理论和微电子技术的发展,编译码设备成本下降,加之有单向通信和控制电路简单的优点,在实际应用中日益增多。3、混合纠错检错方式(HEC)。 混合纠错检错方式是前向纠错方式和检错重发方式的结合,发送端发出的码不但有一定的纠错能力,对于超出纠错能力的错误要具有检错能力。这种方式在实时性和复杂性方面是前向纠错和检错重发方式的折衷,因而在近年来,在数据通信系统中采用较多。4、反馈校验方式(IRQ)。 反馈校验方式(IRQ)又称回程校验。收端把收到的数据序列全部由反向信道送回发送端,发送端比较发送数据与回送数据,从而发现是否有错误,并把认为错误的数据重新发送,直到发送端没有发现错误为止。 优点:不需要纠错、检错的编译器,设备简单。 缺点:需要反向信道;实时性差;发送端需要一定容量的存储器。IRQ方式仅适用于传输速率较低、数据差错率较低的控制简单的系统中。
1.2 差错控制编码的分类
1、按照差错控制编码的不同功能,可以分为检错码(仅能检测误码)、纠错码(仅可以纠正误码)和纠删码(兼有纠错和检错功能)。2、按照信息码元和附加的监督码元之间的检验关系可以分为线性码(信息码元和监督码元满足一组线性方程式)和非线性码。3、按照信息码元和监督码元之间的约束关系可以分为分组码和卷积码。分组码中,码元序列每n位分成一组,其中k个是信息码元,r=n-k个是监督码元,监督码元仅与本组的信息码元有关。卷积码中,编码后序列也编为分组,但监督码元不仅与本组信息码元有关,还与前面码组的信息码元有关。4、按照纠正错误的类型不同,可以分为纠正随机错误的码和纠正突发错误的码。5、按照构成差错控制编码的数学方法来分类,可以分为代数码、几何码和算术码。其中代数码建立在近代数学基础上,是目前发展最为完善的编码,其中线性码是是代数码的一个最重要的分支
6、按照每个码元的取值不同,可以分为二进制码和多进制码。
1.3 检错和纠错的基本原理
香农著名的信道编码定理指出:对于一个给定的有扰信道,若信道容量为C,只要发送端以低于C的速率R发送信息,则一定存在一种编码方法,使编码错误概率P随着码长n的增加,按指数下降到任意小的值。即可以通过增加冗余编码来降低误码率。 纠错编码的的基本思想就是在被传送的信息码元中附加一些监督码元,在两者之间建立某种校验关系,当这种校验关系因传输错误而受到破坏时,可以被发现并予以纠正。 这种检错和纠错能力是用信息量的冗余度来换取的。以一组二进制码为例 三位二进制码元有8个码组,如果用来表示天气的8种情况000(晴),001(雷),010(雹),011(阴),100(风),101(云),110(雨),111(雪),如果有一个误码,接收端以为是另一条信息,这种编码没有检错和纠错能力。 如果这8种码组只用来传送4条信息,即只准使用其中的4种码组000(晴),011(阴),101(云),110(雨),如果有一位误码,不会在接收端产生误判,会检出错误。
4个状态只用2位二进制码就可以表达,所增加的第3位,就称为监督码元。增加1位监督码元,只能检出1位误码,对于上例,如果有2位误码,将发生误判。如将000(晴)误传成101(云)。 要抗多位误码,就要增加监督码元的个数,即增加冗余度。码距与检错和纠错能力定义: 1、码重:码组中非零码元的个数。如001,码重为1;011,码重为2。 2、码距:两个码组中对应码位上具有的不同二进制码元的个数定义为两个码组的距离(汉明距,简称码距),如111和000,码距为3,111和100码距为2,111和110码距为1。 3、最小码距:对于许用的n个码组,各码组之间最小的码距称为最小码距若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn 对于如图所示的3位二进制码,如果8个码组可用,(000,001,010,011,100,101,110,111),各点之间最小相差1个边长,最小码距为1。 如果只有4个码组可用,选(010,111,100,001)或(110,011,000,101),各点之间相差2个边长,最小码距为2。 如果只有2个码组可用,分别选(111,000)(100,011)(110,001)(101,010),各点之间相差3个边长,最小码距为3。码距与检错和纠错能力 如上所述,一种编码的最小码距直接关系到这种码的检错和纠错能力,因此最小码距是信道编码的一个重要参数。在一般情况下,对于分组码有如下结论: (1)在一个码组内检测个e误码,要求最小码距
差错控制编码解决加性噪声
dmin>=e+1 (2)在一个码组内纠正个t误码,要求最小码距 dmin>=2t+1 (3)在一个码组内纠正t个误码,同时检测e个(e>=t)误码(当误码数大于t时就不能纠错,只能检测e个误码),要求最小码距 dmin>=t+e+1
1.4 汉明(Hamming)码
汉明码是1950年由美国贝尔实验室汉明提出来的,是第一个设计用来纠正错误的线性分组码,汉明码被广泛用于数字通信和数据存储系统中。 对于奇偶校验的偶校验,我们用下式作为作为监督方程。 在接收端译码时,若S=0,就认为无错。 若S=1,就认为有错。这里称S为校正子(校验子),又称伴随式。 在上例中,由于只有一位监督码元,一个监督方程,所以只能检错,无法纠错。 汉明码(n,k)是一种可用于纠单个随机错误的循环编码。一般汉明码的参数如下: 码长 n=2^r-1 信息位 k=2^r-1-r 监督位 r=n-k,r是不小于3的任意正整数。 (因为要纠t位错误,dmin大于2t+1) 最小汉明距离 d=3下表是纠错一位的一般汉明码结构。
码子长度n
信息位k
校验位r
7
4
3
15
11
4
31
26
5
63
57
6
(7,4)汉明码的编码器和译码器 若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
该仿真原理图包含两个子系统,分别是(7,4)汉明码的编码器和译码器。仿真时的信号源采用了一个PROM,并由用户自定义数据内容,数据的输出由一个计数器来定时驱动,每隔一秒输出一个4位数据(PROM的8位仅用了其中4位),由编码器子系统编码转换后成为7位汉明码,经过并串转换后传输,其中的并串、串并转换电路使用了扩展通信库2中的时分复用合路器和分路器图符,该合路器和分路器最大为16位长度的时隙转换,这里定义为7位时隙。此时由于输入输出数据的系统数据率不同,因此必须在子系统的输入端重新设置系统采样率,将系统设置为多速率系统。因为原始4位数据的刷新率为1Hz,因此编码器的输入端可设置重采样率位10Hz,时分复用合路器和分路器的数据帧周期设为1秒,时隙数位7,则输出采样率为输入采样率的7倍,即70Hz。如果要加入噪声,则噪声信号源的采样率也应设为70Hz。
1.5 BCH码
BCH码是循环码的一个重要子类,它具有纠多个错误的能力,BCH码有严密的代数理论,是目前研究最透彻的一类码。它的生成多项式与最小码距之间有密切的关系,人们可以根据所要求的纠错能力t很容易构造出BCH码,它们的译码器也容易实现,是线性分组码中应用最普遍的一类码。
BCH码的生成多项式若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
若循环码的生成多项式具有如下形式:
,这里t为纠错个数,为最小多项式,LCM表示取最小公倍式,则由此生成的循环码称之为BCH码。该码是以三个发现者博斯(Bose)、查德胡里(Chaudhuri)和霍昆格姆(Hocquenghem)名字的开头字母命名的。其最小码距dmin≥2t+1,能纠t个错误。BCH的码长为n=或的因子。码长为n=的BCH码称为本原BCH码。码长为因子的BCH码称为非本原BCH码。对于纠t个错误的本原BCH码,其生成多项式为 。纠正单个错误的本原BCH码就是循环汉明码。
下面介绍几种常见的BCH码。
1、戈雷码(Golay)
(23,12)码是一个特殊的非本原BCH码,称为戈雷码,它的最小码距7,能纠正3个错误,其生成多项式为。它也是目前为止发现的唯一能纠正多个错误的完备码。
2、扩展形式
实际应用中,为了得到偶数码长,并增加检错能力,可以在BCH码的生成多项式中乘D+1,从而得到(n+1,k+1)扩展BCH码。扩展BCH码相当于将原有BCH码再加上一位的偶校验,它不再有循环性。
3、缩短形式
几乎所以的循环码都存在它另一种缩短形式。实际应用中,可能需要不同的码长不是或它的因子,我们可以从 码中挑出前s位为0的码组构成新的码,这种码的监督位数不变,因此纠错能力保持不变,但是没有了循环性。
BCH译码
BCH码的译码方法可以有时域译码和频域译码两类。频移译码是把每个码组看成一个数字信号,把接受到的信号进行离散傅氏变换(DFT),然后利用数字信号处理技术在“频域”内译码,最后进行傅氏反变换得到译码后的码组。时域译码则是在时域直接利用码的代数结构进行译码。BCH的时域译码方法有很多,而且纠多个错误的BCH码译码算法十分复杂。常见的时域BCH译码方法有彼得森译码、迭代译码等。BCH的彼得森译码基本过程为:1、用的各因式作为除式,对接收到的码多项式求余,得到t个余式,称为“部分校验式”。2、用t个部分校验式构造一个特定的译码多项式,它以错误位置数为根。3、求译码多项式的根,得到错误位置。4、纠正错误。
事实上,BCH码是一种特殊的循环码,因此它的编码器不但可以象其它循环码那样用除法器来实现,而且原则上所有适合循环码译码的方法也可以用于BCH码的译码。
差错控制编码解决加性噪声
第二章 介绍Matlab仿真语言
2.1 Matlab语言发展简介
MATLAB 语言的首创者 Cleve Moler 教授在数值分析,特别是在数值线性代数的领域中很有影响,他参与编写了数值分析领域一些著名的著作和两个重要的 Fortran 程序 EISPACK 和LINPACK。他曾在密西根大学、斯坦福大学和新墨西哥大学任数学与计算机科学教授。1980 年前后,当时 的新墨西哥大学计算机系主任 Moler 教授在讲授线性代数课程时,发现了用其他高级语言编程极为不便,便构思并开发了 MATLAB (MATrix LABoratory,即矩阵实验室), 这一软件利用了当时数值线性代数领域最高水平的 EISPACK 和 LINPACK 两大软件包中可靠的子程序,用 Fortran 语言编写了集命令翻译、科学计算于一身的一套交互式软件系统。[EISPACK 和 LINPACK 可以来这里下载] 所谓交互式语言,是指人们给出一条命令,立即就可以得出该命令的结果。该语言无需像 C 和 Fortran 语言那样,首先要求使用者去编写源程序,然后对之进行编译、连接,最终形成可执行文件。这无疑会给使用者带来了极大的方便。早期的 MATLAB 是用 Fortran 语言编写的,只能作矩阵运算;绘图也只能用极其原始的方法,即用星号描点的形式画图;内部函数也只提供了几十个。但即使其当时的功能十分简单,当它作为免费软件出现以来,还是吸引了大批的使用者。[可以从这里下载 MATLAB 1.0 版本自己去体验一下。 Cleve Moler 和 John Little 等人成立了一个名叫 The MathWorks 的公司,Cleve Moler 一直任该公司的首席科学家。该公司于 1984 年推出了第一个 MATLAB 的商业版本。 当时的 MATLAB 版本已经用 C 语言作了完全的改写,其后又增添了丰富多彩的图形图像处理、多媒体功能、符号运算和它与其他流行软件的接口功能,使得 MATLAB 的功能越来越强大。 The MathWorks 公司于 1992 年推出了具有划时代意义的 MATLAB 4.0 版本,并于 1993 年推出了其微机版, 可以配合 Microsoft Windows 一起使用, 使之应用范围越来越广。 1994 年推出的 4.2 版本扩充了 4.0 版本的功能,尤其在图形界面设计方面更提供了新的方法。 1997 年推出的 MATLAB 5.0 版允许了更多的数据结构,如单元数据、数据结构体、多维矩阵、对象与类等,使其成为一种更方便编程的语言。1999 年初推出的 MATLAB 5.3 版在很多方面又进一步改进了 MATLAB 语言的功能。 2000 年 10 月底推出了其全新的 MATLAB 6.0 正式版(Release 12),在核心数值算法、界面设计、外部接口、应用桌面等诸多方面有了极大的改进。 虽然 MATLAB 语言是计算数学专家倡导并开发的,但其普及和发展离不开自动控制领域学者的贡献。 甚至可以说,MATLAB 语言是自动控制领域学者和工程技术人员捧红的,因为在 MATLAB 语言的发展进程中,许多有代表性的成就和控制界的要求与贡献是分不开的。迄今为止,大多数工具箱也都是控制方面的。MATLAB 具有强大的数学运算能力、方便实用的绘图功能及语言的高度集成性,它在其他科学与工程领域的应用也是越来越广,并且有着更广阔的应用前景和无穷无尽的潜能。子曰:“工欲善其事,必先利其器”。如果有一种十分有效的工具能解决在教学与研究中遇到的问题,那么 MATLAB 语言正是这样的一种工具。它可以将使用者从繁琐、无谓的底层编程中解放出来,把有限的宝贵时间更多地花在解决问题中,这样无疑会提高工作效率。目前,MATLAB 已经成为国际上最流行的科学与工程计算的软件工具,现在的 MATLAB 已经不仅仅是一个“矩阵实验室”了,它已经成为了一种具有广泛应用前景的全新的计算机高级编程语言了,有人称它为“第四代”计算机语言,它在国内外高校和研究部门正扮演着重要的角色。MATLAB 语言的功能也越来越强大,不断适应新的要求提出新的解决方法。可以预见,在科学运算、自动控制与科学绘图领域 MATLAB 语言将长期保持其独一无二的地位。
2.2 Matlab的程序设计
2.2.1 .M文件简介
Matlab 除了如前所述的在命令窗口进行的直接交互的指令操作方式外,另外一种更为重要的工作方式就是m 文件的编程工作方式。m 文件有两种形式,一种是脚本文件(Script File),另一种是函数文件(Function File)。m 文件的扩展名为\.m"。m 文件可以通过任何纯文本编辑器进行编辑,Matlab 中也有自带的文本编辑器,使用edit 命令即可开启.
2.2.2 程序控制流语句
任何计算机语言,只要存在顺序结构,循环结构以及分支结构,就可以完成任何程序功能。在Matlab 中也有这三种基本的程序结构。但是,值得注意的是,由于Matlab 语言矩阵计算功能十分强大,常常仅仅使用顺序结构借以矩阵的逻辑运算就可以完成计算任务,由于循环结构和分支结构在Matlab 语言中的运行速度相对较慢,所以在算法优化的编程中应当尽可能避免使用,而代之以矩阵运算,从而提高程序运行速度(通常可以提高数十倍到百倍),简化程序代码,而使得程序代码更加接近于数学上的表达。当然,矩阵编程的编程方法需要读者更多的关于线性代数和矩阵数学的知识和思维方式。总之,Matlab 是一种非常完美易用的超高级矩阵编程语言。这里只介绍本次编程中用到的编程结构
1. 顺序结构
在顺序结构中,Matlab 语句是按照书写的前后顺序来执行的。这是Matlab最常用的程序结构,也是执行效率最高的程序结构。
2. 循环结构for
for...end 语句适合于循环次数确定的情况,将循环变量的初值,判别和变化放在循环开头。利用help for 或doc for 可以获得关于该语句的使用手册。for...end 语句的调用形式是:
1 for v=表达式
2 语句1;
3 ....
4 语句n;
5 end
例1. 最简单的for...end 循环。
6 for k=1:10
7 x(k)=k.^2;
8 end x
9 x =
10 1 4 9 16 25 36 49 64 81 100
例2. for...end 循环的嵌套。获得九九乘法表矩阵。
11 for m=1:9
12 for n=1:9
13 a(m,n)=m*n;
14 end
15 end
16 a =
17 1 2 3 4 5 6 7 8 9
18 2 4 6 8 10 12 14 16 18
19 3 6 9 12 15 18 21 24 27
20 4 8 12 16 20 24 28 32 36
21 5 10 15 20 25 30 35 40 45
22 6 12 18 24 30 36 42 48 54
23 7 14 21 28 35 42 49 56 63
24 8 16 24 32 40 48 56 64 72
25 9 18 27 36 45 54 63 72 81
3. 条件分支结构if
if 分支结构的一般形式是:
if 表达式
语句段1;
else
语句段
End
差错控制编码解决加性噪声
第三章 差错控制编码解决加性噪声
差错控制编码的基本实现方法是在发送端将被传输的信息附上一些监督码元,这些多余的码元与信息码元之间以某种确定的规则相互关联(约束)。接收端按照既定的规则校验信息码元与监督码元之间的关系,一旦传输发生差错,则信息码元与监督码元的关系就受到破坏,从而接收端可以发现错误乃至纠正错误。下面我将分六种情况对差错控制编码解决加性噪声的问题进行研究和讨论。
3.1 无噪声,无编码
在无噪声,无编码情况下,我们都知道应该是没有误码出现的,下面运行程序一看结果是否正确 。(程序见附录一)
程序一设计思路:
运行程序一得到的结果和波形:
为了清晰显示,波形只截取了一部分:
若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
errorrate =0.00
由程序的运行结果和波形,我们看出:在无噪声,无编码情况下,发送信号1010110010,接收到的信号也是1010110010,没有误码出现。
3.2 无噪声,有编码
有3.1我们知道,在无噪声,无编码情况下,没有误码出现,所以在无噪声,有编码情况下,就更不应该有误码了。下面运行程序二看结果是不是正确。
程序二设计思路:
运行程序二得到的结果和波形:
errorrate =0.00
由程序的运行结果和波形,我们看出:在无噪声,有编码情况下,发送信号1010110010,接收到的信号也是1010110010,没有误码出现。
3.3 有噪声,无编码
我们知道,误码是有噪声产生的,那么在有噪声情况下,就应该有误码出现。下面运行程序三看结果是不是正确。
程序三设计思路:
若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
运行程序三得到的结果和波形:
噪声幅度为0.3
若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
errorrate =0.07
由程序的运行结果和波形,我们看出:在有噪声,无编码情况下,发送信号0101011111,接收到的信号是1111011111,有误码出现。有3.1和3.3说明误码是由噪声引起的。
3.4 有噪声,有hamming(7,4)编码
有噪声时,就有可能会引起误码产生,而hamming(7,4)编码在理论上应该可以很好的降低误码率,下面我们就通过运行程序四来验证是不是。
程序四设计思路:
差错控制编码解决加性噪声
运行程序四得到的结果和波形:
噪声幅度为0.3
若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
没有编码情况下的误码率:errorrate =0.04
有hamming(7,4)编码情况下的误码率:errorrate1 =0.00
由程序的运行结果和波形,我们看出:在有噪声,无编码情况下,发送信号0110011110,接收到的信号是0110111010,有误码出现;在有噪声,有hamming(7,4)编码情况下,发送信号0110011110,接收到的信号是0110011110,没有误码出现。这就说明hamming(7,4)编码可以有效降低误码率。
下面我们增加噪声幅度到0.6,看程序的运行结果和波形:
若图片无法显示请联系QQ3710167,本论文免费,转发请注明源于www.lwfree.cn
没有编码情况下的误码率:errorrate =0.20
有hamming(7,4)编码情况下的误码率:errorrate1 =0.15
由程序的运行结果和波形,我们看出:当噪声幅度增加到一定程度时,hamming(7,4)编码并不能很好的解决误码问题。我们知道hamming(7,4)编码是一个可以纠正单个随机错误的编码,当噪声幅度增加到一定程度时,随着误码数的增加,hamming(7,4)编码就不太适用了,那么当噪声幅度增加时,我们该使用什么样的编码呢?这个问题我们将在下面的章节中找到答案。
3.5 有噪声,有BCH(7,4)编码
当BCH也采用(7,4)编码时,它的功能应该和hamming(7,4)编码差不多,因为它们都是只能纠正单个随机错误的编码,下面我们就看一下事实怎么样。
程序五,六的设计思路雷同于程序四,只需要将hamming换成BCH,并作一些适当的修改就可以了
运行程序五得到的结果和波形:
噪声幅度为0.3
没有编码情况下的误码率:errorrate =0.04
有BCH(7,4)编码情况下的误码率:errorrate1 =0.00
由程序的运行结果和波形,我们看出:BCH(7,4)编码,它的功能和hamming(7,4)编码差不多。
3.6 有噪声,有BCH(15,5)编码
我们知道BCH(15,5)编码是可以纠正3个随机错误的编码,那么它能不能更好的降低误码率呢?
运行程序六得到的结果和波形:
噪声幅度为0.3
没有编码情况下的误码率:errorrate =0.05
有BCH(15,5)编码情况下的误码率:errorrate1 =0.00
由程序的运行结果和波形,我们看出:在有噪声,无编码情况下,发送信号1010011101,接收到的信号是1110011101,有误码出现;在有噪声,有BCH(15,5)编码情况下,发送信号1010011101,接收到的信号是1010011101,没有误码出现。这就说明BCH(15,5)编码可以有效降低误码率。
下面我们增加噪声幅度到0.6,看程序的运行结果和波形:
没有编码情况下的误码率:errorrate =0.21
有BCH(15,5)编码情况下的误码率:errorrate1 =0.04
由程序的运行结果和波形,我们看出:尽管在噪声幅度为0.6时,经过BCH(15,5)编码情况下的输出仍然有0.04的误码率,但和hamming(7,4)编码相比,它更好的降低了误码率。当然它是以增加冗余度为代价换来的。所以我们要在不同的情况下,选择不同的编码方式,才能最好的实现数据传输。
差错控制编码解决加性噪声
结论
通过对有无噪声,有无编码4种情况的仿真,可以看出误码主要是有噪声引起的,而使用差错控制编码可以有效的降低误码率。下面是对不同噪声强度情况下的误码率仿真统计:
噪声幅度
无编码
有Himming编码
有BCH编码
(7,4)
(15,5)
0.1
0.00
0.00
0.00
0.00
0.2
0.00
0.00
0.00
0.00
0.3
0.03
0.00
0.01
0.00
0.4
0.15
0.06
0.04
0.02
0.5
0.15
0.14
0.12
0.06
0.6
0.22
0.14
0.11
0.10
0.7
0.21
0.28
0.29
0.16
0.8
0.27
0.33
0.33
0.24
0.9
0.29
0.30
0.27
0.27
1
0.34
0.40
0.35
0.30
有上表可以看出在噪声强度比较低时,差错控制编码可以很明显的降低误码率,但是在噪声强度比较高时,只靠单纯的差错控制编码不能很好的解决问题,此时就应该采取一些其它的措施,例如合理地选择调制制度,调制方法,以及提高发送功率等措施。当Hamming码和BCH码都使用(7,4)编码时,它们的纠错能力差不多,因为它们都只能纠正单个的随机错误,而当BCH码使用(15,5)编码时,由于它可以纠正3个随机错误,所以大大提高了编码效率,不过是以增加冗余度为代价的。
总结与体会
通过半个学期的努力,终于在5月底完成了我的毕业设计,在做毕业设计期间得到了来自老师和同学的大力帮助,这使我深深的体会到团结协助的力量.通过做毕业设计,锻炼了我独自完成一件事的能力,提高了自我约束力,为走上工作岗位起到了桥梁作用。
由于自己对Matlab编程不熟悉,这给我的毕业设计带来了很大的麻烦,不过最后还是在老师和同学的帮忙下,让我找到了对Matlab编程的一些思路。“差错控制编码解决加性噪声”对于老师来说可能是一个老题目,但对我来说还是很新鲜,以前尽管学过差错控制编码的原理知识,但用仿真的方法对差错控制编码进行校验还是第一次,这不仅加深了我最对差错控制编码理论的认识和理解,也使我懂得了如何对一个理论进行自己的研究或验证。
谢辞
感谢我的导师李老师,她在百忙之中,仍然给我们细心指导,她的严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;她循循善诱的教导和不拘一格的思路给予我无尽的启迪。
感谢宿舍同学对我的帮助和指点。
参考文献
[1] 樊昌信. 通信原理. 北京:国防工业出版社,2001.5--5
[2] 徐明远,邵玉斌. MATLAB仿真在通信与电子工程中的应用,西安:西安电子科技大学出版社, 2005.6—1
[3] 王新梅 纠错码-原理与方法.西安:西安电子科技大学出版社,1991
[4] 张贤达,通信信号处理.北京:国防工业出版社,2000
[5] 邓华等. MATLAB通信仿真及应用实例详解. 北京:人民邮电出版社,2003
[6] 朱衡君, 肖燕彩,邱成 . MATLAB语言及实践教程. 北京:北京交通大学出版社,2005.1
[7] 张明照 刘政波 刘斌等. 应用MATLAB实现信号分析和处理. 北京:科学出版社 , 2006.1
[8] 李斯伟 雷新生. 数据通信技术. 北京:人民邮电出版社 , 2004.2
[9] 曹志刚.钱亚生.现代通信原理. 北京:清华大学出版社,1992
[10]乐光新等. 数据通信原理. 北京:人民邮电出版社,1988
[11]郭梯云等. 数据传输. 北京:人民邮电出版社,1998
[12]张辉,曹丽娜 .现代通信原理与技术. 西安:西安电子科技大学出版社。
[13]李霞. 电子与通信专业英语. 电子工业出版社, 2005
[14]常义林等. 通信工程专业英语. 西安:西安电子科技大学出版社,2004
[15]徐秀兰. 计算机与通信专业英语. 北京:北京邮电大学出版社,2003.1
差错控制编码解决加性噪声
附录一 .m程序
程序一. 无噪声,无编码
infor=randsrc(1,100,[0,1]); %产生信息infor(序列)
for n=1:100 %将infor改为波形singl
for m=1:10
i=(n-1)*10+m;
singl(i)=infor(n);
end
end需要全部代码的请联系QQ3710167,转帖请注明出处www.lwfree.cn
subplot(2,1,1);plot(0:0.01:9.99,singl),title('输入信号') %画出singl的波形
axis([0 1 -1 2]);
for n=1:100 %对singl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result(n)=singl(i);
if result(n)>0.5
result(n)=1;
else result(n)=0
end
end
end
for n=1:100%将判决结果result(序列)改为波形out
for m=1:10
i=(n-1)*10+m;
out(i)=result(n);
end
end
subplot(2,1,2);plot(0:0.01:9.99,out),title('输出信号'),xlabel('时间') %画出的out波形
axis([0 1 -1 2]);
error=infor-result; %计算误码率
error=abs(error);
errorrate=sum(error)/100
程序二. 无噪声,有编码
infor=randsrc(1,100,[0,1]); %产生信息infor(序列)
for n=1:100 %将infor改为波形singl
for m=1:10
i=(n-1)*10+m;
singl(i)=infor(n);
end
end
subplot(3,1,1);plot(0:0.01:9.99,singl),title('输入信号') %画出singl的波形
axis([0 1 -1 2]);
x=encode(infor,7,4,'hamming');x=x' %对infor进行“7,4汉明”编码
for n=1:175 %将编码结果x(序列)改为波形codesingl
for m=1:10
i=(n-1)*10+m;
codesingl(i)=x(n);
end
end
subplot(3,1,2);plot(0:0.01:17.49,codesingl),title('汉明码波形') %画出codesingl的波形
for n=1:175 %对codesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result(n)=codesingl(i);
if result(n)>0.5
result(n)=1;
else result(n)=0
end
end
end
y=decode(result,7,4,'hamming');y=y' %将判决结果result(序列)进行解码
for n=1:100 %将解码结果y(序列)改为波形out
for m=1:10
i=(n-1)*10+m;
out(i)=y(n);
end
end
subplot(3,1,3);plot(0:0.01:9.99,out),title('输出信号'),xlabel('时间') %画出的out波形
axis([0 1 -1 2]);
error=infor-y; %计算误码率
差错控制编码解决加性噪声
error=abs(error);
errorrate=sum(error)/100
程序三. 有噪声,无编码
infor=randsrc(1,100,[0,1]); %产生信息infor(序列)
for n=1:100 %将infor改为波形singl
for m=1:10
i=(n-1)*10+m;
singl(i)=infor(n);
end
end
subplot(3,1,1);plot(0:0.01:9.99,singl),title('输入信号') %画出singl的波形
axis([0 1 -1 2]);
noise=randn(1,1000)*0.3 %产生噪声noise,幅度为0.3
noisesingl=singl+noise; %将噪声加入信号
subplot(3,1,2);plot(0:0.01:9.99,noisesingl),title('加入噪声的输出信号') %画出noisesingl的波形
axis([0 1 -1 2]);
for n=1:100 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result(n)=noisesingl(i);
if result(n)>0.5
result(n)=1;
else result(n)=0
end
end
end
for n=1:100 %将判决结果result(序列)改为波形out
for m=1:10
i=(n-1)*10+m;
out(i)=result(n);
end
end
subplot(3,1,3);plot(0:0.01:9.99,out),title('输出信号'),xlabel('时间') %画出的out波形
axis([0 1 -1 2]);
error=infor-result; %计算误码率
error=abs(error);
errorrate=sum(error)/100
程序四. 有噪声,有hamming(7,4)编码
clear
infor=randsrc(1,100,[0,1]); %产生信息infor(序列)
for n=1:100 %将infor改为波形singl
for m=1:10
i=(n-1)*10+m;
singl(i)=infor(n);
end
end
figure(1);subplot(3,1,1);plot(0:0.01:9.99,singl),title('输入信号') %画出singl的波形
axis([0 1 -1 2]);
noise=randn(1,1000)*0.3 %产生噪声noise,幅度为0.3
noisesingl=singl+noise; %将噪声加入信号
figure(2);subplot(3,1,1);plot(0:0.01:9.99,noisesingl),title('加入噪声的输出信号') %画出noisesingl的波形
axis([0 1 -1 2]);
for n=1:100 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result(n)=noisesingl(i);
if result(n)>0.5
result(n)=1;
else result(n)=0
end
end
end
for n=1:100 %将判决结果result(序列)改为波形out
for m=1:10
i=(n-1)*10+m;
out(i)=result(n);
end
end
figure(1);subplot(3,1,2);plot(0:0.01:9.99,out),title('没有编码的输出信号'); %画出的out波形
axis([0 1 -1 2]);
error=infor-result; %计算误码率
error=abs(error);
%加入“7,4汉明”编码后的情况
x=encode(infor,7,4,'hamming');x=x' %对infor进行“7,4汉明”编码
for n=1:175 %将编码结果x(序列)改为波形codesingl
for m=1:10
i=(n-1)*10+m;
codesingl(i)=x(n);
end
end
figure(2);subplot(3,1,2);plot(0:0.01:17.49,codesingl),title('汉明码波形') %画出codesingl的波形
axis([0 1 -1 2]);
noise1=randn(1,1750)*0.3 %产生噪声noise,幅度为0.3
noisesingl1=codesingl+noise1; %将噪声加入信号
figure(2);subplot(3,1,3);plot(0:0.01:17.49,noisesingl1),title('有噪声的汉明码波形'),xlabel('时间'); %画出noisesingl1的波形
for n=1:175 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result1(n)=noisesingl1(i);
if result1(n)>0.5
result1(n)=1;
else result1(n)=0
end
end
end
y=decode(result1,7,4,'hamming');y=y' %将判决结果result(序列)进行解码
for n=1:100 %将解码结果y(序列)改为波形out1
for m=1:10
i=(n-1)*10+m;
out1(i)=y(n);
end
end
figure(1);subplot(3,1,3);plot(0:0.01:9.99,out1),title('有hamming码的输出信号'),xlabel('时间') %画出的out1波形
axis([0 1 -1 2]);
error1=infor-y; %计算误码率
error1=abs(error1);
errorrate=sum(error)/100 %有噪声,无编码的误码率
errorrate1=sum(error1)/100 %有噪声,有hamming(7,4)编码的误码率
程序五. 有噪声,有BCH(7,4)编码
clear
infor=randsrc(1,100,[0,1]); %产生信息infor(序列)
for n=1:100 %将infor改为波形singl
for m=1:10
i=(n-1)*10+m;
singl(i)=infor(n);
end
end
figure(1);subplot(3,1,1);plot(0:0.01:9.99,singl),title('输入信号') %画出singl的波形
axis([0 1 -1 2]);
noise=randn(1,1000)*0.3 %产生噪声noise,幅度为0.3
noisesingl=singl+noise; %将噪声加入信号
figure(2);subplot(3,1,1);plot(0:0.01:9.99,noisesingl),title('加入噪声的输出信号') %画出noisesingl的波形
axis([0 1 -1 2]);
for n=1:100 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
for m=1:10
i=(n-1)*10+m;
out(i)=result(n);
end
差错控制编码解决加性噪声
end
figure(1);subplot(3,1,2);plot(0:0.01:9.99,out),title('没有编码的输出信号'); %画出的out波形
axis([0 1 -1 2]);
error=infor-result; %计算误码率
error=abs(error);
%加入(7,4)BCH编码后的情况
x=encode(infor,7,4,'bch');x=x' %对infor进行(7,4)BCH编码
for n=1:175 %将编码结果x(序列)改为波形codesingl
for m=1:10
i=(n-1)*10+m;
codesingl(i)=x(n);
end
end
figure(2);subplot(3,1,2);plot(0:0.01:17.49,codesingl),title('bch波形') %画出codesingl的波形
axis([0 1 -1 2]);
noise1=randn(1,1750)*0.3 %产生噪声noise,幅度为0.3
noisesingl1=codesingl+noise1; %将噪声加入信号
figure(2);subplot(3,1,3);plot(0:0.01:17.49,noisesingl1),title('有噪声的bch波形'),xlabel('时间') %画出noisesingl1的波形
for n=1:175 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result1(n)=noisesingl1(i);
if result1(n)>0.5
result1(n)=1;
else result1(n)=0
end
end
end
y=decode(result1,7,4,'bch');y=y' %将判决结果result(序列)进行解码
for n=1:100 %将解码结果y(序列)改为波形out1
for m=1:10
i=(n-1)*10+m;
out1(i)=y(n);
end
end
figure(1);subplot(3,1,3);plot(0:0.01:9.99,out1),title('有bch码的输出信号'),xlabel('时间') %画出的out1波形
axis([0 1 -1 2]);
error1=infor-y; %计算误码率
error1=abs(error1);
errorrate=sum(error)/100 %有噪声,无编码的误码率
errorrate1=sum(error1)/100 %有噪声,有bch(7,4)编码的误码率
程序六. 有噪声,有BCH(15,5)编码
clear
infor=randsrc(1,100,[0,1]); %产生信息infor(序列)
for n=1:100 %将infor改为波形singl
for m=1:10
i=(n-1)*10+m;
singl(i)=infor(n);
end
end
figure(1);subplot(3,1,1);plot(0:0.01:9.99,singl),title('输入信号') %画出singl的波形
axis([0 1 -1 2]);
noise=randn(1,1000)*0.3 %产生噪声noise,幅度为0.3
noisesingl=singl+noise; %将噪声加入信号
figure(2);subplot(3,1,1);plot(0:0.01:9.99,noisesingl),title('加入噪声的输出信号') %画出noisesingl的波形
axis([0 1 -1 2]);
for n=1:100 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result(n)=noisesingl(i);
if result(n)>0.5
result(n)=1;
else result(n)=0
end
end
end
for n=1:100 %将判决结果result(序列)改为波形out
for m=1:10
i=(n-1)*10+m;
out(i)=result(n);
end
end
figure(1);subplot(3,1,2);plot(0:0.01:9.99,out),title('没有编码的输出信号'); %画出的out波形
axis([0 1 -1 2]);
error=infor-result; %计算误码率
error=abs(error);
%加入(15,5)BCH编码后的情况
x=encode(infor,15,5,'bch');x=x' %对infor进行(15,5)BCH编码
for n=1:300 %将编码结果x(序列)改为波形codesingl
for m=1:10
i=(n-1)*10+m;
codesingl(i)=x(n);
end
end
figure(2);subplot(3,1,2);plot(0:0.01:29.99,codesingl),title('bch波形') %画出codesingl的波形
axis([0 1 -1 2]);
noise1=randn(1,3000)*0.3 %产生噪声noise,幅度为0.3
noisesingl1=codesingl+noise1; %将噪声加入信号
figure(2);subplot(3,1,3);plot(0:0.01:29.99,noisesingl1),title('有噪声的bch波形'),xlabel('时间') %画出noisesingl1的波形
for n=1:300 %对noisesingl进行采样,判决(门限为0.5)
for m=1:10
i=(n-1)*10+m;
result1(n)=noisesingl1(i);
if result1(n)>0.5
result1(n)=1;
else result1(n)=0
end
end
end
y=decode(result1,15,5,'bch');y=y' %将判决结果result(序列)进行解码
for n=1:100 %将解码结果y(序列)改为波形out1
for m=1:10
error1=infor-y; %计算误码率
error1=abs(error1);
errorrate=sum(error)/100 %有噪声,无编码的误码率
errorrate1=sum(error1)/100 %有噪声,有bch(15,5)编码的误码率
差错控制编码解决加性噪声 英文文献
BCH Codes
Abstract:
Coding Theory deals with transmission of data over noisy channels. When transmitting digital data, which consists of strings of 0's and 1's, a physical device may for a number of reasons confuse these entries. For example, the Voyager II space probe which explored Jupiter in the late 1960's was transmitting data across many millions of miles with incredibly low power. When the information reached earth its easy to see how there could be errors in the data string received, either from bursts of cosmic energy or by amplification of the weak signal. To make this communication possible there needed to be a method of detecting errors in the transmission and correcting them. The process that made this possible is known as the Reed-Solomon codes. These codes are a specific type of code called a BCH code. These are the structures we wish to explore here.
Background
To understand BCH codes we must understand the basics of cyclic codes, an important class of codes in which the BCH codes dwell. Here are some important definitions about codes in general.
Definition 1 Given a code ,the entire set of codewords is called the codespace.
The strings, or -tuples, of 0's and 1's in the data transmission are called the codewords. Here, we will generally restrict our attention to binary BCH codes. So we can then think of each codeword as an -dimensional vector over the field . The value of a code depends on the ability to detect and correct errors in a transmission. This process is called decoding. To decode a message we often use a matrix.
Definition 2 The check matrix is the decoding function of a code .
A received message is multiplied by the check matrix. We will see a specific example of a check matrix when we discuss decoding a BCH code. For now, we can define the product of the received message and the check matrix.
Definition 3 The syndrome is the vector obtained after multiplying the received message by the check matrix. The length of the syndrome vector will determine how many errors a given BCH code can correct.
The bounds for error detection and correction depend on the distance between vectors in the codespace of .
Definition 4 Take two codewords in the codespace. The Hamming distance is the number of places where the two vectors differ.
For example, using binary the vectors and , the distance between is . It turns out that we can determine a lower bound on how close two vectors in the codespace can be. This bound will determine exactly how many errors a code can detect and correct. In fact we have the following theorem.
Theorem 1 Let be the minimum distance between two codewords in the codespace. Then a code can detect up to errors if . Further, a code can correct up to errors if .
Definition 5 The Hamming weight of a vector in the codespace is definied to be .
In other words, it is the number of nonzero places in the codeword. With these basic definitions we are ready to define the cyclic class of codes.
Linear and Cyclic Codes
Cyclic codes fall under the category of codes called linear codes.
Definition 6 A linear code of dimension and length over a field is a -dimensional subspace of . Such a code is called an code. If the minumum distance of the code is , then the code is called an code.
The row-space of the following matrix forms a code.
Notice that there are 4 ones in each row. Any binary n-vector can be thought of as the coeffiecients of an degree polynomial in . Looking at the first row in the matrix we can relate it to the polynomial 需要全部内容的请联系QQ3710167,转发请注明出处www.lwfree.cn in the polynomial ring . Given a linear code the following proposition is clear.
Proposition 1 Let be a linear code. Then equals the smallest Hammming weight of all nonzero code vectors.
There are many different varieties of linear codes, such as the well known Hamming codes. We now want to consider a brand of linear codes called cyclic codes. Then we will define BCH codes, which are a specific type of cyclic code
差错控制编码解决加性噪声
Definition 7 A linear code is called cyclic if
implies
For example, if is in a cyclic code, then is also in the code. The definition is recursive and so every cyclic shift of the elements is in the code. In order to formalize the discussion we can use the following isomorphism 需要完整内容的请联系QQ3710167,转发请注明出处www.lwfree.cn
between the -dimensional vector space and the residue class of polynomials . Recall from algebra that
We can now speak of codewords in as the polynomials , and the following theorem follows
Theorem 2 A linear code in is a cyclic code if is an ideal in .
Proof. If is an ideal in and is any codeword, then is also a codeword. Thus If is cyclic, then for every codeword the word is also a codeword. Therefore is in for every , and since is linear is in for every polynomial . It follows that is an ideal.
The next theorem states the general structure of cyclic codes.
Theorem 3 Let be a cyclic code of length over a finite field . To each codeword , associate the polynomial in . Among all the nonzero polynomials obtained from in this way, let have the smallest degree. We may assume that is monic. This polynomial is called the generating polynomial for . Then 1. is uniquely determined by . 2. is a divisor of . 3. is exactly the set of coefficients of the polynomials of the form with deg . 4. Write . Then corresponds to an element of ,if .
Proof. (1)The codespace is spanned by the rows of a matrix. Because the row space of the matrix is closed under subtraction the difference between any two vectors, or polynomials, in the space is still in the space. So if there was another monic generating polynomial with minimum degree, then is also in the space. But this is a contradiction since this new polynomial has smaller degree than both and . (2)Divide into . By the division algorithm we get
mod
where degdeg. But multipying by powers of corresponds to a cyclic shift of the corresponding code vector and multiplication by a polynomial is thus a linear combination of the codevectors in the generating matrix and all of their cyclic shifts. So is in the code space of . Since degdeg, must be equal to zero. Thus . Notice then that is not a field since it has zero divisors. (3)Let correspond to an element in . Divide into
with degdeg. From (2) we know that corresponds to a codeword and by assumption so does . So, since is closed under subtraction, modis also a codeword. But this is just and has degree less than . It follows that and is the product of the generating polynomial with another polynomial. Because each codeword has length , deg so deg deg. Conversely, we have shown that the product of any two polynomials is in . Thus, these polynomials yield all of the code words of . (4)By (2) we can write . Let correspond to an element in . Then by (3)
mod
Next suppose that mod. Then
for some polynomial . We can now divide through by and get
差错控制编码解决加性噪声
and so coresponds to a codeword of . 需要完整内容的请联系QQ3710167,本文免费,转发请注明源于www.lwfree.cn
Remark:There will be a unique polynomial such that . When thinking of the codespace as a product of polynomials with instead of the row space of a binary matrix, this polynomial will take the place of the check matrix in the decoding process. Let be a codeword then
Then if degthe coeffiecients of the highest powers match the coeffiecients of the lowest powers of x in the polynomial . Further, if the generating polynomial has degree , then the codewords form a basis for the codespae with a generating matrix
and we can realize a code word as an information sequence times the matrix
mod
As stated before, we can treat the polynomial , having the condition that mod , as the check polynomial of the code . Knowing that we want for , it follows that the check matrix for the code is
Lets now consider an example using a matrix of 0's and 1's.
Because each of the three rows are linearly independent we know from linear algebra that the row space of the matrix is a 3-dimensional subspace of where is the field . In fact, since the algorithm is based on left multiplication by a codevector, the row space is the range of the matrix. In essence, because each codevector corresponds to a polynomial, the codespace corresponds to cyclic shifts of the coefficients of polynomials, which is just all polynomial products where is the generating polynomial for the code . It turns out that in this case all the cyclic shifts of the first row vector account for every vector in the row space. Thus we have a cyclic code and the generating polynomial is
which corresponds to the first row of the generating matrix. Also, and so the check polynomial is
and we get the following check matrix
Now taking the codeword corresponding to we get
mod
In fact, for every codeword in the space , the product will be the zero vector. This will be an extremely important detail when creating an algorithm for a single-error correcting BCH code.