通信原理实验QPSK及汉明码纠错

通信原理实验QPSK及汉明码纠错
通信原理实验QPSK及汉明码纠错

实验报告

——QPSK 通信系统的Monte Carlo 仿真

马涛、米廷振

一、实验目的

1. 提高独立学习的能力

2. 培养发现问题,解决问题,分析问题的能力

3. 学习Matlab 的使用

4. 掌握4PSK 通信系统的Monte Carlo 仿真方法

5. 掌握4PSK 通信系统的组成原理

6. 比较编码信号与未编码信号在随机信道中的传输,加深对纠错编码原理的理解。

二、实验原理

1、调制解调原理:

4PSK将四进制符号映射到四种相位,利用相位传递信息。

(1)调制

经变换后可发现一个相位调制信号可以看作两个正交载波Smc和Sms的矢量和,起幅度取决于在每个信号区间内的相位。数字相位调

制信号在几何上可用Smc和Sms的二维向量来表示。

在AWGN 信道中,在一个区间内接受到的带通信号可以表示为

r(t) = um (t)+ n(t) = um (t)+ nc (t)cos(2πfct)?ns (t)sin(2πfct)

=Smc cos(2πfct)-Sms sin(2πfct) + nc (t)cos(2πfct)?ns (t)sin(2πfct)

=rc cos(2πfct)-rs sin(2πfct)

r(t)可用二维向量[rc,rs]表示

(2)解调

有两种方法:

最大投影点准则进行判决:将接收到的信号向量r 投射到M 个可能的传输信号向量{ } sm 之一上去,并选取对应与最大投影的向量;

最小距离法:分别计算信号到星座图上符号间的距离选取最小距离对应的符号。

2、信道纠错编码

由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。

汉明码:

发送端按照规定,计算出监督位S1 S2 S3的数值。S1 S2 S3 的值最终与错码位置的对应。

接收端收到每个码组后,先按式(8-2)~(8-4)计算出S1 、S2 和S3 ,再按表

8-2 判断错码情况。按上述方法构造的码称为汉明码。表8-2 中所列的(7,4)汉明码的最小码距d0 =3,因此,这种码能纠正一个错码或检测两个错码。

三、系统框图

(一)未加信道纠错编码的4PSK 调制通信系统

(二)信道纠错编码(7,4)汉明码+4PSK 调制的通信系统

四、实验过程

(一)未加信道纠错编码的4PSK 调制通信系统

1.实验程序:

主程序(main)

clc

N=100;%码元长度

sigma2=1;

s=source(2*N);%产生信源bit序列,每个码元由2bit构成,故二进制序列长度为2*N

[nc,ns]=nr(sigma2,N);%nr(eb,snr_db,n)

subplot(2,2,1);stem(s,'.');axis([0,2*N,0,1.5]);

[mc,ms]=psk(s);%调制

rc=mc+nc;

rs=ms+ns;

subplot(2,2,2);stem(rc,rs,'.');

r=ipsk(rc,rs);%最大投影法解调

subplot(2,2,3);stem(r,'.');axis([0,2*N,0,1.5]);

[pb,pB]=pe(s,r)%pb,pB分别为误比特率和误码率

rdis=ipskdis(rc,rs);%最小距离法解调

subplot(2,2,4);stem(rdis,'.');axis([0,2*N,0,1.5]);

[pbdis,pBdis]=pe(s,rdis) %pbdis,pBdis分别为误比特率和误码率

子程序:

(1)信源(source)

function s=source(N)

s=rand(1,N);%产生二进制序列

for i=1:N

if s(i)>=0.5

s(i)=1;

else

s(i)=0;

end

end

(2)噪声(nr)

function[nc,ns]=nr(sigma2,n)%噪声

sigma=sqrt(sigma2);

for i=1:n

u=rand;

z=sigma*sqrt(2*log10(1/(1-u)));

u=rand;

nc(i)=z*cos(2*pi*u);

ns(i)=z*sin(2*pi*u);

end

(3)调制(psk)

function [mc,ms]=psk(s)

%映射关系:由2bit二进制数转成四进制m=(0,1,2,3)带入映射公式%mc=1,ms=0----00

%mc=0,ms=1----01

%mc=-1,ms=0----10

%mc=0,ms=-1----11

N=length(s);

for i=1:2:N-1

mc((i+1)/2)=cos(2*pi*(s(i)*2+s(i+1))/4);

ms((i+1)/2)=sin(2*pi*(s(i)*2+s(i+1))/4);

end

(4)最大投影法(ipsk)

function r=ipsk(rc,rs) %最大投影点准则判决

%判断依据:无噪声干扰时rc=mc,ms=rs

%mc=1,ms=0----00--靠近*c轴(abs(rc)>abs(rs))且在第一、四象限

