当前位置:文档之家› 信息论与编码实验报告

信息论与编码实验报告

信息论与编码基础实验报告学院: 队别: 专业: 姓名: 学号:电子科学与工程学院 二队 06 级 通信工程专业 曹务绅 200604015014国防科学技术大学电子科学与工程学院1   汉明码编译码一、 实验目的通过本次实验的练习, 进一步巩固了信道编码的基本原理, 掌握了Hamming 码编译码方法,提高了软硬件操作能力,培养了实验人员理论结合实践的能力。

二、 实验原理(一)汉明码: 汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。

它属 于线性分组码, 由于汉明码的抗干扰能力较强, 至今仍是应用比较广泛的一类码。

它具有以下特征: 码 长: n = 2m − 1信息位数: k = 2 m − m − 1 监督码位: r = n − k = m 最小码距: d = 3 纠错能力: t = 1 (二)汉明码的编码: 在(n,k)汉明码中, (n-k)个附加的监督码元是由信息码元的线性运算产生 的。

码长为 n,信息码元长度为 k,2k 个码组构成 n 维线性空间中的一个 k 维子 空间,编码的实质就是要在 n 维空间中,找出一组长为 n 的 k 个线性无关的矢 量 g0 g1 g k −1 ,使得每个码组 c 都可以表示为 k 个矢量的线性组合,即 c0 ] = mk −1 g 0 + mk − 2 g1 + m0 g k −1 其中, m i∈{0,1}, i=0,c = [cn −1 cn − 21,……,k-1。

将上式写成矩阵形式得2   C = [ mk −1mk − 2⎡ g0 ⎤ ⎢ ⎥ ⎢ g1 ⎥ m0 ] ⎢ ⎥ = MG ⎢ ⎥ ⎢ g k −1 ⎥ ⎣ ⎦由此, [ mk −1mk − 2m0 ] 是带编码信息的信息组,G是一个k*n阶矩阵,G称为(n,k)汉明码的生成矩阵。

当G确定以后,编码的问题也就解决了。

在实际的硬件实现中,经常利用除法电路实现循环汉明码的编译码,这样可 以大大简化编译码的电路,详细解释见思考题1. (三)汉明码的译码: 对于汉明码,由于其属于线性分组码,所以后者的各种译码方式都适用于汉 明码的译码。

对于(7,4)汉明码来讲,其监督元有 3 位,故一致校验矩阵 H 为一个 3 行 7 列的矩阵,且 H 矩阵正是由 7 个非零 3 重作列矢量构成的。

如下 图所示:⎡1 1 1 0 1 0 0 ⎤ H = ⎢0 1 1 1 0 1 0⎥ ⎢ ⎥ ⎢1 1 0 1 0 0 1 ⎥ ⎣ ⎦观察上面的一致校验矩阵我们可以发现,对于纠一位错误来说,生成的伴随 式的值就等于对应的 H 列向量,即错误位置。

对于接收到的码字 R,若计算出来 的伴随式 S 与 H 的第 i 列相同,则可以判断接收码字 R 一定出错了,而且错误 位置在第 i 位。

由此可以明显看出,对于汉明码,采用伴随式译码简化译码中纠 检错过程, 这也是在实际中伴随式译码在汉明码的译码中得到大量应用一个重要 原因。

三、 设计思想3   从自己的实际出发, MATLAB 的应用上要比 C++或者 C#要熟练, 在 所以选择 利用 MATLAB 作为基础的实验平台。

如下图所示,一般的通信系统就是由以下几个部分组成,本次实验模拟的就 是虚线框图里的若干部分,即“编码—传输—译码“。

信 源 信 源 编 码 信 道 编 码 信 道 译 码 信 源 译 码 信 宿信道噪声图一:通信系统的一般组成1、 基本功能的设计实现 针对实验要求的仿真内容,选定一种比较典型的汉明码——(7, 4)码, 由实验原理中的论述可知,汉明码是分组码的一种,实现汉明码的编译吗过程, 关键在于以下几个环节。

编码方式的选择:针对汉明码的 2 种比较普遍的编码方式,我选择利用 生成多项式产生汉明码,一是考虑到这种方法本身具有简单、明了的特点,且 在 MATLAB 中实现较容易。

二是在程序界面的设计中,要求用户可以任意输 入信息序列,即 M,采用生成矩阵法可以很灵活的由 C=MG 得到编码之后的 序列,便于之后的处理。

构造生成矩阵 G,对于(7,4)系统分组码,其比较典型的一种生成矩 阵如下所示:4   ⎡1 ⎢0 G=⎢ ⎢0 ⎢ ⎣00 1 0 00 0 1 00 0 0 11 1 1 00 1 1 11⎤ 1⎥ ⎥ 0⎥ ⎥ 1⎦对于用户输入的任意长度的信息序列 I,首先对其进行 4 个一行的分组,以得 到我们所要求的信息元 M,再和 G 做矩阵乘法后,即可得到所对应的长度为 7 个一个码字。

将各码字连成一维长列,显示并在信道中传输。

信道模型的选择:在码字的传输过程中,信道的模型以及转移概率的大 小直接影响接收端接收数据的可靠性, 为方便分析, 此次设计采用较基本的 BSC (binary symmetric channel)信道,其错传概率 P 即可以模拟信道中噪声的 大小。

在仿真过程中,准备通过程序来实现错误概率 P 的可调(P∈[0,1]) ,用 来模拟不同程度的噪声对码字传输以及对接收端译码性能的影响;当 P=0 时, 即实现对无噪无损信道的模拟。

在 MATLAB 里,函数 bsc(C,p)可以很方便的模拟二元对称信道的传输情 况,且 p 可以由用户任意赋值(P∈[0,1]) 。

译码功能的设计:此环节是实验的重点,也是难点。

原理中已经论 证了伴随式译码的优点,在此模块的设计中也采取这种译码方式。

首先由 G 得 到相应的一致校验矩阵 H:⎡1 1 1 0 1 0 0 ⎤ H = ⎢0 1 1 1 0 1 0⎥ ⎢ ⎥ ⎢1 1 0 1 0 0 1 ⎥ ⎣ ⎦接收端在从信道中接收并存储序列 I’后, 首先要完成对其 7 个一行的分组, 每一行也就是接收到的一个码字 R(可能已经有了错误码元) 。

求的 R 的伴随 式 S,通过程序判断 S 与 H 的哪一行相同,则错误就出现在哪一位,否则,接 收码字无误。

最后由 C=R+E(E 为错误图样)来恢复码字,实现纠错。

5   在此部分的设计中,计划实现以下几个功能:一是显示接收序列,这样可以 和编码端产生的码字序列形成对比,用户可清楚看到码字的对错以及错误产生 的位置;二是对码字序列中的错误进行计数,并且记录出错的位置,最后一起 显示,由于汉明码的纠检错能力有限,所以用户在功能一中观察到的错误在此 并不能完全被发现, 这也是对汉明码纠错能力的验证;三是显示最终译码序列, 和用户输入的信息序列对比,系统自动显示二者不一样的位数,可方便对汉明 码的纠错能力进行分析;四是绘制误码性能图,针对不同的信道错传概率 P, 记录接收端产生的误码个数,得出误码率,绘出图形。

2、 交互界面的设计 此部分设计是和基本功能的实现紧密相连的,由于是自己独自一人完成此 实验的仿真, 能力和时间都有限, 所以设计的界面趋于简单, 只实现了基本功能。

设计的用户交互界面如下所示:图二:交互界面草图左上角 4 个文本框主要实现信息序列的输入和码字序列, 接收码字序列, 译6   码序列的显示;错误提示下拉文本框动态显示错误出现的位置;用户可在“信息 序列”文本框里输入任意长度的 01 信息,可在右上角的“误码率”文本框里设 定所需的误码率,再按键操作即可。

上图所示交互界面可由 MATLAB 的 GUI 方便的产生, 但是功能的实现还是 设计的一个难点。

四、 实现流程综合以上设计思想,再结合 MATLAB 在实现编译码仿真的实际特点,绘 制出各关键环节的流程图,如下图所示: 编码部分: 开始 提示输入信息序列 读入  存储 是否是 4 的倍数 是 分组 否 补零 C=M*G,计算(7,4)汉明码各码字 变换维数,准备传输       图表  1:汉明码的编码框图7   传输及译码部分: 码字  信道  噪声 接收 存储每组 7 个码元分组 由 S=R*H’,求伴随式 是  是否满足 S=0?  否  累加计数器 与 H 的哪一列相同接收码字无错 记 录 错 误 位 数 和 个 数  第 i 列  码字的第 i 位出错 求 E,错误图样 纠错(C’=R+E) 报错显示 图表  2:汉明码译码框图8   五、 结果分析1、当输入信息序列为:11000011111100001 时 平台编码输出为:1100010 0011101 1111111 0000000 1000101 从此可以看出,平台为用户输入的信息序列自动分组(4 个一组) ,对不够 4 个 的进行补零操作。

且编码规则满足 C=MG。

编出的每个码字共 7 个码元,前 4 位为信息位,后 3 位为监督位。

2、当信道错误概率 P=0 时,接收端接收序列为:110001000111011111111 00000001000101。

经对比,和发送端送上信道的序列完全一致,译出码字为: 11000011111100001000,无错误码字。

平台报错模块全部为 0,即没有错误。

3、改变 P 的值,当设定为 0.01 时,接收端有时会出现错误码字。

接收到的序列为:11000100011101111111000000001000101 译出码字为:11000011111100001000 对比可以看出,码字序列第 23 位出现错误,且在平台的报错模块上显示已 经发现并纠正了此错误,致使译码结果并没有出错。

这也验证了汉明码对一位错 误的纠正能力。

结论:汉明码对码字中一位以内的错误都能纠正。

4、增大 P 的值,当 P=0.1 时,接收端出错明显。

接收序列为:11000100001101111101000000001000101 译出码字:11000011111000001000 平台报错:接收码字在第 10 位和 21 位出错,共 2 处; 但是对比接收序列 1 和 4 可知, 此时实际上共出现 3 位错误, 分别为第 10、 19、21 位。

但是对汉明码来讲,其在译码过程中只发现了 2 处,这是因为汉明9   码采用伴随式译码的时候纠检错能力为 1,只能纠检 1 位以内的错误,但是在第 3 个码字中(15—21 位)出现了 2 个错误,此时汉明码已经不能正常纠检错, 因此,译出的码字也会出错,在上面列举的译出码字中第 12 位是错误的。

相关主题