通信报告-汉明码编译码

上传人:ji****72 文档编号:39545254 上传时间:2018-05-17 格式:DOC 页数:17 大小:571.54KB
返回 下载 相关 举报
通信报告-汉明码编译码_第1页
第1页 / 共17页
通信报告-汉明码编译码_第2页
第2页 / 共17页
通信报告-汉明码编译码_第3页
第3页 / 共17页
通信报告-汉明码编译码_第4页
第4页 / 共17页
通信报告-汉明码编译码_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《通信报告-汉明码编译码》由会员分享,可在线阅读,更多相关《通信报告-汉明码编译码(17页珍藏版)》请在金锄头文库上搜索。

1、自主设计实验二.汉明码编译码121180165赵博睿1实验原理汉明码是差错控制编码的一种,是一种线性分组码,可以纠一位错,利用监督位和信息位的线性方程关系实现监督。满足n=k+r,n=2r-1 的关系,本次实验采用的是(7,4)汉明码。2设计思路本次实验可以分为 6 个模块:m 序列产生模块、汉明编码模块、编码输出模块、信道加错模块、接收译码模块、译码输出模块。1.m 序列产生模块:上次实验做过,因此不赘述设计思路;2.汉明码编码模块:需要将 m 序列缓冲到一个寄存器中进行汉明编码,编码方法由生成矩阵 G 决定,需要将编码数据放入到另一个寄存器中。3.编码输出模块:将寄存器中编好的数据输出,需

2、要另一个寄存器进行并行存储到串行输出的转换,并且需要一个同步计数器跟踪串行输出的首位。4.信道加错模块:需要一个计数器来进行固定频率的加错,需要一个寄存器进行汉明码串行输出到并行存储的转换。5.译码输出模块:将加错后的汉明码进行纠错译码并且输出,需要一个同步信号查找首位,需要一个寄存器进行译码,需要一个寄存器进行译码后数据并行存储到串行输出的转换。从技术层面来讲,需要三种技术:同步技术、串/并行转换技术、编译码技术。3Verilog 代码module hanmingma(clk,mout,hout,tout);input clk;/晶振 clk 信号/output reg mout;/m 序列

3、输出/output reg hout;/汉明码输出/reg mclk;/m 序列 clk/reg hclk;/汉明码 clk/reg 3:0 mreg;/m 序列寄存器/reg 6:0 hreg;/用来汉明码编码的汉明码寄存器/reg 6:0 hreg2;/用来输出的汉明码寄存器/reg 6:0 rereg;/接收端汉明码寄存器/reg 3:0 m;/m 序列产生寄存器/reg 7:0 count1;/mclk 计数器/reg 7:0 count2;/hclk 计数器/reg 1:0 mcount;/m 序列同步计数器/reg 2:0 hcount;/汉明码同步计数器/reg 6:0 ecou

4、nt;/加错计数器/reg 3:0 rem;/用来译码的译码 m 序列寄存器/output reg tout;/译码输出/reg 3:0 rem2;/用来输出的译码 m 序列寄存器/reg2:0 tcount;/译码输出同步计数器/reg 2:0 a1;/接收端同步寄存器 1/reg2:0 a2;/接收端同步寄存器 2/reg 3:0 acount;/接收端同步计数器/always (posedge clk)beginif(count1=223)/分频产生 32khz 时钟信号 mclk/beginmclk=mclk;count1=0;endelsecount1=count1+1;if(cou

5、nt2=127)/分频产生 56khz 的时钟信号 hclk/beginhclk=hclk;count2=0;endelsecount2=count2+1;end always (posedge mclk)/产生 m 序列并且输出到 mout/beginif(m=0)m=1;elsebeginm0=m0m3;m1=m0;m2=m1;m3=m2;mout=m3;endendalways (posedge mclk)/将 mout 输入到 mreg 寄存器中并且计数,每当存入 4 个数据时进行汉明码编码并存储到 hreg 寄存器中,并且重新开始计数/beginmreg3:1=mreg2:0;mre

6、g0=mout;if(mcount=2)beginhreg6:3=mreg3:0;hreg2=mreg3mreg2mreg1;hreg1=mreg1mreg2mreg0;hreg0=mreg3mreg0mreg2;mcount=mcount+1;endelsemcount=mcount+1;endalways (posedge hclk)/将 hreg 中的汉明码存入 hreg2 中用以输出,hreg2 中的最高位输出到 hout 并且进行移位,同时进行计数,输出 7 个数据之后重新将 hreg 中的数据存入 hreg2 中并且重复上述输出过程/beginhout=hreg26;hreg26:

7、1=hreg25:0;if(hcount=6)beginhreg2=hreg;hcount=0;endelsehcount=hcount+1;endalways (posedge hclk)/模拟加错信道,将 hout 输入到接收端汉明码寄存器,并将接收端寄存器数据移位,同时进行错码周期计数,当传输 18 个数据时,将当前数据取反输入给接收端/beginrereg6:1=rereg5:0;if(ecount=17)beginrereg0=hout;ecount=0;endelsebeginrereg0=hout;ecount=ecount+1;endendalways (posedge hcl

8、k)/进行接收端汉明码首位寻址,若两个同步监督寄存器中有一个为 0,即连续两个 7 位序列中有一个无错误,视为同步成功,将同步计数器归 0,否则同步计数器数值不变,继续寻找满足条件的首位/beginif(acount=6)beginif(a2=0|a1=0)acount=0;elseacount=6;endelseacount=acount+1;endalways (posedge hclk)/接收端纠错译码和监督,寻找首位时进行同步监督,并将同步监督寄存器 1 值赋给同步监督寄存器 2,以实现监督连续两组汉明码的目的,与上一个模块共同作用保证同步,并同时进行纠错译码,将译码后的结果放到译码