%mc=0,ms=1----01--靠近*s轴(abs(rc)

%mc=-1,ms=0----10--靠近*c轴(abs(rc)>abs(rs))且在第二、三象限

%mc=0,ms=-1----11--靠近*c轴(abs(rc)

for i=1:length(rc)

if (abs(rc(i))>abs(rs(i)))

if (rc(i)>0)

r(j:j+1)=[0,0];

else

r(j:j+1)=[1,0];

end

else

if(rs(i)>0)

r(j:j+1)=[0,1];

else

r(j:j+1)=[1,1];

end

end

j=j+2;

end

(5)最小距离法(ipskdis)

function r=ipskdis(rc,rs)%最小距离法判决

%判决方法:依次计算出每对rc,rs构成的坐标距离各码元对应坐标的距离

std=[0,0,0,1,1,0,1,1];

k=1;

for i=1:length(rc)

dis(1)=(rc(i)-1)^2+rs(i)^2;

dis(2)=rc(i)^2+(rs(i)-1)^2;

dis(3)=(rc(i)+1)^2+rs(i)^2;

dis(4)=rc(i)^2+(rs(i)+1)^2;%与std中码元的顺序对应求取距离

p=min(dis);%求得最小距离

for j=1:4

if(dis(j)==p)%得到最小距离的序号,由于dis的标号是与std码元的顺序相对应 %的,

因此可由下面的语句得到对应的码元

r(k:k+1)=std(2*j-1:2*j);

k=k+2;

end

end

end

end

(6)误比特率和误码率计算

function [b,B]=pe(s,r)

b=0%误bit率

B=0;%误码元率,每个码元由两个bit构成,>=1个bit错误均会引起1个码元错误

for i=1:length(s)

if(s(i)~=r(i))

b=b+1;

end

end

for i=1:2:length(s)-1

if (s(i)~=r(i))

B=B+1;

elseif((s(i+1)~=r(i+1)))

B=B+1;

end

end

b=b/length(s);

B=B*2/length(s);

2、实验结果:

(1)最大投影点准则、最小距离法进行判决

a, 计算噪声方差σ2分别为0、0.1、0.5、1.0时的符号差错概率和比特差错概率;N=100:

噪声方差为0:

pb =

pB =

pbdis =

pBdis =

噪声方差为0.1:

pb =

pB =

pbdis =

pBdis =

噪声方差为0.5:

pb =

0.0550

pB =

0.0900

pbdis =

0.0550

pBdis =

0.0900

噪声方差为1.0:

pb =

0.2700

pB =

0.3200

pbdis =

0.2700

pBdis =

0.3200

b, 画出在每种σ2时,在检测器输入端1000 个接收到的信号加噪声的样本(星座图);N=1000

噪声方差为0:

噪声方差为0.1:

噪声方差为0.5:

噪声方差为1.0:

c, 分别画出数据点为1000、5000、10000、100000 时的Monte Carlo 仿真误比特率曲

线和理论误比特率曲线,比较差别,分析数据点的数量对仿真结果的影响;

主程序:

subplot(2,1,1);

sigma2=[0,0.1,0.5,1];

for N=[1000,5000,10000,100000]

figure;

for i=1:length(sigma2)

s=source(2*N);%2úéúD??′bitDòáD£????????aóé2bit113é£?1ê?t????DòáD3¤?è?a2*N

[nc,ns]=nr(sigma2(i),N);%nr(eb,snr_db,n)

[mc,ms]=psk(s);

rc=mc+nc;

rs=ms+ns;

r=ipsk(rc,rs);

[pb,pB]=pe(s,r);

px(i)=pb;

pq(i)=qfunct(sigma2(i),s);

end

subplot(2,1,1);plot(sigma2,px);hold on;

subplot(2,1,2);plot(sigma2,pq);hold on;

end

子程序

function [y]=Qfunct(sigma2,s)

e=0;

for i=1:length(s)

e=e+s(i)^2;

end

eb=e/length(s);

x=eb/sigma2;

y=(1/2)*erfc(x/sqrt(2));结果:

sigma2=0:均为0

sigma2=0.1:

sigma2=0.5:

sigma2=1:

(二)信道纠错编码(7,4)汉明码+4PSK 调制的通信系统

1.实验程序:

主程序(main)

clear;

N=100;

sigma2=1;

s=source(2*N);%产生信源bit序列subplot(2,2,1);stem(s,'.');axis([0,2*N,0,1.5]);

%(7,4)汉明码四个原始信息比特一组,若序列长度非4的整数倍,补齐

q=mod(N,4);

if q~=0

s(N+1:N+4-q)=zeros(1,N+4-q);

end

n=length(s);

%加入监督码sham(5:8)对应源信息序列的是s(1:4)和a3-a6,sham(5:8)对应a2-a0

%sham(0)插入一个0,使序列为2(8)的整数倍,以便于4psk调制

for i=(1:n/4)-1

sham(8*i+1)=0;

sham(8*i+5:8*i+8)=s(4*i+1:4*i+4);

[sham(8*i+2),sham(8*i+3),sham(8*i+4)]=watchout(sham(8*i+5),sham(8*i+6),sham(8*i+7), sham(8*i+8));

end

m=length(sham);

[nc,ns]=nr(sigma2,m/2);

[mc,ms]=psk(sham);

rc=mc+nc;

rs=ms+ns;

subplot(2,2,2);stem(rc,rs,'.');

rham=ipsk(rc,rs);

subplot(2,2,3);stem(rham,'.');

rham=checkerror(rham);

r=zeros(1,N*2);

for i=(1:n/4)-1

r(4*i+1:4*i+4)=rham(8*i+5:8*i+8);

end

subplot(2,2,4);stem(r,'.');

[pb,pB]=pe(s,r)

子程序:

(1)信源(source)

function s=source(N)

s=rand(1,N);%产生二进制序列

for i=1:N

if s(i)>=0.5

s(i)=1;

else

s(i)=0;

end

end

(2)噪声(nr)

function[nc,ns]=nr(sigma2,n)%噪声

sigma=sqrt(sigma2);

for i=1:n

u=rand;

z=sigma*sqrt(2*log10(1/(1-u)));

u=rand;

nc(i)=z*cos(2*pi*u);

ns(i)=z*sin(2*pi*u);

end

(3)调制(psk)

function [mc,ms]=psk(s)

%映射关系:由2bit二进制数转成四进制m=(0,1,2,3)带入映射公式

%mc=1,ms=0----00

%mc=0,ms=1----01

%mc=-1,ms=0----10

%mc=0,ms=-1----11

N=length(s);

for i=1:2:N-1

mc((i+1)/2)=cos(2*pi*(s(i)*2+s(i+1))/4);

ms((i+1)/2)=sin(2*pi*(s(i)*2+s(i+1))/4);

end

(4)最大投影法(ipsk)

function r=ipsk(rc,rs) %最大投影点准则判决

%判断依据:无噪声干扰时rc=mc,ms=rs

%mc=1,ms=0----00--靠近*c轴(abs(rc)>abs(rs))且在第一、四象限

%mc=0,ms=1----01--靠近*s轴(abs(rc)

%mc=-1,ms=0----10--靠近*c轴(abs(rc)>abs(rs))且在第二、三象限

%mc=0,ms=-1----11--靠近*c轴(abs(rc)

for i=1:length(rc)

if (abs(rc(i))>abs(rs(i)))

if (rc(i)>0)

r(j:j+1)=[0,0];

else

r(j:j+1)=[1,0];

end

else

if(rs(i)>0)

r(j:j+1)=[0,1];

else

r(j:j+1)=[1,1];

end

end

j=j+2;

end

(5)误比特率和误码率计算

function [b,B]=pe(s,r)

b=0%误bit率

B=0;%误码元率,每个码元由两个bit构成,>=1个bit错误均会引起1个码元错误

for i=1:length(s)

if(s(i)~=r(i))

b=b+1;

end

end

for i=1:2:length(s)-1

if (s(i)~=r(i))

B=B+1;

elseif((s(i+1)~=r(i+1)))

B=B+1;

end

end

b=b/length(s);

B=B*2/length(s);

(6)加监督码

function [a,b,c]=watchout(d,e,f,g)

std=[0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1, 0,1,0,1,0,0,1,1,1];

s=d+e*2+f*4+g*8;

a=std(3*s+1);

b=std(3*s+2);

c=std(3*s+3);

(7)纠错

function r=checkerror(rham)

r=rham;

std=[4,3,5,2,6,7,8,1];%001-a0-sham(4);010-a1-sham(3);011-a3-sham(5);

%100-a2-sham(2);101-a4-sham(6);110-a5-sham(7);

%111-a6-sham(8);000-sham(1)

%第一位为插入的无用的0,对最终结果没有影响

n=length(rham);

for i=(1:n/8)-1

s(1)=xor4(rham(i*8+8),rham(i*8+7),rham(i*8+6),rham(i*8+2));

s(2)=xor4(rham(i*8+8),rham(i*8+7),rham(i*8+5),rham(i*8+3));

s(3)=xor4(rham(i*8+8),rham(i*8+6),rham(i*8+5),rham(i*8+4));

s=s(3)+2*s(2)+4*s(1);

if s==0

s=s+8;%第一位为插入的无用的0,对最终结果没有影响

end

k=std(s);

r(i*8+k)=not(rham(i*8+k));%错码取反进行纠错end

(8)四输入异或

function s=xor4(a,b,c,d)%四输入异或

s=xor(a,b);

s=xor(s,c);

s=xor(s,d);

2.实验结果

误码率和误比特率:N=100

星座图:N=1000

噪声方差为0:

pb =

pB =

噪声方差为0.1:

pb =

pB =

噪声方差为0.5:

pb =

0.0250

pB =

0.0300

噪声方差为1.0:pb =

0.1250

pB =

0.2000

比较相同信道状态下的误码性能及星座图可发现:

编码信号的传输的可靠性明显高于无编码信号。这个结果可以看做是通过牺牲有效性来提高了可靠性。

实验四 汉明码系统

实验四汉明码系统 一、实验原理和电路说明 差错控制编码的基本作法是:在发送端被传输的信息序列上附加一些监督码元,这些多余的码元与信息之间以某种确定的规则建立校验关系。接收端按照既定的规则检验信息码元与监督码元之间的关系,一旦传输过程中发生差错,则信息码元与监督码元之间的校验关系将受到破坏,从而可以发现错误,乃至纠正错误。 通信原理综合实验系统中的纠错码系统采用汉明码(7,4)。所谓汉明码是能纠正单个错误的线性分组码。它有以下特点: 码长n=2m-1 最小码距d=3 信息码位k=2n-m-1 纠错能力t=1 监督码位r=n-k 这里m位≥2的正整数,给定m后,既可构造出具体的汉明码(n,k)。 汉明码的监督矩阵有n列m行,它的n列分别由除了全0之外的m位码组构成,每个码组只在某列中出现一次。系统中的监督矩阵如下图所示: 1110100 H=0111010 1101001 其相应的生成矩阵为: 1000101 0100111 G= 0010110 0001011 汉明译码的方法,可以采用计算校正子,然后确定错误图样并加以纠正的方法。 图2.4.1和图2.42给出汉明编码器和译码器电原理图。

a6 a5 a4 a3 a2 a1 a0 a a a a 图2.4.1汉明编码器电原理图 a a a a a a a3 图2.4.2汉明译码器电原理图 表2.4.1 (7,4)汉明编码输入数据与监督码元生成表 a6bit,其次是a5、a4……,最后输出a0位。 汉明编译码模块实验电路功能组成框图见图2.4.4和图2.3.5所示。 汉明编码模块实验电路工作原理描述如下: 1、输入数据:汉明编码输入数据可以来自ADPCM1模块的ADPCM码字,或来自同

汉明码编码实验报告

重庆工程学院 电子信息学院 实验报告 课程名称:_ 数据通信原理开课学期:__ 2015-2016/02_ 院(部): 电子信息学院开课实验室:实训楼512 学生姓名: 舒清清梁小凤专业班级: 1491003 学号: 149100308 149100305

重庆工程学院学生实验报告 课程名 称 数据通信原理实验项目名称汉明码编译实验 开课院系电子信息学院实验日期 2016年5月7 日 学生姓名舒清清 梁小凤 学号 149100308 149100305 专业班级网络工程三班 指导教 师 余方能实验成绩 教师评语: 教师签字:批改时间:

一、实验目的和要求 1、了解信道编码在通信系统中的重要性。 2、掌握汉明码编译码的原理。 3、掌握汉明码检错纠错原理。 4、理解编码码距的意义。 二、实验内容和原理 汉明码编码过程:数字终端的信号经过串并变换后,进行分组,分组后的数据再经过汉明码编码,数据由4bit变为7bit。 三、主要仪器设备 1、主控&信号源、6号、2号模块各一块 2、双踪示波器一台 3连接线若干

四、实验操作方法和步骤 1、关电,按表格所示进行连线 2、开电,设置主控菜单,选择【主菜单】→【通信原理】→【汉明码】。 (1)将2号模块的拨码开关S12#拨为10100000,拨码开关S22#、S32#、S42#均拨为00000000;(2)将6号模块的拨码开关S16#拨为0001,即编码方式为汉明码。开关S36#拨为0000,即无错模式。按下6号模块S2系统复位键。 3、此时系统初始状态为:2号模块提供32K编码输入数据,6号模块进行汉明编译码,无差错插入模式。 4、实验操作及波形观测。 (1)用示波器观测6号模块TH5处编码输出波形。 (2)设置2号模块拨码开关S1前四位,观测编码输出并填入下表中: 五、实验记录与处理(数据、图表、计算等) 校对输入0000,编码0000000 输入0001,编码0001011 输入0010,编码0010101 输入0011,编码0011110 输入0100,编码0100110 输入0101,编码0101101 输入0110,编码0110011输入0111,编码0111000

基于MATLAB的(7_4)汉明码编译码设计与仿真结果分析

通信原理课程设计报告书 课题名称 基于MATLAB 的(7,4)汉明码编 译码设计与仿真结果分析 姓 名 学 号 学 院 通信与电子工程学院 专 业 通信工程 指导教师 ※※※※※※※※※ ※ ※ ※※ ※ ※ 2009级通信工程专业 通信原理课程设计

2011年 12月 23日 一、设计任务及要求: 设计任务: 利用MATLAB编程,实现汉明码编译码设计。理解(7,4)汉明码的构造原理,掌握(7,4)汉明码的编码和译码的原理和设计步骤。并对其性能进行分析。要求: 通过MATLAB编程,设计出(7,4)汉明码的编码程序,编码后加入噪声,然后译码,画出信噪比与误比特数和信噪比与误比特率的仿真图,然后对其结果进行分析 指导教师签名: 2011年12月23日 二、指导教师评语: 指导教师签名: 年月日 三、成绩 验收盖章 年月日

基于MATLAB 的(7,4)汉明码编译码设计 与仿真结果分析 1 设计目的 (1)熟悉掌握汉明码的重要公式和基本概念。 (2)利用MATLAB 编程,实现汉明码编译码设计。 (3)理解(7,4)汉明码的构造原理,掌握(7,4)汉明码的编码和译码的原理和设计步骤。 (4)对其仿真结果进行分析。 2 设计要求 (1)通过MATLAB 编程,设计出(7,4)汉明码的编码程序。 (2)编码后加入噪声,然后译码,画出信噪比与误比特数和信噪比与误比特率的仿真图。 (3)然后对其结果进行分析。 3 设计步骤 3.1 线性分组码的一般原理 线性分组码的构造 3.1.1 H 矩阵 根据(7, 4)汉明码可知一般有 现在将上面它改写为 上式中已经将“⊕”简写成“+”。 上式可以表示成如下矩阵形式: ??? ??=⊕⊕⊕=⊕⊕⊕=⊕⊕⊕0 000346 13562456a a a a a a a a a a a a ?? ? ?? =?+?+?+?+?+?+?=?+?+?+?+?+?+?=?+?+?+?+?+?+?010011010010101100010111012345601234560123456a a a a a a a a a a a a a a a a a a a a a (1) (2)

汉明码原理和校验

汉明码编码原理和校验方法 当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误 校验码码集,由Bell实验室的R.W.Hamming发明,因此定名 为汉明码。用于数据传送,能检测所有一位和双位差错并纠正 所有一位差错的二进制代码。汉明码的编码原理是:在n位有 效信息位中增加k为检验码,形成一个n+k位的编码,然后把 编码中的每一位分配到k个奇偶校验组中。每一组只包含以为 校验码,组内按照奇偶校验码的规则求出该组的校验位。 在汉明校验码中,有效信息位的位数n与校验位数K满足下列关系: 2^K-1>=n+k. 1. 校验码的编码方法 (1)确定有效信息位与校验码在编码中的位置 设最终形成的n+k位汉明校验码为Hn+k….H2H1,各位的位号按照从右到左的顺序依次为1,2,…,n+k,则每一个检验码Pi所在的位号是2^(i-1),i=1,2,…,k。有效信息位按照原排列顺序依次安排在其他位置上。 假如有七位有效信息位X7X6X5X4X3X2X1=1001101,n=7,可以得出k=4,这样得到的汉明码就是11位,四个校验码P4P3P2P1对应的位号分别是8,4,2,1(即2^3,2^2,2^1,2^0). 11位汉明码的编码顺序为:

位号 11 10 9 8 7 6 5 4 3 2 1 编码 X7 X6 X5 P4 X4 X3 X2 P3 X1 P2 P1 (2)将n+k位汉明码中的每一位分到k个奇偶组中。 对于编码中的任何一位Hm依次从右向左的顺序查看其Mk-1…M1M0的 每一位Mj(j=0,1,…,k-1),如果该位为“1”,则将Hm分到第j组.(如:位号是11可表示成二进制1011,第零位一位三位都是1,所以此编码应排在第0组第1组第3组) 把11~1写成4位二进制的形式,分组结果如下: 位号 11 10 9 8 7 6 5 4 3 2 1 二进制1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 编码 X7 X6 X5 P4 X4 X3 X2 P3 X1 P2 P1 第0组X7 X5 X4 X2 X1 P1 第1组X7 X6 X4 X3 X1 P2 第2组 X4 X3 X2 P3 第3组X7 X6 X5 P4 (3)根据分组结果,每一组按照奇或偶校验求出校验位,形成汉明校验码。若采用奇数校验,则每一组中“1”的个数为奇数,反之为偶数。(X7X6X5X4X3X2X1=1001101) 若用奇校验,则 _________________ P1=X7⊕X5⊕X4⊕X2⊕X1=X7⊙X5⊙X4⊙X2⊙X1=0; 同理可得 P2=1 ; P3=1 ; P4=0 将这些校验码与有效信息位一起排列(分别插入到1,2,4,8位),可以

汉明码编译码实验

汉明码编译码实验 一、实验目的 1、掌握汉明码编译码原理 2、掌握汉明码纠错检错原理 二、实验内容 1、汉明码编码实验。 2、汉明码译码实验。 3、汉明码纠错检错能力验证实验。 三、实验器材 LTE-TX-02E通信原理综合实验系统----------------------------------------------模块8 四、实验原理 在随机信道中,错码的出现是随机的,且错码之间是统计独立的。例如,由高斯白噪声引起的错码就具有这种性质。因此,当信道中加性干扰主要是这种噪声时,就称这种信道为随机信道。由于信息码元序列是一种随机序列,接收端是无法预知的,也无法识别其中有无错码。为了解决这个问题,可以由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。在信息码元序列中加入监督码元就称为差错控制编码,有时也称为纠错编码。不同的编码方法有不同的检错或纠错能力。有的编码就只能检错不能纠错。 那么,为了纠正一位错码,在分组码中最少要加入多少监督位才行呢?编码效率能否提高呢?从这种思想出发进行研究,便导致汉明码的诞生。汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。下面我们介绍汉明码的构造原理。 一般说来,若码长为n,信息位数为k,则监督位数r=n?k。如果希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求 2r? 1 ≥n 或2r ≥k + r + 1 (14-1)下面我们通过一个例子来说明如何具体构造这些监督关系式。 设分组码(n,k)中k=4,为了纠正一位错码,由式(14-1)可知,要求监督位数r≥3。若取r=3,则n= k + r =7。我们用α6α5…α0表示这7个码元,用S1、S2、S3表示三个监督关系式中的校正子,则S1 S2 S3的值与错码位置的对应关系可以规定如表14-1所列。 表14-1

汉明码纠错

汉明码的编码检错原理 针对4位数据的汉明码编码示意图 汉明码是一个在原有数据中插入若干校验码来进行错误检查和纠正的编码技术。以典型的4位数据编码为例,汉明码将加入3个校验码,从而使实际传输的数据位达到7个(位),它们的位置如果把上图中的位置横过来就是: 数据位1234567 代码P1P2D8P3D4D2D1 说明第1个 汉明码 第2个 汉明码 第1个 数据码 第3个 汉明码 第2个 数据码 第3个 数据码 第4个 数据码 注:Dx中的x是2的整数幂(下面的幂都是指整数幂)结果,多少幂取决于码位,D1是0次幂,D8是3次幂,想想二进制编码就知道了 现以数据码1101为例讲讲汉明码的编码原理,此时D8=1、D4=1、D2=0、D1=1,在P1编码时,先将D8、D4、D1的二进制码相加,结果为奇数3,汉明码对奇数结果编码为1,偶数结果为0,因此P1值为1,D8+D2+D1=2,为偶数,那么P2值为0,D4+D2+D1=2,为偶数,P3值为0。这样,参照上文的位置表,汉明码处理的结果就是1010101。在这个4位数据码的例子中,我们可以发现每个汉明码都是以三个数据码为基准进行编码的。下面就是它们的对应表: 汉明码编码用的数据码 P1D8、D4、D1 P2D8、D2、D1 P3D4、D2、D1 从编码形式上,我们可以发现汉明码是一个校验很严谨的编码方式。在这个例子中,通过对4个数据位的3个位的3次组合检测来达到具体码位的校验与修正目的(不过只允许一个位出错,两个出错就无法检查出来了,这从下面的纠错例子中就能体现出来)。在校验时则把每个汉明码与各自对应的数据位值相加,如果结果为偶数(纠错代码为0)就是正确,如果为奇数(纠错代码为1)则说明当前汉明码所对应的三个数据位中有错误,此时再通过其他两个汉明码各自的运算来确定具体是哪个位出了问题。 还是刚才的1101的例子,正确的编码应该是1010101,如果第三个数据位在传输途中因干扰而变成了1,就成了1010111。检测时,P1+D8+D4+D1的结果是偶数4,第一位纠错代码为0,正确。P1+D8+D2+D1的结果是奇数3,第二位纠错代码为1,有错误。P3+D4+D2+D1的结果是奇数3,第三但纠错代码代码为1,有错误。那么具体是哪个位有错误呢?三个纠错代码从高到低排列为二进制编码110,换算成十进制就是6,也就是说第6位数据错了,而数据第三位在汉明码编码后的位置正好是第6位。 那么汉明码的数量与数据位的数量之间有何比例呢?上面的例子中数据位是4位,加上3位汉明码是7位,而2的3次幂是8。这其中就存在一个规律,即2P≥P+D+1,其中P代表汉明码的个数,D代表数据位的个数,比如4位数据,加上1就是5,而能大于5的2的幂数就是3(23=8,22=4)。这样,我们就能算出任何数据位时所需要的汉明码位数:7位数据时需要4位汉明码(24>4+7+1),64位数据时就需要7位汉明码(27>64+7+1),大家可以依此推算。此时,它们的编码规也与4位时不一样了。 另外,汉明码加插的位置也是有规律的。以四位数据为例,第一个是汉明码是第一位,第二个是第二位,第三个是第四位,1、2、4都是2的整数幂结果,而这个幂次数是从0开始的整数。这样我们可以推断出来,汉明码的插入位置为1(20)、2(21)、4(22)、8

汉明码计算及其纠错原理详解

汉明码计算及其纠错原理详解 当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误校验码码集,由Bell 实验室的R.W.Hamming 发明,因此定名为汉明码。 汉明码(Hamming Code),是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM )。其SECDED (single error correction,double error detection)版本另外加入一检测比特,可以侦测两个或以下同时发生的比特错误,并能够更正单一比特的错误。因此,当发送端与接收端的比特样式的汉明距离(Hamming distance)小于或等于1时(仅有1 bit发生错误),可实现可靠的通信。相对的,简单的奇偶检验码除了不能纠正错误之外,也只能侦测出奇数个的错误。 在数学方面,汉明码是一种二元线性码。对于每一个整数,存在一个编码,带有个奇偶校验位个数据位。该奇偶检验矩阵的汉明码是通过列出所有米栏的长度是两两独立。 汉明码的定义和汉明码不等式:设:m=数据位数,k=校验位数为,n=总编码位数=m+k,有Hamming不等式: a)总数据长度为N,如果每一位数据是否错误都要记录,就需要N位来存储。 b)每个校验位都可以表示:对或错;校验位共K位,共可表示2k种状态 c)总编码长度为N,所以包含某一位错和全对共N+1种状态。 d)所以2k≧N+1 e)数据表见下 无法实现2位或2位以上的纠错,Hamming码只能实现一位纠错。 以典型的4位数据编码为例,演示汉明码的工作 D8=1、D4=1、D2=0、D1=1, P1 =1,P2=0、P3=0。 汉明码处理的结果就是1010101 假设:D8出错,P3’P2’P1’=011=十进制的3,即表示编码后第三位出错,对照存储

