毕业设计(论文)-基于C51的汉明码编码器和译码器的设计.doc_第1页
毕业设计(论文)-基于C51的汉明码编码器和译码器的设计.doc_第2页
毕业设计(论文)-基于C51的汉明码编码器和译码器的设计.doc_第3页
毕业设计(论文)-基于C51的汉明码编码器和译码器的设计.doc_第4页
毕业设计(论文)-基于C51的汉明码编码器和译码器的设计.doc_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于 C51 的汉明码编码器和译码器的设计 摘要摘要:数字信号在传输过程中,由于受到干扰的影响,码元波形将变坏。接收端收到后可 能发生错误判决。由乘性干扰引起的码间串扰,可以采用均衡的办法纠正,而加性干扰的 影响可以采用差错控制的措施了。汉明码就是一种能纠正一位错码且编码效率较高的线性 分组码,它能纠正一个错码或检测两个错码。 关键词:关键词:汉明码,编码,译码,C51 Abstract:Abstract: The digital signal during transmission, due to the impact of interference, the symbol waveform deterioration. Receiver may receive an error after the verdict. By a multiplicative inter-symbol interference caused by crosstalk, a balanced approach can be used to correct, and the additive effects of interference can be used for error control measures. Hamming code is a code to correct a wrong and a higher coding efficiency of linear block codes that can correct a wrong code or wrong code detection two. Keywords:Keywords: HammingHamming code,code, coding,coding, decoding,decoding, C51C51 languagelanguage 目目 录录 1绪论绪论 .- 3 - 1.1问题的背景及提出 .- 3 - 1.2问题的研究及解决 .- 3 - 1.3设计研究的目的 .- 4 - 2KEIL 及及 PROTEUS 简介简介.- 4 - 2.1PROTEUS的简介.- 4 - 2.2KEIL软件及其调试功能简介.- 5 - 2.3软件连接使用 .- 6 - 3(15,11)汉明码的原理汉明码的原理.- 8 - 3.1基本概念 .- 8 - 3.2监督矩阵 H.- 9 - 3.3生成矩阵 G.- 10 - 3.4伴随式(校正子)S.- 10 - 4(15,11)汉明码编解码器的设计汉明码编解码器的设计.- 11 - 4.1(15,11)汉明码的编码思路.- 11 - 4.2(15,11)汉明码的编码程序设计.- 12 - 5(15,11)汉明码的译码思路及程序设计汉明码的译码思路及程序设计.- 16 - 5.1(15,11)汉明码的译码思路.- 16 - 5.2(15,11)汉明码的译码程序设计.- 18 - 6编译程序的调试及仿真编译程序的调试及仿真 .- 20 - 6.1系统仿真电路设计 .- 20 - 6.1.1系统电路框图.- 20 - 6.1.2显示电路设计.- 20 - 6.1.3键盘电路设计.- 21 - 6.1.4整机设计.- 22 - 6.2仿真分析 .- 22 - 6.2.1仿真流程图.- 22 - 6.2.2调试过程.- 23 - 7致谢致谢 .- 24 - 8参考文献参考文献 .- 24 - 9附录附录 .- 25 - 附录一:整机原理图.- 25 - 附录二:仿真效果图.- 25 - 1绪论绪论 1.1 问题的背景及提出问题的背景及提出 近年来,对高效可靠的数字传输和存储系统的需求日益增长。这种需求随着在商业、 政府和军事领域面向数字信息的交换、处理和存储的大规模高速数据网的出现而变得更加 迫切。通信系统得主要质量指标是通信的有效性和可靠性。在有噪声和损失存在的信道中, 输入符号与接收符号不能一一对应,传输错误和判断错误的情况总会存在。可靠数字传输 系统的设计要求通信与计算机技术的融合,系统设计者所关心的一个主要问题就是如何控 制差错以使得数据能够可靠重现。 在数字通信系统中,编码器分为两大类:一类是信源编码,另一类是信道编码。信源 编码的目的是解决通信的有效性问题。信道编码的目的是解决通信可靠性问题。采用信道 编码后,在信息码后增加了监督位,这样就可以增加了码元之间的相互关联,在接收端根 据相应的译码规则,就能够察觉传输中有无误码,甚至能自动纠正错误。我们把建立在代 数学基础上的编码称为代数码。在代数码中,常见的是线性码。在线性码中信息位和监督 位是由一些线性代数方程联系着的。增加了冗余,必然降低了传输效率,却赢得了提高可 靠性的好处。那么为了纠正一位错码,在分组码中最少要增加多少监督位才行呢?编码效 率能否提高呢?从这种思想出发进行研究,便导致汉明码的诞生。汉明码是一种能够纠正 一位错码且编码效率较高的线性分组码。那么怎么实现汉明码的编码与译码呢?本文将介 绍基于 C 语言的汉明码的编码与译码系统,实现汉明码的编码与译码,从而实现传输的差 错控制。 1.2 问题的研究及解决问题的研究及解决 本设计研究基于 C 语言的汉明码的编码与译码系统。根据汉明码的构成原理,我们需 在信息位的后面加上监督位来监督码组中出现错码的位置,这样就方便在接收端对接收到 的码组进行纠错以便得到正确的信息位,达到可靠的通信。在本设计中,我们采用 m 序列 循环产生预编码信号,经过汉明码编码系统产生带监督位的线性分组码。发送这些码组, 经过信道后这些码组由于受到干扰的影响,某些码元波形会变坏,在接收端经过汉明码译 码系统来检验错码及纠正错码,它能纠正一个错码或者检测两个错码。经过译码系统的检 错与纠错,接收端就可以接收到正确的码组。 1.3 设计研究的目的设计研究的目的 通过运用 proteus 软件仿真对汉明码的编码译码有更深入的了解和认识,掌握汉明码 的构造原理,了解汉明码在实际生活中的应用,掌握差错控制的基本方法,即在发送端的 信息码元序列中,以某种确定的编码规则加入一些码元(称为监督码元) ,使信息序列与监 督码元之间具有某种相关性。在不断学习新的知识以及归纳复习老知识的同时,加强自身 对通信系统设计的能力。 2Keil 及及 Proteus 简介简介 2.1Proteus 的简介的简介 Proteus ISIS 是英国 Labcenter 公司开发的电路分析与实物仿真软件9。它运行于 Windows 操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是: 实现了单片机仿真和 SPICE 电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片 机及其外围电路组成的系统的仿真、RS232 动态仿真、I2C 调试器、SPI 调试器、键盘和 LCD 系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持 主流单片机系统的仿真。目前支持的单片机类型有:68000 系列、8051 系列、AVR 系列、 PIC12 系列、PIC16 系列、PIC18 系列、Z80 系列、HC11 系列以及各种外围芯片。提供软 件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各 个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支 持第三方的软件编译和调试环境,如 Keil C51 uVision2 等软件。具有强大的原理图绘 制功能。总之,该软件是一款集单片机和 SPICE 分析于一身的仿真软件,功能极其强大。 Proteus 主要用于绘制原理图并可进行电路仿真,Proteus ARES 主要用于 PCB 设计。ISIS 的主界面主要包括:1 是电路图概览区、2 是元器件列表区、3 是绘图区。绘制电路图的 过程如下: 单击 2 区的 P 命令即弹出元器件选择(Pick Devices)对话框,Proteus 提供了丰富的元 器件资源,包括 30 余种元器件库,有些元器件库还具有子库。利用该对话框提供的关键 词(Keywords)搜索功能,输入所要添加的元器件名称,即可在结果(Results)中查找, 找到后双击鼠标左键即可将该元器件添到 2 区,待所有需要的元器件添加完成后点击对话 框右下角的 OK 按钮,返回主界面。接着在 2 区中选中某一个元器件名称,直接在 3 区中 单击鼠标左键即可将该元器件添加到 3 区。 由于是英国的软件,特别要注意的是绘图区中鼠标的操作和一般软件的操作习惯不同,这 正像是司机座位和人行道走向和国内不同一样。单击左键是完成在 2 区中被选中的元器件 的粘贴功能;将鼠标置于某元器件上并单击右键则是选中该元器件(呈现红色) ,若再次单 击右键的话则删除该元器件,而单击左键的话则会弹出该元器件的编辑对话框(Edit Component) ;若不需再选中任何元器件,则将鼠标置于 3 区的空白处单击右键即可;另外 如果想移动某元器件,则选中该元器件后再按住鼠标左键即可将之移动。 元器件之间的连线方法为:将鼠标移至元器件的某引脚,即会出现一个“”符号,按住 鼠标左键后移动鼠标,将线引至另一引脚处将再次出现符号“” ,此时单击鼠标左键便可 完成连线。连线时在需拐弯的地方单击鼠标左键即可实现方向的改变。绘制好电路后,可 利用 1 区的绿色边框对 3 区的电路进行定位。 2.2 Keil 软件及其调试功能简介软件及其调试功能简介 目前流行的 51 系列单片机开发软件是德国 Keil 公司推出的 Keil C51 软件,它是一个基于 32 位 Windows 环境的应用程序,支持 C 语言和汇编语言编程,其 6.0 以上的版本将编译和 仿真软件统一为 Vision(通常称为 V2) 。Keil 提供包括 C 编译器、宏汇编、连接器、 库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成: Vision IDE 集成开发环境(包括工程管理器、源程序编辑器、程序调试器) 、C51 编译器、 A51 汇编器、LIB51 库管理器、BL51 连接/定位器、OH51 目标文件生成器以及 Monitor- 51、RTX51 实时操作系统。 应用 Keil 进行软件仿真开发的主要步骤为:编写源程序并保存建立工程并添加源文件 设置工程编译/汇编、连接,产生目标文件程序调试。Keil 使用“工程” (Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。工 程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。首先选择菜单 FileNew,在源程序编辑器中输入汇编语言或 C 语言源程序(或选择 FileOpen, 直接打开已用其他编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上 扩展名.asm(.a51)或.c;然后选择菜单 ProjectNew Project,建立新工程并保存 (保存时无需加扩展名,也可加上扩展名.uv2) ;工程保存后会立即弹出一个设备选择对话 框,选择 CPU 后点确定返回主界面。这时工程管理窗口的文件页(Files)会出现 “Target1” ,将其前面+号展开,接着选择 Source Group1,右击鼠标弹出快捷菜单,选择 “Add File to Group Source Group1 ” ,出现一个对话框,要求寻找并加入源文件(在 加入一个源文件后,该对话框不会消失,而是等待继续加入其他文件) 。加入文件后点 close 返回主界面,展开“Source Group1”前面+号,就会看到所加入的文件,双击文件 名,即可打开该源程序文件。紧接着对工程进行设置,选择工程管理窗口的 Target1,再 选择 ProjectOption for Target Target1 (或点右键弹出快捷菜单再选择该选项) , 打开工程属性设置对话框,共有 8 个选项卡,主要设置工作包括在 Target 选项卡中设置晶 振频率、在 Debug 选项卡中设置实验仿真板等,如要写片,还必须在 Output 选项卡中选中 “Creat Hex Fi” ;其他选项卡内容一般可取默认值。工程设置后按 F7 键(或点击编译工 具栏上相应图标)进行编译/汇编、连接以及产生目标文件。 成功编译/汇编、连接后,选择菜单 DebugStart/Stop Debug Session(或按 Ctrl+F5 键) 进入程序调试状态,Keil 提供对程序的模拟调试功能,内建一个功能强大的仿真 CPU 以模 拟执行程序。Keil 能以单步执行(按 F11 或选择 DebugStep) 、过程单步执行(按 F10 或 选择 DebugStep Over) 、全速执行等多种运行方式进行程序调试。如果发现程序有错, 可采用在线汇编功能对程序进行在线修改(DebugInline Assambly) ,不必执行先退出 调试环境、修改源程序、对工程重新进行编译/汇编和连接、然后再次进入调试状态的步骤。 对于一些必须满足一定条件(如按键被按下等)才能被执行的、难以用单步执行方式进行 调试的程序行,可采用断点设置的方法处理(DebugInsert/Remove Breakpoint 或 DebugBreakpoints等) 。在模拟调试程序后,还须通过编程器将.hex 目标文件烧写入 单片机中才能观察目标样机真实的运行状况。 Keil 软件 Eval 版(免费产品)的功能与商业版相同,只是程序的最大代码量不得超过 2kB,但对初学者而言已是足够。Keil 软件由于其强大的软件仿真功能,友好的用户界面 以及易于掌握的特点而受到工程技术人员的欢迎,有人甚至认为 Keil 是目前最好的 51 单 片机开发应用软件。 2.3 软件连接软件连接使用使用 a、假若 KeilC 与 Proteus 均已正确安装在 C:Program Files 的目录里,把 C:Programe FileLabcenter ElectronicsProteus 6 ProfessionalMODELSVDM51.dl 复制到 C:Program FileKeilCC51BIN 目录里。 b、用记事本打开 C:Program FileskeilCC51TOOLS.INI 文件,在C51栏目下加入: TDRV5=BINVDM51.DLL (Proteus VSM Monitor-51 Driver) 其中“TDRV5”中的“5”要根据实际情况写,不要和原来的重复。 (步骤 1 和 2 只需在初次使用设置。 ) c、进入 KeilC Vision2 开发集成环境,创建一个新项目(Project),并为该项目选定合 适的单片机 CPU 器件(如:Atmel 公司的 AT89C51) 。并为该项目加入 KeilC 源程序。 d、单击“Project 菜单/Options for Target”选项或者点击工具栏的“option for ta rget”按钮,弹出窗口,点击“Debug”按钮,出现如图所示页面。 在出现的对话框里在右栏上部的下拉菜单里选中“Proteus VSM Monitor 一 51 Driver” 。 并且还要点击一下“Use”前面表明选中的小圆点。 再点击“Setting”按钮,设置通信接口,在“Host”后面添上“127.0.0.1” ,如果使用的 不是同一台电脑,则需要在这里添上另一台电脑的 IP 地址(另一台电脑也应安装 Proteus)。 在“Port”后面添加“8000” 。设置好的情形如图所示,点击“OK”按钮即可。最后将工程 编译,进入调试状态,并运行。 e、Proteus 的设置 进入 Proteus 的 ISIS,鼠标左键点击菜单“Debug” , 选中“use romote debuger monitor” ,如图所示。此后,便可实现 KeilC 与 Proteus 连接调试。 f、KeilC 与 Proteus 连接仿真调试 单击仿真运行开始按钮,我们能清楚地观察到每一个引脚的电频变化,红色代表高电 频,蓝色代表低电频。 3 (15,11)汉明码的原理汉明码的原理 3.1 基本概念基本概念 海明码是一种可以纠正一位差错的编码。它是利用在信息位为 k 位,增加 r 位冗余位, 构成一个 n=k+r 位的码字,然后用 r 个监督关系式产生的 r 个校正因子来区分无错和在码 字中的 n 个不同位置的一位错。它必需满足以下关系式: 2r=n+1 或 2r=k+r+1 海明码的编码效率为: R=k/(k+r) 式中 k 为信息位位数,r 为增加冗余位位数 线性分组码是一类重要的纠错码,应用很广泛。在(n,k)分组码中,若督元是按线 性关系相加而得到的,则称其为线性分组码。 现在以(15,11)分组码为例来说明线性分组码的特点。设其码字为 A=a6,a5,a4,a3,a2,a1,a0,其中前 4 位是信息元,后 3 位是监督元,可用下列线 性方程组来描述该分组码,产生监督元: a2 = a6 + a5 + a4 a1 = a6 + a5 + a3 (2.1.1) a0 = a6 + a4 + a3 显然,这 3 个方程是线性无关的。经计算可得(15,11)码的全部码字,如表 2-1 所示。 表 2-1 (15,11)码的全部码字 ?/P 码 字码 字序 号信 息码元监 督 元 序 号信 息码元监 督 元 00 0 0 00 0 081 0 0 01 1 1 1 0 0 0 10 1 191 0 0 11 0 0 2 0 0 1 01 0 1101 0 1 00 1 0 30 0 1 11 1 0111 0 1 10 0 1 40 1 0 01 1 012 1 1 0 00 0 1 50 1 0 11 0 113 1 1 0 10 1 0 60 1 1 00 1 114 1 1 1 01 0 0 70 1 1 10 0 015 1 1 1 11 1 1 不难看出,上述(15,11)码的最小码距 d0=3,它能纠 1 个错或检 2 个错。 汉明码是能够纠正单个错误的线性分组码,其特点是:最小码距 d0=3,码长 n 与监督 位满足 n=2r-1 的关系,上述的(15,11)线性分组码就是一个汉明码。 3.2 监督矩阵监督矩阵 H 式(2.1.1)所示(15,11)汉明码的 3 个监督方程改写后可用矩阵形式表示为 a14 . 0 1 1 0 1 0 0 . .a6 . a5 1 1 1 0 1 0 0 a4 0 1 1 0 1 0 1 0 a3 = 0 (2.2.1) 1 0 1 1 0 0 1 a2 0 a1 a0 并简记为 HAT=0T 或 AHT=0 (2.2.2) H 称为监督矩阵,一旦 H 给定,信息位和监督位之间的关系也就确定了。H 矩阵可以分 成 2 部分 1 1 1 0 1 0 0 H = 1 1 0 1 0 1 0 =P Ir (2.2.3) 1 0 1 1 0 0 1 HAT=0T,可以用来作为判断接收码字 A 是否出错的依据。 3.3 生成矩阵生成矩阵 G 把监督方程补充完整并改写为矩阵形式 a6 1 0 0 0 a5 0 1 0 0 a4 0 0 1 0 a6 a3 = 0 0 0 1 a5 (2.3.1) a2 1 1 1 0 a4 a1 1 1 0 1 a3 a0 1 0 1 1 A = a6 a5 a4 a3 G (2.3.2) 其中 1 0 0 0 1 1 1 0 1 0 0 1 1 0 G = 0 0 1 0 1 0 1 (2.3.3) 0 0 0 1 0 1 1 G 称为生成矩阵,由 G 和信息组就可以产生全部码字。生成矩阵也可以分成 2 部分, 即 G = Ik Q (2.3.4) 其中 1 1 1 Q = 1 1 0 = PT (2.3.5) 1 0 1 0 1 1 3.4 伴随式(校正子)伴随式(校正子)S 设发送码组 A= an1,an2,a1,a0 ,在传输过程中可能发生误码。接收码组 B= bn1,bn2,b1,b0 ,收发码组之差定义为错误图样 E,即 E = B - A (2.4.1) 令 S = BHT,称为伴随式或校正子。 S = BHT =(A + E)HT = EHT (2.4.2) 上述(15,11)汉明码的伴随式与错误图样的对应关系如表 2-2 所示。 表 2-2(15,11)汉明码 S 与 E 的对应关系 ES 序 号 错误 码位 e6 e5 e4 e3 e2 e1 e0s2 s1 s0 0/0 0 0 0 0 0 00 0 0 1b00 0 0 0 0 0 10 0 1 2b10 0 0 0 0 1 00 1 0 3b20 0 0 0 1 0 01 0 0 4b30 0 0 1 0 0 00 1 1 5b40 0 1 0 0 0 01 0 1 6b50 1 0 0 0 0 01 1 0 7b61 0 0 0 0 0 01 1 1 4(15,11)汉明码编解码器的设计汉明码编解码器的设计 4.1(15,11)汉明码的编码思路汉明码的编码思路 (15,11)汉明码的编码就是将输入的四位信息码编成七位的汉明码,即加入三位监督位。 根据式(2.3.2)A A = a6 a5 a4 a3 G G 可知,信息码与生成矩阵 G G 的乘积就是编好以后 的(15,11)汉明码,而生成矩阵 G G 又是已知的,由式(2.3.3)得 1 0 0 0 1 1 1 0 1 0 0 1 1 0 G G = 0 0 1 0 1 0 1 (3.1.1) 0 0 0 1 0 1 1 所以,可以得出如下方程组 a6 = a6 a5 = a5 a4 = a4 a3 = a3 (3.1.2) a2 = a6 + a5 + a4 a1 = a6 + a5 + a3 a0 = a6 + a4 + a3 根据式(3.1.2)就可以编出编码程序了。 4.2(15,11)汉明码的编码程序设计汉明码的编码程序设计 根据(15,11)汉明码的编码原理,首先画出程序设计的流程图: 图 3.1 编码流程图 /* */ / 该函数是模拟信道函数 / 作用:改变要传输的码字, / 咐:码字经过该信道后,不产生错误的概率是 70%,产生一位错误的概率是 21%,两位 错误的概率是 6%,三位错误的概率是 3% / 入口参数:n(信源个数),rr(接收到的码字),cc(发送的码字) / 出口参数:q(产生一位随机错误的码字个数) int Channel(int n,int rrA/MN,int ccA/MN) int a,i,j,k,a1,a2,a3,q=0; / k 代表经过信道后码字会错几位,a1,a2,a3 表示具体的错误位置 srand( 18 ); for(i=0;in;i+) a=rand()%100; / a 表示小于 100 的一个随机数 if(a70) k=0; / 该判断语句控制没有产生错误的概率是 70% else if(a91) k=1; / 该判断语句控制产生一位错误的概率是 21%,在出错概率中占 70% else if(a97)k=2; / 该判断语句控制产生两位错误的概率是 6%,在出错概率中占 20% else k=3; / 该判断语句控制产生三位错误的概率是 3%,在出错概率中占 10% switch (k) / 该语句判断出现几位错误,并作出相应的处理 case 0: for(j=0;jN;j+) / k0 表示没有产生错误,接收到的码字 r 跟发送的码字 c 相等 rrij=ccij; break; case 1: a1=rand()%7; / k=1 表示产生一位错误,a1 是随机产生的一个小于 7 的数,作为码字的错误位置 for(j=0;jN;j+) if(j=a1) rrij=(ccij+1)%2; / (ci+1)%2 是为了把对应位置上的 ci值由 0 变 1 或者由 1 变 0 else rrij=ccij; q+; / 统计产生一位随机错误的码字 break; case 2: a1=rand()%7; / k=2 表示产生两位错误,a1 和 a2 代表两个不同的错误位置 a2=rand()%7; while(a2=a1) / 该循环防止 a1 和 a2 相等 a2=rand()%7; for(j=0;jN;j+) if(j=a1|j=a2) rrij=(ccij+1)%2; / (ci+1)%2 是为了把对应位置上的 ci由 0 变 1 或者由 1 变 0 else rrij=ccij; break; case 3: a1=rand()%7; / k=3 表示产生三位错误 a2=rand()%7; while(a2=a1) / a1 和 a2 代表两个不同的错误位置,该循环防止 a1 和 a2 相等 a2=rand()%7; a3=rand()%7; while(a3=a2|a3=a1) / a1,a2,a3 分别代表三个不同的错误位置,该循环防止 a1,a2,a3 相等 a3=rand()%7; for(j=0;jN;j+) if(j=a1|j=a2|j=a3) rrij=(ccij+1)%2; / (ci+1)%2 是为了把对应位置上的 ci由 0 变 1 或者由 1 变 0 else rrij=ccij; break; default: printf(errorn); return q; 最后,将算好的监督位与原来输入的信息码一起输出,这样,编码程序就算完成了。 5(15,11)汉明码的译码思路及程序设计汉明码的译码思路及程序设计 5.1(15,11)汉明码的译码思路汉明码的译码思路 (15,11)汉明码的译码就是将输入的七位汉明码翻译成四位的信息码,并且纠正其中可能出 现的一个错误。 由于生成矩阵 G G 是已知的,所以根据式(2.3.4)G G = = I Ik Q Q ,可以得到矩阵 Q Q 的值 1 1 1 Q Q = 1 1 0 = P PT (3.2.1) 1 0 1 0 1 1 那么 1 1 1 0 P P = 1 1 0 1 (3.2.2) 1 0 1 1 而监督矩阵 H H 与 P PT又存在一定的关系,即 H H =P P I Ir (3.2.3) 那么就可以算出监督矩阵 H H 的值,即 1 1 1 0 1 0 0 H H = = 1 1 0 1 0 1 0 (3.2.4) 1 0 1 1 0 0 1 所以 1 1 1 1 1 0 1 0 1 H HT = 0 1 1 (3.2.5) 1 0 0 0 1 0 0 0 1 根据式(2.4.2)S S = = BHBHT T = =(A A + + E E)H HT T = = EHEHT T可以看出校正子 S S 与错误图样 E E 之间有确定的 线性变换关系。而 E E = en-1,en-2,e1,e0 ,这样就可以算出校正子 S S 与(15,11)汉明码 各位之间的关系,即 S2 = a2 + a6 + a5 + a4 S1 = a1 + a6 + a5 +a3 (3.2.6) S0 = a0 + a6 + a4 + a3 对照表 2-2,就可以确定每一位出错时,对应的校正子 s2s1s0的值。 这样,译码问题就迎刃而解了。 5.2(15,11)汉明码的译码程序设计汉明码的译码程序设计 根据(15,11)汉明码的译码原理,首先画出程序设计的流程图: 图 3.2.1 译码流程图 / 该函数是求码字函数 / 作用:求得纠正后的码字 t / 入口参数:n(信源个数),ee(陪首集),tt(纠正后的码字),rr(接收到的码字) / 出口参数:没有 void TYard(int n,int eeA/MN,int ttA/MN,int rrA/MN) int i,j; for(i=0;in;i+) for(j=0;jN;j+) if(eeij) ttij=(rrij+1)%2; else ttij=rrij; 最后,将没有错误的(15,11)汉明码或已经纠正 1 个错误的(15,11)汉明码输出,这样 译码程序就完成了。 为了方便阅读波形,加入输出了校正子 S S 和错误位数 C C。若第 0 位(a0)出错,则 C C 输出 0,依次类推;若无错,则输出 7。 6 编译程序的调试及仿真编译程序的调试及仿真 6.1 系统仿真电路设计系统仿真电路设计 6.1.1 系统电路框图系统电路框图 6.1.2 显示电路设计显示电路设计 AT89C51 单片机 驱动电路 键盘电路 显示电路 串口 6.1.3 键盘电路设计键盘电路设计 6.1.4 整机设计整机设计 6.2 仿真分析仿真分析 6.2.1 仿真流程图仿真流程图 开机 显示待编码数据 按下编码键 显示编码数据 按下译码键 显示译码数据 确认码字正确,返回 6.2.2 调试过程调试过程 为期半年的毕业设计就这么结束了,忙碌而又辛劳,但是却让我学到了许多东西,为 不久的将来走上工作岗位打下了一定的基础。 一开始老师给我们布置了题目(15,11)汉明码的编解码器的设计。拿到题目,我们 非常着急,以为这个题目很难,象一只没头的苍蝇,我们开始乱钻,最后,一头扎进了图 书馆,借了好几本书。来仔细的翻看了通信原理的书和笔记,对(15,11)汉明码的一些基本 概念有了进一步的会议。突然发现这个课题其实一点也不难,一点技术含量都没有,似乎 一个人也可以完成的。仔细阅读了(15,11)汉明码的原理以后,我就开始构思程序的编写, 准备画流程图。其实编译码的思

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论