实验指导书
2012年11月
一、实验目的
1、通过实验掌握线性分组码中的汉明码的编码原理
2、通过实验掌握汉明码的译码
3、了解编码与检错能力之间的关系
二、实验内容
1、随即生成50组4位信息序列作为输入;
2、参照书上p223.4-65给定关系构建(7,4)汉明码,计算所设计出的汉明码的所有码字集合;
3、发送端采用生成矩阵对信息码列进行编码得到编码码字,该编码序列在信道上传时被随机加入噪声,用校验矩阵对收到信息进行检错。
4,比较加入的误码数和检测出的误码数,检验检错效果。
实验内容的框图如下:
三、实验设计原理
1、线性分组码的定义
将信源的输出序列分成长为的段,按一定的规则将编为长为的码字(码符号序列)。码字共有位,其中k位为信息位,位为校验位,假设共有M个消息序列,则对应的M个码字的集合称为一个分组码,记为C。
在上述分组码中,若与的对于关系是线性的,则称为线性分组码。
2、生成矩阵和校验矩阵
(1)生成矩阵
根据线性分组码的定义,可以得出如下所述的一种构成线性分组码的方法。码字为。
定义
为该分组码的生成矩阵,则有
(2)校验矩阵
为了在接收端进行正确的译码,可以定义一个对应于生成矩阵G的矩阵H,称为校验矩阵或监督矩阵,满足
或 (3-6)
由和得
或(3-7)
由于是阶行矩阵,故式中0亦为阶行矩阵。式(3-7)事实上给出了译码的实现方法,因为校验矩阵是已知的,如果接收到的码矢与它转置的乘积为0,则说明接收无误,否则说明存在错误。
3. 线性分组码的编码
将信息码与生成矩阵相乘,得到的即为编码后的信息码。
4、线性分组码的译码
(1)用许用码组进行译码
列出线性分组码的所有许用码组,接收到y后,到许用码组中中去找(因为个矢量全部列在其中,总可以找到),如果接收到的字是个合法码字,那么可以下结论说没有错误发生(这个结论可能是错的,就是当噪声把一个合法码字改变成另一个合法码字时,但它的错误概率很低)。如果接收到的码字是一个禁用码字时,我们推测发生了错误。
(2)译码表译码
接收到码字y后,将y与HT进行相乘,如果得到的为0矢量,则为正确码字,如为非零,则认为码字发生了错误,可以通过请求发送端重发来纠正码字。
四、实验步骤
1、输入(可由计算机随机产生)N(N>50)组4位随机信息,可循环输入;
2、每个循环内,输入的4位信息与生成矩阵相乘,得到其编码码字;
3、用随机函数矩阵对编码码字添加信道噪声引起的误码(0误码为1,或1误码为1),得到接收端带噪声的码字,同时统计增加了误码的码字数A;
4、对接收端带有噪声的所有编码码字进行汉明译码,统计检查出来的错误码字数B。
5、计算检错率B/A。
五、完成实验报告
1、实验目的
2、实验内容
3、给出产生汉明码的源程序,并给出运行结果,要求得到所有码字。
4、随机加入噪声后译码,对接收端码字进行纠错,判断其是否能检测出所有的噪声,并同给定的误码率进行对比,输出结果;
5、总结实验遇到的问题及解决方法。
六、参考实例及重要提示
1、利用库函数(encode)来实现编码
语法:code=encode(msg, N, K, method, opt);
说明:这个函数可完成六种主要的差错控制编码:汉明码、线性分组码、循环码、BCH码、R-S码和卷积码。
Msg是信息;method注明编码方式;N是码字长度;K是信息位的长度;opt是有些编码方式需要的参数,具体含义见下表。
encode函数的参数用法
| method | 含义 | opt |
| ‘hamming’ | 汉明编码 | 可用来指定一个原始多项式,如省略,则使用默认多项式 |
| ‘linear’ | 线性分组码 | opt必须指定一个校验矩阵 |
| ‘cyclic’ | 循环码 | 必须指定一个生成多项式 |
| ‘bch’ | BCH码 | 可用来指定一个生成多项式,如省略,则使用默认生成多项式 |
code=encode(msg,7,4,'hamming');%进行汉明编码
2、利用生成矩阵实现编码
例:已知,u=[1 0 1 1],求c。
G=[1 0 0 1 0 1 1;0 1 0 1 0 1 0;0 0 1 1 0 0 1;0 0 0 0 1 1 1];%生成矩阵
u=[1 0 1 1];%信息码字
c=rem(u*G,2);%生成码字
disp(c)
1 0 1 0 1 0 1
3、利用m文件来实现编码
以下是产生(7,4)汉明码的程序
4、利用库函数(decode)来实现译码
语法:msg=decode(code, N, K, method, opt1, opt2);
说明:这个函数对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同。
decode函数的参数用法
| method | 含义 | opt |
| ‘hamming’ | 汉明译码 | opt1可用来指定一个原始多项式,也可省略不用,opt2不用 |
| ‘linear’ | 线性分组码译码 | opt1必须指定一个校验矩阵,opt2用来指定一个检错逻辑电路,如省略,则默认单个错纠正逻辑 |
| ‘cyclic’ | 循环码译码 | opt1是必须指定的生成多项式,可使用cycpoly函数选择一个合适的循环多项式,opt2用来指定一个检错逻辑电路,如省略,则默认单个错纠正逻辑 |
| ‘bch’ | BCH码译码 | opt1指定纠错能力,如省略,则此函数通过bchpoly计算纠错能力,opt2指定BCH码的生成多项式,如省略,则采用默认的生成多项式 |
msg=decode(msg, 7,4, 'hamming');%进行汉明译码
5、重要提示
1、rem语句生成码字,注意2进制的特殊性;
2、用rem(code+rand(m,N)>0.95,2 )生成有5%噪声的信号;下载本文