通信原理设计报告(7_4)汉明码的编解码设计

目录 前言...............................................................1第1章设计要求.................................................3第2章 QuartusⅡ软件介绍.......................................4第3章汉明码的构造原理........................................6 3.1 (7,4)汉明码的构造原理........................................6 3.2 监督矩阵H与生成矩阵G.........................................7 3.3 校正子(伴随式S)..............................................8第4章(7,4)汉明码编码器的设计............................10 4.1 (7,4)汉明码的编码原理及方法.................................10 4.2 (7,4)汉明码编码程序的设计...................................10 4.3 (7,4)汉明码编码程序的编译及仿真.............................11第5章(7,4)汉明码译码器的设计...........................12 5.1 (7,4)汉明码的译码方法......................................12 5.2 (7,4)汉明码译码程序的设计..................................13 5.3 (7,4)汉明码译码程序的编译及仿真............................15第6章(7,4)汉明码编译码器的设计........................17 6.1 (7,4)汉明码编译码器的设计..................................17参考文献.........................................................18体会与建议.......................................................19附录..............................................................20

汉明码原理和校验

汉明码编码原理和校验方法 可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误 校验码码集,由Bell实验室的R.W.Hamming发明,因此定名 为汉明码。用于数据传送,能检测所有一位和双位差错并纠正 所有一位差错的二进制代码。汉明码的编码原理是:在n位有 效信息位中增加k为检验码,形成一个n+k位的编码,然后把 编码中的每一位分配到k个奇偶校验组中。每一组只包含以为 校验码,组内按照奇偶校验码的规则求出该组的校验位。 在汉明校验码中,有效信息位的位数n与校验位数K满足下列关系: 2^K-1>=n+k. 1. 校验码的编码方法 (1)确定有效信息位与校验码在编码中的位置 设最终形成的n+k位汉明校验码为Hn+k….H2H1,各位的位号按照从右到左的顺序依次为1,2,…,n+k,则每一个检验码Pi所在的位号是2^(i-1),i=1,2,…,k。有效信息位按照原排列顺序依次安排在其他位置上。 假如有七位有效信息位X7X6X5X4X3X2X1=1001101,n=7,可以得出k=4,这样得到的汉明码就是11位,四个校验码P4P3P2P1对应的位号分别是8,4,2,1(即2^3,2^2,2^1,2^0). 11位汉明码的编码顺序为:

