汉明码论文.doc
《汉明码论文.doc》由会员分享,可在线阅读,更多相关《汉明码论文.doc(27页珍藏版)》请在冰豆网上搜索。
基于C51的汉明码编码器和译码器的设计
摘要:
数字信号在传输过程中,由于受到干扰的影响,码元波形将变坏。
接收端收到后可能发生错误判决。
由乘性干扰引起的码间串扰,可以采用均衡的办法纠正,而加性干扰的影响可以采用差错控制的措施了。
汉明码就是一种能纠正一位错码且编码效率较高的线性分组码,它能纠正一个错码或检测两个错码。
关键词:
汉明码,编码,译码,C51
Abstract:
Thedigitalsignalduringtransmission,duetotheimpactofinterference,thesymbolwaveformdeterioration.Receivermayreceiveanerroraftertheverdict.Byamultiplicativeinter-symbolinterferencecausedbycrosstalk,abalancedapproachcanbeusedtocorrect,andtheadditiveeffectsofinterferencecanbeusedforerrorcontrolmeasures.Hammingcodeisacodetocorrectawrongandahighercodingefficiencyoflinearblockcodesthatcancorrectawrongcodeorwrongcodedetectiontwo.
Keywords:
Hammingcode,coding,decoding,C51language
目录
1 绪论 -3-
1.1 问题的背景及提出 -3-
1.2 问题的研究及解决 -3-
1.3 设计研究的目的 -4-
2 KEIL及PROTEUS简介 -4-
2.1 Proteus的简介 -4-
2.2 Keil软件及其调试功能简介 -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的简介
ProteusISIS是英国Labcenter公司开发的电路分析与实物仿真软件[9]。
它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:
①实现了单片机仿真和SPICE电路仿真相结合。
具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。
②支持主流单片机系统的仿真。
目前支持的单片机类型有:
68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。
③提供软件调试功能。
在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如KeilC51uVision2等软件。
④具有强大的原理图绘制功能。
总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。
Proteus主要用于绘制原理图并可进行电路仿真,ProteusARES主要用于PCB设计。
ISIS的主界面主要包括:
1是电路图概览区、2是元器件列表区、3是绘图区。
绘制电路图的过程如下:
单击2区的P命令即弹出元器件选择(PickDevices)对话框,Proteus提供了丰富的元器件资源,包括30余种元器件库,有些元器件库还具有子库。
利用该对话框提供的关键词(Keywords)搜索功能,输入所要添加的元器件名称,即可在结果(Results)中查找,找到后双击鼠标左键即可将该元器件添到2区,待所有需要的元器件添加完成后点击对话框右下角的OK按钮,返回主界面。
接着在2区中选中某一个元器件名称,直接在3区中单击鼠标左键即可将该元器件添加到3区。
由于是英国的软件,特别要注意的是绘图区中鼠标的操作和一般软件的操作习惯不同,这正像是司机座位和人行道走向和国内不同一样。
单击左键是完成在2区中被选中的元器件的粘贴功能;将鼠标置于某元器件上并单击右键则是选中该元器件(呈现红色),若再次单击右键的话则删除该元器件,而单击左键的话则会弹出该元器件的编辑对话框(EditComponent);若不需再选中任何元器件,则将鼠标置于3区的空白处单击右键即可;另外如果想移动某元器件,则选中该元器件后再按住鼠标左键即可将之移动。
元器件之间的连线方法为:
将鼠标移至元器件的某引脚,即会出现一个“×”符号,按住鼠标左键后移动鼠标,将线引至另一引脚处将再次出现符号“×”,此时单击鼠标左键便可完成连线。
连线时在需拐弯的地方单击鼠标左键即可实现方向的改变。
绘制好电路后,可利用1区的绿色边框对3区的电路进行定位。
2.2Keil软件及其调试功能简介
目前流行的51系列单片机开发软件是德国Keil公司推出的KeilC51软件,它是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。
Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:
μVisionIDE集成开发环境(包括工程管理器、源程序编辑器、程序调试器)、C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及Monitor-51、RTX51实时操作系统。
应用Keil进行软件仿真开发的主要步骤为:
编写源程序并保存——建立工程并添加源文件——设置工程——编译/汇编、连接,产生目标文件——程序调试。
Keil使用“工程”(Project)的概念,对工程(而不能对单一的源程序)进行编译/汇编、连接等操作。
工程的建立、设置、编译/汇编及连接产生目标文件的方法非常易于掌握。
首先选择菜单File—New…,在源程序编辑器中输入汇编语言或C语言源程序(或选择File—Open…,直接打开已用其他编辑器编辑好的源程序文档)并保存,注意保存时必须在文件名后加上扩展名.asm(.a51)或.c;然后选择菜单Project—NewProject…,建立新工程并保存(保存时无需加扩展名,也可加上扩展名.uv2);工程保存后会立即弹出一个设备选择对话框,选择CPU后点确定返回主界面。
这时工程管理窗口的文件页(Files)会出现“Target1”,将其前面+号展开,接着选择SourceGroup1,右击鼠标弹出快捷菜单,选择“AddFiletoGroup‘SourceGroup1’”,出现一个对话框,要求寻找并加入源文件(在加入一个源文件后,该对话框不会消失,而是等待继续加入其他文件)。
加入文件后点close返回主界面,展开“SourceGroup1”前面+号,就会看到所加入的文件,双击文件名,即可打开该源程序文件。
紧接着对工程进行设置,选择工程管理窗口的Target1,再选择Project—OptionforTarget’Target1’(或点右键弹出快捷菜单再选择该选项),打开工程属性设置对话框,共有8个选项卡,主要设置工作包括在Target选项卡中设置晶振频率、在Debug选项卡中设置实验仿真板等,如要写片,还必须在Output选项卡中选中“CreatHexFi”;其他选项卡内容一般可取默认值。
工程设置后按F7键(或点击编译工具栏上相应图标)进行编译/汇编、连接以及产生目标文件。
成功编译/汇编、连接后,选择菜单Debug—Start/StopDe