汉明码编译码重点讲义资料.docx

上传人:b****8 文档编号:29018952 上传时间:2023-07-20 格式:DOCX 页数:13 大小:266.81KB
下载 相关 举报
汉明码编译码重点讲义资料.docx_第1页
第1页 / 共13页
汉明码编译码重点讲义资料.docx_第2页
第2页 / 共13页
汉明码编译码重点讲义资料.docx_第3页
第3页 / 共13页
汉明码编译码重点讲义资料.docx_第4页
第4页 / 共13页
汉明码编译码重点讲义资料.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

汉明码编译码重点讲义资料.docx

《汉明码编译码重点讲义资料.docx》由会员分享,可在线阅读,更多相关《汉明码编译码重点讲义资料.docx(13页珍藏版)》请在冰豆网上搜索。

汉明码编译码重点讲义资料.docx

汉明码编译码重点讲义资料

汉明码编译码

一设计思想

汉明码是一种常用的纠错码,具有纠一位错误的能力。

本实验使用Matlab平台,分别用程序语言和simulink来实现汉明码的编译码。

用程序语言实现就是从原理层面,通过产生生成矩阵,错误图样,伴随式等一步步进行编译码。

用simulink实现是用封装好的汉明码编译码模块进行实例仿真,从而验证程序语言中的编译码和误码性能分析结果。

此外,在结合之前信源编码的基础上,还可实现完整通信系统的搭建。

二实现流程

1.汉明码编译码

图1汉明码编译码框图

1)根据生成多项式,产生指定的生成矩阵G

2)产生随机的信息序列M

3)由

得到码字

4)进入信道传输

5)计算

得到伴随式

6)得到解码码流

7)得到解码信息序列

2.汉明码误码性能分析

误码率(SER)是指传输前后错误比特数占全部比特数的比值。

误帧率(FER)是指传输前后错误码字数占全部码字数的比值。

通过按位比较、按帧比较可以实现误码率和误帧率的统计。

3.构建完整通信系统

图2完整通信系统框图

三结论分析

1.汉明码编译码

编写了GUI界面方便呈现过程和结果。

图3汉明码编译码演示GUI界面

以产生(7,4)汉明码为例说明过程的具体实现。

1)根据生成多项式,产生指定的生成矩阵G

用[H,G,n,k]=hammgen(3,'D^3+D+1')函数得到系统码形式的校验矩阵H、G以及码字长度n和信息位数k

2)产生随机的信息序列M

3)由

得到码字

4)进入信道传输

假设是BSC信道,错误转移概率设定为0.1

传输后接收端得到的码流为

红色表示错误比特。

5)计算

得到伴随式

错误图样

0000001

0000010

0000100

0001000

0010000

0100000

1000000

伴随式

101

111

011

110

001

010

100

查表可知第一行码字错误图样为0100000,第二行码字错误图样为1000000,第三行码字错误图样为0000001。

进行

即可得到纠错解码的码字C2。

6)得到解码码流

7)得到解码信息序列

可以看出解码信息序列与原信息序列一样,体现了汉明码的纠错能力。

2.性能分析

1)BSC信道仿真

设置BSC错误转移概率Pe从0到1变化,步进为0.01,在每个Pe值进行1000次蒙特卡洛仿真,得到图4所示误码率随Pe变化曲线图和图5所示误帧率随Pe变化曲线图。

图6误码率随Pe变化曲线图

图中绿线为BSC信道误码率,红线为设定Pe值,蓝线为Hamming码解码误码率。

由图线可以看出仿真的BSC信道误码率与Pe一致。

在Pe<0.2时,Hamming码的解码误码率随着BSC信道错误传输概率Pe的减小而减小。

Hamming码的解码误码率显著下降,约为Pe的1/2。

Hamming码的纠1位错起到了很好的效果。

0.2

这是因为在Pe>0.2时,传一个码字错误比特数近似为2,而Hamming码只能纠一位错,两位同时出错时会纠成另一个码字,这样就可能增加误比特数,使得“越纠越错”。

Pe>0.5时,情况恰好相反。

图7误帧率随Pe变化曲线图

可以看出随着Pe增加,BSC传输误帧率和Hamming译码误帧率成S曲线上升达到1。

Hamming译码误帧率要低于BSC传输误帧率,体现了其纠错能力使得码字错误减少这一效果。

与误码率的图对比可以发现,误帧率要比误比特率高。

为了进一步验证结果的正确性,进行了simulink仿真。

图8BSC信道仿真框图

用伯努利二进制发生器产生随机序列,进行汉明码编码,进入BSC信道传输,之后进行汉明码译码,用ErrorRateCalculation模块统计误码率,结果如下:

图9simulink仿真BER随Pe变化曲线图

与程序实现仿真的结果几乎一样。

2)AWGN信道仿真

AWGN信道仿真直接用simulink实现。