位号 11 10 9 8 7 6 5 4 3 2 1 编码 X7 X6 X5 P4 X4 X3 X2 P3 X1 P2 P1 (2)将n+k位汉明码中的每一位分到k个奇偶组中。 对于编码中的任何一位Hm依次从右向左的顺序查看其Mk-1…M1M0的 每一位Mj(j=0,1,…,k-1),如果该位为“1”,则将Hm分到第j组.(如:位号是11可表示成二进制1011,第零位一位三位都是1,所以此编码应排在第0组第1组第3组) 把11~1写成4位二进制的形式,分组结果如下: 位号 11 10 9 8 7 6 5 4 3 2 1 二进制1011 1010 1001 1000 0111 0110 0101 0100 0011 0010 0001 编码 X7 X6 X5 P4 X4 X3 X2 P3 X1 P2 P1 第0组X7 X5 X4 X2 X1 P1 第1组X7 X6 X4 X3 X1 P2 第2组 X4 X3 X2 P3 第3组X7 X6 X5 P4 (3)根据分组结果,每一组按照奇或偶校验求出校验位,形成汉明校验码。若采用奇数校验,则每一组中“1”的个数为奇数,反之为偶数。(X7X6X5X4X3X2X1=1001101) 若用奇校验,则 _________________ P1=X7⊕X5⊕X4⊕X2⊕X1=X7⊙X5⊙X4⊙X2⊙X1=0; 同理可得 P2=1 ; P3=1 ; P4=0 将这些校验码与有效信息位一起排列(分别插入到1,2,4,8位),可以

