forum.jpg

目录章节

第四节:信息恢复

内容:

1. 理解检纠错原理与拆包;

2. 设计编写检纠错与拆包的程序,恢复原始信息数据程序;


4.1检纠错

在通信过程种对信息惊醒信道编码,保证可靠性,其中检纠错是可靠性的主要的体现,检纠错包括2方面,一方面检查接收数据是否正确,两一方面也可以对错误数据按照一定的算法进行纠错,因此检纠错在通信系统种是非常有必要的。


4.1.1汉明码检纠错算法

汉明码是一种典型的信道编码,是分组码一种,它具有对每个码的检错能力(每接收到一个汉明码,可以判断该码是否正确),除此之外还具备1bit纠错能力。

假如定义S1,S2,S3

S1 = D6 ^ D5 ^ D4^D2 如果S1==0则说明D6 ,D5,D4,D2数据都是对的,否则说明,该组数据有错误,错误的数据个数不可控。

S2 = D6 ^ D5 ^ D3^D1 如果S2==0则说明D6 ,D5,D3,D1数据都是对的,否则说明,该组数据有错误,错误的数据个数不可控。

S3 = D6 ^ D4 ^ D3^D0 如果S3==0则说明D6 ,D4,D3,D0数据都是对的,否则说明,该组数据有错误,错误的数据个数不可控。

通过以上分析可以看出,当S1=0,S2=0,S3=0,说明汉明码全是对的。

1. 如何纠错?

所有纠错都是限定在错误1bit的情况,如果错误2bit以及以上,汉明码是无能无力

习惯上,S1,S2,S3叫做矫正子,通过它可以对接收到的汉明码进行纠错。

4.1.2汉明纠错典型程序设计

4.1.2.1设计框图

forum.jpg

设计框图

4.1.2.2 hmm_crt实现

1. 恢复汉明码

forum.jpg

代码设计程序

///////////////////////////////////////////////////////////////////////////////////////////////

always @(posedge clk_d )

if( (cnt ==5)&& (flag_seq_rec) )

D1<= seq_rec;

always @(posedge clk_d )

if( (cnt ==6)&& (flag_seq_rec) )

hmm<= {D6,D5,D4,D3 ,seq_rec ,D1,D0};C

/////////////////////////////////////////////////////////////////////////////////////////////

2. 纠错输出

always @(posedge clk_d )

case( {S1,S2,S3})

3’b011 : data<={ hmm[6:4] ,~hmm [3]};

3’b101 : data<={ hmm[6:5] ,~hmm [4], hmm [3]};

3’b110 : data<={ hmm[6] ,~hmm [5], hmm [4:3]};

3’b111 : data<={ ~hmm[6] , hmm [5:3]};

default : data<=hmm[6:3];

endcase

reg flag_hmm;

always @(posedge clk_d or negedge rst_n)

if(~rst_n)flag_hmm <=0;

else if( (cnt ==6) && (flag_seq_rec) ) flag_hmm <=1;else flag_hmm <=0;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

4.1.2.3unpack程序实现

forum.jpg

unpack程序实现