图10AWGN信道仿真框图

设置系统的数字调制方式为2FSK,设定AWGN信道的SNR从0到8dB以1dB步进变化,得到误码率统计图。

图11simulink仿真BER随SNR变化曲线图

图中绿线为2FSK调制误码率,是由于AWGN带来的。

蓝线为汉明码解码后误码率。

可以看出,汉明码能够很好的降低误码率。

在SNR达到5dB时错误概率降低为0.001.

3.完整通信系统的构建

以传输图片为例,信道设置为BSC信道。

在不加入汉明码和加入汉明码两种情况下观察传输后图像的情况。

结果如下表所示。

BSC错误转移概率Pe

0.1

0.05

0.01

0.001

0

BSC

传输图像

加汉明码误码率

0.0652

0.02

0.0006

0

0

加汉明码传输图像

由结果可以看出,加入信道编码后,当BSC错误转移概率Pe<0.01后,图像恢复性能有明显的改善。

这体现了汉明码虽然只有纠一位错的能力,但由于一般信道的Pe不会很大,其纠错的实用性和效果还是很好的。

四思考题解答

1.采用循环Hamming码在硬件实现中的优点?

与普通的线性分组码译码电路相比,循环汉明码不需要存储伴随式及错误图样,显著的节省了寄存器的使用,起到简化电路的作用。

2.Hamming码如何改进可提高纠检错性能?

可以在H校验矩阵基础上进行扩展,最后一行为全1行,最后一列矢量为[00…1]T。

这样任何3列是线性无关的,dmin=4,进行奇偶校验,纠错能力为1,检错能力为2。

 

下面通过实例的方式说明扩展H校验矩阵的检错性能。

首先在(7,4)汉明码的基础上进行扩展,得到(8,4)扩展汉明码的生成矩阵H。

简化译码表如下:

错误图样

0000

0001

0000

0010

0000

0100

0000

1000

0001

0000

0010

0000

0100

0000

1000

0000

伴随式

0001

0011

0101

1001

0111

1101

1111

1011

错码个数

原序列

错码序列

伴随式

查表结果

1

00000000

00000101

0100

2

11101000

11101010

0011

3

00010111

00100101

1001

4

01001110

11000010

0111

说明对于错码个数为1的,既可以检错也可以纠错;

错码个数为2的,可以检错,但不能纠错;

错码个数大于2的,被认为是错码个数为1,纠成其他码字。

 

附录

clearall

[H,G,n,k]=hammgen(3,'D^3+D+1');%

%[H,G,n,k]=hammgen(3,'D^4+D^2+D+1');

%[H,G,n,k]=hammgen(4,'D^4+D+1');%

%[H,G,n,k]=hammgen(5,'D^5+D^2+1');%

%%产生校验矩阵

E=[zeros(1,n);fliplr(eye(n,n))];

%产生错误图样一共是n+1个

S=mod(H*E',2);%生成错误图样的伴随式

%

%产生消息序列

%二进制随机矩阵

%M=randi([0,1],1,k);%产生4位消息列

nm=3;

M=randi([0,1],nm,k);%产生4位消息列

%消息序列

code=mod(M*G,2);%对消息序列编码

%BSC信道进入

Pe=0.1;

forj=1:

nm

fori=1:

n

code_bsc(j,i)=mod(code(j,i)+(unidrnd(round(1/Pe))==1),2);%模2加得到传输后的编码

delta(j,i)=code_bsc(j,i)-code(j,i);%作差来计算错误位置

end

end

ep=find(delta~=0);%errorposition

display(length(ep),'BSC错误位数')

display(length(ep)/(nm*n),'BSC误比特率');

Scode=mod(code_bsc*H',2)';%Scode=[110]';

errow2=0;

fori=1:

nm

ifsum(code_bsc(i,:

)-code(i,:

))~=0

errow2=errow2+1;

end

end

display(errow2,'BSC错误码字数');

%display(errow2/nm,'BSC误码率');

form=1:

nm

fori=1:

n+1

ifS(:

i)==Scode(:

m)

j=i;

end

end%找到对应的伴随式的位置

dcode(m,:

)=mod(code_bsc(m,:

)+E(j,:

),2);

end

er=length(find(dcode-code~=0));%计算误比特的个数

enta=er/(nm*n);

display(code,'信息序列码字')

display(code_bsc,'BSC传输后的信息序列码字')

display(dcode,'解码后的信息序列')

%display(errow2/nm,'解码后误码率');

%display(er,'解码后错误比特数');

m2=dcode(:

n-k+1:

end);

display(dcode,'解码后信息序列');

errow2=0;

fori=1:

nm

ifsum(dcode(i,:

)-code(i,:

))~=0

errow2=errow2+1;

end

end

%display(errow2,'解码后错误码字数');

%display(errow2/nm,'解码后误码率');

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 药学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1