74汉明码编码原理

74汉明码编码 1. 线性分组码是一类重要的纠错码,应用很广泛。在(n ,k )分组码中,若 冗余 位是按线性关系模2相加而得到的,则称其为线性分组码。 现在以(7,4)分组码为例来说明线性分组码的特点。 其主要参数如下: 码长:21m n =- 信息位:21m k m =-- 校验位:m n k =-,且3m ≥ 最小距离:min 03d d == 其生成矩阵G (前四位为信息位,后三位为冗余位)如下: 系统码可分为消息部分和冗余部分两部分,根据生成矩阵,输出码字可按下 式计 算: 所以有 信息位 冗余位 由以上关系可以得到(7,4)汉明码的全部码字如下所示。 表2 (7,4)汉明码的全部码字 序号 信息码元 冗余元 序号 信息码元 冗余元 0 0000 000 8 1000 111 1 0001 011 9 1001 100 2 0010 101 10 1010 010 3 0011 110 11 1011 001 4 0100 110 12 1100 001 5 0101 101 13 1101 010 6 0110 011 14 1110 100 7 0111 000 15 1111 111 1000110010001100101110001101G ? ? ?? ?? =?? ???? 3210321010001100100011(,,,)(,,,)00101110001101b a a a a G a a a a ?? ?? ??=?=??? ???? 635241 30 b a b a b a b a ====2310 1321 0210b a a a b a a a b a a a =⊕ ⊕=⊕⊕=⊕⊕