9、m 序列寄存器中/beginif(acount=6)begina12=rereg6rereg5rereg4rereg2;a11=rereg5rereg4rereg3rereg1;a10=rereg6rereg5rereg3rereg0;a2=a1;rem3=(rereg5rereg3rereg4rereg1)rem2=(rereg5rereg3rereg4rereg1)rem1=(rereg5rereg3rereg4rereg1)rem0=(rereg5rereg3rereg4rereg1)endendalways (posedge mclk)/译码后的 m 序列输出,将译码 m 序列寄存器中

10、的数据存入 rem2 中,rem2 中最高位输出到 tout 并进行移位,并同时进行计数,输出 4 个数据后将 m 序列寄存器中的数据再次存入 rem2 中,重复上述输出过程/begintout=rem23;rem23:1=rem22:0;if(tcount=3)beginrem2=rem;tcount=0;endelsetcount=tcount+1;endendmodule4实验结果分析1.程序仿真结果分析:图 1.汉明码编码仿真分析:图中的 hout 为.1110100 1011000 0010110 0011101.,经查表(此表格在报告最后附录给出)可知分为别1110,1011,00

11、10,0011 的汉明码编码,而 1110-1011-0010-0011 也符合 mout 的输出,所以这个仿真结果表明编码成功。图 2.汉明码编码仿真(2)分析:图中的 hout 为.1011000 0010110 0011101 1101001 0110001 0100111.,经查表可知分别为 1011,0010,0011,1101,0110,0100 的汉明码编码,而 1011-0010-0011-1101-0110-0100 也符合 mout 的输出,所以这个仿真结果也表明了编码成功。图 3.汉明码译码仿真分析:在这个仿真中我们可以发现,由于同步需要一定时间,所以比较靠前的序列无法正

12、确译码,在实际应用中,这一段序列应该放弃译码,以保证不要因为同步所需的时间而导致整个译码错误。图 4.汉明码译码仿真(2)分析:如图所示,经过一段时间后同步完成,可以实现纠错译码,而从这个序列之后的译码工作都准确无误地完成。(因为加错周期为 17,所以可以保证不会发生误同步)2.实际输出结果分析:图 1.编码输出 图 2.编码输出(2)分析:,CH1 为 m 序列、CH2 为编码输出。图一中 CH2 输出序列为:.1111111 0101100 1001110 0001011.,符合 1111-0101-1001-0001 的汉明码编码序列,而 1111010110010001 也是正确的 m

13、 序列输出。图二中 CH2 输出序列为:.1001110 0001011 1110100 1011000.,符合 1001-0001-1110-1011 的汉明码编码序列,而1001000111101011 也是正确的 m 序列输出。图 3.译码输出 图 4.译码输出(2)分析:图 3 和图 4 说明在加错周期为 17 时,经过一段的缓冲序列进行同步,可以实现正确的译码。而这样的译码并非同步译码,而是刚好相差了一个周期(15 个码元)。5设计中遇到的问题和解决方案1.串行/并行、并行/串行的相互转换的实现方法:本次实验中多次需要将并行数据串行输出、将串行输出数据再以几个为一组并行存储起来。实现

14、这种转换的简便方法是利用寄存器实现。并行转换串行:引入另一个同样大小的寄存器和一个计数时钟以确定首位(同步),这个新的寄存器用来移位输出,并且在输出同时进行计数,当寄存器数据全部输出之后,计数器刚好达到周期数,进行新一轮的赋值和计数。串行转换并行:将串行输出转换成并行数据存储起来,是为了进行编码或者译码,这同样需要同步,所以也要引入一个计数器,当然也需要一个寄存器用来移位存储,当计数达到周期数时,将寄存器中的数据进行编码或者译码并存储到另一个寄存器中。此时计数器归零,继续移位存储。(重复上述计数过程和编译码)2.编码和纠错译码的实现方法:本次实验的核心步骤就是编码和纠错译码,编码只需要根据监督

15、位与信息位的关系即可进行简单的过程赋值和寄存器存储;而译码则需要纠错,纠错方式有很多种,在本次实验中,我选择了将输出各位直接与对应的 S 模二相加,当对应的 S 值为 1 时,相当于该位出错,则模二加 1 即是取反,当对应的 S 值为 0 是,相当于该位无措,则模二加 0 即是保持不变。而对 S 的判定只需要按位与的操作即可实现。3.接收端查找首位并同步的方法:这是本次实验中相对而言比较难实现的技术,我采用了两种方法。第一个是利用 hreg1、hreg2 串并行转换模块的时钟信号来进行接收端的同步,但经过助教的提示,发现这种方法是不合理的,因为这在实际应用时需要一个 clk 信号与有用信号同时传输,不仅耗费能量也占用信道。因此改进后采用了第二种方法,通过寻找一个无错码来进行同步,但这种方法比较容易误判,所以寻找了两个连续码字,如果其中有一个无错码则视为同步,否则继续移位寻找。这样同步的方式使得前面大部分码

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号