海明校验码的原理详解

海明校验码的原理详解 2006年12月27日星期三 10:57 海明码是一种多重(复式)奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。每一个这种奇偶位被编在传输码字的特定位置上。实现得合适时,这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能把它分离出来。 推导并使用长度为m位的码字的海明码,所需步骤如下: 1、确定最小的校验位数k,将它们记成D1、D 2、…、Dk,每个校验位符合不同的奇偶测试规定。 2、原有信息和k个校验位一起编成长为m+k位的新码字。选择k校验位(0或1)以满足必要的奇偶条件。 3、对所接收的信息作所需的k个奇偶检查。 4、如果所有的奇偶检查结果均为正确的,则认为信息无错误。 如果发现有一个或多个错了,则错误的位由这些检查的结果来唯一地确定。 校验位数的位数 推求海明码时的一项基本考虑是确定所需最少的校验位数k。考虑长度为m位的信息,若附加了k个校验位,则所发送的总长度为m+k。在接收器中要进行k个奇偶检查,每个检查结果或是真或是伪。这个奇偶检查的结果可以表示成一个k位的二进字,它可以确定最多2k种不同状态。这些状态中必有一个其所有奇偶测试试都是真的,它便是判定信息正确的条件。于是剩下的(2k-1)种状态,可以用来判定误码的位置。于是导出下一关系: 2k-1≥m+k 码字格式 从理论上讲,校验位可放在任何位置,但习惯上校验位被安排在1、2、4、8、…的位置上。 图5列出了m=4,k=3时,信息位和校验位的分布情况。 图5 海明码中校验位和信息位的定位 校验位的确定 下面为我增加,意在提出编码方法以助理解(但编码是否主要标准不可知) 每行的值等于数值为1的各位码相异或。 如m=4,k=3.数据位前三行,校验位为后三行。即 A=p1⊕D1⊕D3⊕D4=0 得P1=D1⊕D3⊕D4 B=P2⊕D2⊕D3⊕D4=0 得P2=D2⊕D3⊕D4

汉明码的数学原理

刚刚上计算机组成原理课的时候,或许会觉得汉明码的横空出世太神奇了,它是怎么知道二进制信息在传输过程中哪一位传错的呢?开始只是死记,后来发现太难记住了,于是想一探究竟,究竟是什么支配着这种编码纠错的可靠性。 首先我们要知道的是,汉明码是只具有一位纠错能力的编码,那么二进制信息的传输校验可以在最多只有一位发生误传这个假设下讨论。 这个问题的一个数学模型是:发送方将一串任意长度的01代码通过一定的处理,使得代码的在只有一位发生传送错误(不包括一位代码的增加或者缺失)或者完全正确的传输送达接收方的前提下,接收方能还原发送方发送的代码。 汉明码给出了一个完美的解答。它的解决方案如下:设欲检测的二进制代码有n 位,为使其具有纠错能力,需要增加k 位检测为。为了能准确对错误定位以及指出代码没错,新增添的检测位数k 应满足 1 2++≥k n k k 的位数确定以后,便可由它们所承担的检测任务设定设定它们在被检测代码中的位置以及它们的取值。 设k n +位代码自左向右依次编为第1,2,3,4,....,k n +位,而将k 为检测为记作...)8,4,2,1(=i C i (这里的C 应该是check 的首字母把。 。。),重点来了: 1C 检测的1g 小组包含1,3,5,7,9,11............位。 2C 检测的2g 小组包含2,3,6,7,10,11,14,15......位 4C 检测的3g 小组包含4,5,6,7,12,13,14,15,......位 8C 检测的8g 小组包含8,9,10,11,12,13,14,15,24,......位 . .. 为什么要这样分呢? 不难发现1g 小组都是奇数的,我们可以这样给他划分: },... 15{},13{},11{},9{},7{},5{},3{},1{ 再来看2g 小组,可以这样划分: },... 15,14{},11,10{},7,6{},3,2{ 3g 小组,可以这样划分: },... 15,14,13,12{},7,6,5,4{ 4g 小组,可以这样划分:

实验四汉明码系统

实验四汉明码系统 实验原理和电路说明 差错控制编码的基本作法是: 在发送端被传输的信息序列上附加一些监督码元, 这些多 码组只在某列中出现一次。系统中的监督矩阵如下图所示: 1110 10 0 0 1110 10 J 1 0 1 0 0 1_ 其相应的生成矩阵为: 「0 0 0 1 0 厂 0 10 0 111 0 0 10 110 7 0 0 1 0 1 — 汉明译码的方法,可以采用计算 校正子,然后确定错误图样并加以纠正的方法。 图241和图 2.42给出汉明编码器和译码器电 原理图。 与监督码兀之间的关系, 一旦传输过程中发生差错, 则信息码兀与监督码兀之间的校验关系 将受到破坏,从而可以发现错误, 乃至纠正错误。 通信原理综合实验系统中的纠错码系统采用汉明码 ( 7, 4)。 ,所谓汉明码是能纠正单个 错误的线性分组码。它有以下特点: 码长 n=2m -1 最小码距 d =3 信息码位 k=2n - m-1 纠错能力 t =1 监督码位 r=n- k 这里m 位》2的正整数,给定 m 后,既可构造出具体的汉明码( n , k )o 余的码元与信息之间以某种确定的规则建立校验关系。 接收端按照既定的规则检验信息码元 汉明码的监督矩阵有 n 列m 行,它的n 列分别由除了全 0之外的m 位码组构成,每个 H= G=

表 2.4.1 4位信息位 a 6, a s , a 4, a 3 3位监督码元 a 2, a 1, a 0 4位信息位 a 6, a s , a 4, a 3 3位监督码元 a 2, a 1, a 0 0000 000 1000 101 0001 011 1001 110 0010 110 1010 011 0011 101 1011 000 0100 111 1100 010 0101 100 1101 001 0110 001 1110 100 0111 010 1111 111 表2.4.1为(汉明编码输入数据与监督码元生成表。 编码输出数据最先输出是 a 6bit , 其次是a s 、a 4 ,最后输出 a o 位。 汉明编译码模块实验电路功能组成框图见图 2.4.4和图2.3.5所示。 汉明编码模块实验电路工作原理描述如下: 1、输入数据:汉明编码输入数据可以来自 ADPCM1模块的ADPCM 码字,或来自同 a 6 a 5 a 4 a 3 a 2 a i a o 图2.4.1汉明编码器电原理图 a 6 a s a 4 a 3 a 3 a 3 a 3 图2.4.2汉明译码器电原理图

汉明码

科信学院 通信系统仿真二级项目设计说明书 (2013/2014学年第二学期) 课程名称:通信系统仿真二级项目 题目:基于M语言的数字通信仿真— 采用Hamming码技术 专业班级:通信工程12-02班 学生姓名: 学号: 指导教师: 设计周数:1周 设计成绩: 2014年6月25日

目录 1、设计目的和意义 (2) 2、设计原理 (3) 2.1 汉明编码 ................................................. 错误!未定义书签。 2.1.1汉明码编码.................................................................................... 错误!未定义书签。 2.1.2 汉明码的定义: (3) 2.1.3 汉明码的构造特点: (3) 2.1.4 汉明码编码的主要算法 (3) 2.1.5 汉明码的编码原理 (4) 2.1.6 汉明码的纠错原理 (6) 2.2高斯噪声原理................................................ 错误!未定义书签。 3、Matlab仿真实现 (12) 3.1 仿真思路 (12) 3.2仿真详细过程及图形分析 ........................ 错误!未定义书签。 3.3 仿真结果分析 ........................................... 错误!未定义书签。 4、设计心得体会 (21) 5、参考文献 (21) 1、设计目的和意义 技术要求及原始数据: 1)对数字通信系统主要原理和技术进行研究,包括Hamming编码技术和高斯噪声信道原理等。 2)建立完整的基于Hamming码技术的通信系统仿真模型。 3)对系统进行仿真、分析。 主要任务: 1)建立数字通信系统模型。 2)利用Matlab的m语言建立数字通信系统仿真模型。

汉明码编码原理介绍

汉明码编码原理介绍 汉明码是在电信领域的一种线性调试码,以发明者理查德·卫斯里·汉明的名字命名。汉明码在传输的消息流中插入验证码,以侦测并更正单一比特错误。由于汉明编码简单,它们被广泛应用于内存(RAM)。其SECDED版本另外加入一检测比特,可以侦测两个或以下同时发生的比特错误,并能够更正单一比特的错误。 1940年,汉明于贝尔实验室工作,运用贝尔模型电脑,输入端依靠打孔卡,这不免有些读取错误。在平日,特殊代码将发现错误并闪灯,使得操作者能够纠正这个错误。在周末和下班期间,在没有操作者的情况下,机器只会简单地转移到下一个工作,汉明在周末工作,他对于不可靠的读卡机发生错误后,总是必须重新开始方案变得愈来愈沮丧。在接下来的几年中,他为了解决调试的问题,开发了功能日益强大的调试算法。在1950年,他发表了今日所称的汉明码。现在汉明码有着广泛的应用。 人们在汉明码出现之前使用过多种检查错误的编码方式,但是没有一个可以在和汉明码在相同空间消耗的情况下,得到相等的效果。 汉明码原理介绍: 奇偶校验是一种添加一个奇偶位用来指示之前的数据中包含有奇数还是偶数个1的检验方式。如果在传输的过程中,有奇数个位发生了改变,那么这个错误将被检测出来(注意奇偶位本身也可能改变)。一般来说,如果数据中包含有奇数个1的话,则将奇偶位设定为1;反之,如果数据中有偶数个1的话,则将奇偶位设定为0。换句话说,原始数据和奇偶位组成的新数据中,将总共包含偶数个1. 奇偶校验并不总是有效,如果数据中有偶数个位发生变化,则奇偶位仍将是正确的,因此不能检测出错误。而且,即使奇偶校验检测出了错误,它也不能指出哪一位出现了错误,从而难以进行更正。数据必须整体丢弃并且重新传输。在一个噪音较大的媒介中,成功传输数据可能需要很长时间甚至不可能完成。虽然奇偶校验的效果不佳,但是由于他只需要一位额外的空间开销,因此这是开销最小的检测方式。并且,如果知道了发生错误的位,奇偶校验还可以恢复数据。 如果一条信息中包含更多用于纠错的位,且通过妥善安排这些纠错位使得不同的出错位产生不同的错误结果,那么我们就可以找出出错位了。在一个7位的信息中,单个数据位出错有7种可能,因此3个错误控制位就足以确定是否出错及哪一位出错了。 汉明编码方案通用算法 下列通用算法可以为任意位数字产生一个可以纠错一位的汉明码。 一、1开始给数字的数据位(从左向右)标上序号, 1,2,3,4,5... 二、将这些数据位的位置序号转换为二进制,1, 10, 11, 100, 101,等。 三、数据位的位置序号中所有为二的幂次方的位(编号1,2,4,8,等,即数据位位置序号的二进制表示中只有一个1)是校验位 四、有其它位置的数据位(数据位位置序号的二进制表示中至少2个是1)是数据位 五、每一位的数据包含在特定的两个或两个以上的校验位中,这些校验位取决于这些数据位的

基于VHDL的(7,4)汉明码编解码器的设计

(7,4)汉明码编解码器的设计 序言 VHDL语言具有功能强大的语言结构,可用明确的代码描述复杂的控制逻辑设计,并且具有多层次的设计描述功能,支持设计库和可重复使用的元件的生成。近几十年来,EDA技术获得了飞速发展。它以计算机为平台,根据硬件描述语言VHDL,自动地完成逻辑编译、化简分割、综合及优化,布局布线,仿真直至对特定目标芯片的适配编译,逻辑映射和编程下载等工作。以自顶向下的设计方法,使硬件设计软件化,摆脱了传统手工设计的众多缺点。随着EDA技术的深入发展基于硬件描述语言的方法将有取代传统手工设计方法的趋势。 EDA ( Elect ronics Design Automation) 技术是随着集成电路和计算机技术飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。目前,VHDL语言已经成为EDA的关键技术之一,VHDL 是一种全方位的硬件描述语言,具有极强的描述能力,能支持系统行为级、寄存器传输级和逻辑门级三个不同层次的设计,支持结构、数据流、行为三种描述形式的混合描述,覆盖面广,抽象能力强,因此在实际应用中越来越广泛。 汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。它属于线性分组码,由于汉明码的抗干扰能力较强,至今仍是应用比较广泛的一类码。 本文用VHDL语言实现了(7,4)汉明码的编码和译码,并通过实例来说明利用VHDL语言实现数字系统的过程。在介绍(7,4)汉明码编码和译码原理的基础上,设计出了(7,4)汉明码的编码器和译码器,写出了基于VHDL实现的源程序,并通过QUARTUSⅡ软件进行仿真验证。 第1章QuartusⅡ与VHDL简介 1.1 QuartusⅡ软件简介 QuartusⅡ是Altera公司推出的CPLD/FPGA的开发工具,QuartusⅡ提供了完全集成且与电路结构无关的开发环境,具有数字逻辑设计的全部特性。 ?/P> Quartus Ⅱ设计软件提供完整的多平台设计环境,可以很轻松地满足特定设计的需要。

海明码的基本原理(精)

一、海明码的概念 海明码是一种可以纠正一位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满 足以下关系式: 2^r>=n+1 或 2^r>=k+r+1 海明码的编码效率为: R=k/(k+r 式中 k为信息位位数 r为增加冗余位位数 二、海明码的原理 海明码是一种多重奇偶检错系统。它将信息用逻辑形式编码,以便能够检错和纠错。用在海明码中的全部传输码字是由原来的信息和附加的奇偶校验位组成的。每一个这种奇偶位被编在传输码字的特定位置上。这个系统对于错误的数位无论是原有信息位中的,还是附加校验位中的都能指示出来 在数据中间加入几个校验码,将玛距均匀拉大,将数据的每个二进制位分配在几个奇偶校验组里,当某一位出 错,会引起几个校验位的值发生变化。 海明不等式: 校验码个数为K,2的K次幂个信息,1个信息用来指出“没有错误”,其余2K-1个指出错误发生在那一位,但也可能是校验位错误,故有N<=2的K次-1-K能被校验。 海明码的编码规则: 1.每个校验位Ri被分配在海明码的第2的i次的位置上, 2.海明玛的每一位(Hi是由多个/1个校验值进行校验的,被校验玛的 位置玛是所有校验这位的校验位位置玛之和。 一个例题: 4个数据位d0,d1,d2,d3, 3个校验位r0,r1,r2,对应的位置为: d3 d2 d1 r2 d0 r1 r0 ======b7 b6 b5 b4 b3 b2 b1 校验位的取值,就是他所能校验的数据位的异或 b1为b3,b5,b7的异或,b2为b3,b6,b7 b4为b5,b6,b7 海明玛传送到接受方后,将上三式的右边(b1,b2,b4的逻辑表达式分别 异或上左边的值就得到了校验方程,如果上题采用偶校验 G1=b1 b3 b5 b7的异或 G2=b2 b3 b6 b7的异或 G3=b4 b5 b6 b7的异或 若G1G2G3为001是第四位错 若为011是第六位错

汉明码编码实验报告详细解释

汉明码的实现详细实验报告 一、实验目的 1、掌握线性分组码的编码原理 2、掌握汉明码编码方法 3、了解编码对误码性能的改善 二、实验内容 1、自行设置汉明码的参数,生成矩阵,计算所设计出的汉明码; 写出产生(3,1)汉明码的生成矩阵,给出生成码的源程序,并给出运行结果。 2、利用encode库函数实现汉明编码; 3、搭建一个通信仿真模块,并给出运行结果,分析汉明码对通 信性能的影响; 4、整理好所有的程序清单或设计模块,并作注释。 三、实验原理 (一)、汉明码的介绍 汉明码是1951年由汉明(R.W.Hamming)提出的能纠正单个错误的线性分组码。它性能良好,既具有较高的可靠性,又具有较高的传输效率,而且编译码电路较为简单,易于工程实现,因此汉明码在发现后不久,就得到了广泛的应用。 我们的目的是要寻找一个能纠正单个错误,且信息传输率(即码率r=k/n)最大的线性分组码。我们已经知道,具有纠正单个错误能

力的线性分组码的最小距离应为3,即要求其H 矩阵中至少任意两列线性无关。要做到这一点,只要H 矩阵满足“两无”——无相同的列,无全零列就可以了。 (n ,k )线性分组码的H 矩阵是一个n r n k n ?=?-)(阶矩阵,这里 k n r -=是校验元的数目。显然, r 个校验元能组成r 2列互不相同的r 重矢量,其中非全零矢量有12-r 个。如果用这12-r 个非全零矢量作为H 矩阵的全部列,即令H 矩阵的列数12-=r n ,则此H 矩阵的各列均不 相同,且无全零列,由此可构造一个纠正单个错误的(n ,k )线性分组码。 同时,12-r 是n 所能取的最大值,因为如果12->r n ,那么H 矩 阵的n 列中必会出现相同的两列,这样就不能满足对H 矩阵的要求。 而由于12-=r n 是n 所能取的最大值,也就意味着码率R 取得了最大 值,即 ) 183(1 211---=-=-== r r n r n r n n k R 这样设计出来的码是符合我们的要求的,这样的码就是汉明码。 定义 若H 矩阵的列是由非全零且互不相同的所有二进制r 重矢量组 成,则由此得到的线性分组码,称为GF(2)上的(12-r ,r r --12)汉 明码。 (二)、产生(3,1)汉明码的原理及程序代码 本实验要求写出产生(3,1)汉明码的生成矩阵,由上述可知,我们 的n=12-r =3,而k=r r --12=1,由此可得出r=2. 当r=2时,有3个非全零的二重矢量:

汉明码校验子matlab

%(7,4)分组码 clear all; close all; H = [1 1 1 0 1 0 0;... 0 1 1 1 0 1 0;... 1 1 0 1 0 0 1]; G = gen2par(H); %调用Matlab函数求与H对应的生成矩阵G Msg = [0 0 0 0;0 0 0 1;0 0 1 0;0 0 1 1;0 1 0 0;0 1 0 1;0 1 1 0;0 1 1 1;... 1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1]; C = rem(Msg*G,2); E = dec2bin([0:2^7-1],7)-48; %调用Matlab函数将整数转换成比特表示 S = rem(H*E',2); %不同的E对应的校验子S %对校验子归类,每个S对应不同的16个E s = S(1,:)*4+S(2,:)*2+S(3,:); for k=1:8 e(k,:)=find(s==k-1); end e0 = dec2bin( e(1,:)-1,7 )-48; %对应S=000的E,编码码字 e1 = dec2bin( e(2,:)-1,7 )-48; %对应S=001的E e2 = dec2bin( e(3,:)-1,7 )-48; %对应S=010的E e3 = dec2bin( e(4,:)-1,7 )-48; %对应S=011的E e4 = dec2bin( e(5,:)-1,7 )-48; %对应S=100的E e5 = dec2bin( e(6,:)-1,7 )-48; %对应S=101的E e6 = dec2bin( e(7,:)-1,7 )-48; %对应S=110的E e7 = dec2bin( e(8,:)-1,7 )-48; %对应S=111的E

相关文档
最新文档