基于MATLAB的(15,7)循环码的编译仿真

更新时间:2023-11-14 01:50:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《纠错码与差错控制》

课程设计

题目:基于MATLAB的(15,7)循环码的编译仿真

院(系) 信息科学与工程学院 专 业 通信工程专业 届 别 2011级 班 级 11通信B 学 号 1115106029 姓 名 刘珩 指导老师 周林

摘要

随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。在计算机通信信息码中循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码。它有许多特殊的代数性质,它使计算机通信以一种以数据通信形式出现,实现了在计算机与计算机之间或计算机与终端设备之间进行有效的与正确地信息传递。它是现代计算机技术与通信技术飞速发展的产物,在日常生活通信领域被广泛应用。

纠错码(error correcting code),在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别 ,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。关系的建立称为编码。码字到达收端后,可以根据编码规则是否满足以判定有无错误。当不能满足时,按一定规则确定错误所在位置并予以纠正。纠错并恢复原码字的过程称为译码。检错码与其他手段结合使用,可以纠错。

纠错编码又称信道编码,它与信源编码是信息传输的两个方面。它们之间存在对偶的关系。应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。 准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。关系的建立称为编码。码字到达收端后,用编码时所用的规则去检验。如果没有错误,则原规则一定满足,否则就不满足。由此可以根据编码规则是否满足以判定有无错误。当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。纠错并恢复原码字的过程称为译码;码元间的关系为线性时,称为线性码;否则称为非线性码。检错码与其他手段结合使用,可以纠错。检错反馈重发系统(ARQ系统)就是一例。

所谓循环码是指:线性码中任一许用码组经过循环移位后得到的码组仍为一许用码组。循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误,还可以检错突发的错误。?包括首尾相接突发错误。

n,k?循环码可以检测长为n?k或更短的任何突发错误,

一、 基本原理

2.1 线性分组码的编码原理

2.1.1 生成矩阵

线性分组码(n,k)中许用码字(组)为2k个。定义线性分组码的加法为模二加,乘法为二进制乘法。且码字与码字的运算在各个相应比特位上符合上述二进制加法运算规则。 线性分组码具有如下性质(n,k)的性质: (1).封闭性,任意两个码组的和还是许用的码组; (2).码的最小距离等于非零码的最小码重;

对于码组长度为n、信息码元为k位、监督码元为r=n-k位的分组码,常记作(n,k)码,如果满足2r-1≥n,则有可能构造出纠正一位或一位以上错误的线性码。 (15,7)线性分组码有215-7个许用码字或合法码字。发送方发送的是许用码字,若接

收方收到的是禁用码字,则说明传输中发生了错误。

一个系统码的生成矩阵G,其左边k行k列应是一个k阶单位方阵Ik,因此生成矩阵G表示为

G??IKP? (2-1) 式中,P是一个k×(n-k)阶矩阵。

2.1.2 校验矩阵

生成矩阵:具有?IKQ?形式的生成矩阵称为典型生成矩阵。

?1110?100?监督矩阵: (2-2) ???PI?H??1101?010r?? ??1011?001??监督矩阵可用来校验和纠错。

由H矩阵得到(n,k)线性分组码的每一码字ci,(i=1,2,…,2k),都必须满足由H矩阵各行所确定的线性方程组,即 ci·HT=0.(7,3)码的生成矩阵G中每一行及其线性组合都是(n,k)码的码字,所以有G·HT =0。

2.2 线性分组码的译码原理

码的距离及纠检错能力 1.码的距离

两个码字之间,对应位取之不同的个数,称为汉明距离,用d表示。一个码的最小距离dmin定义为两个码字之间的距离

dmin?min?d(ci,cj),i?j,ci,cj?(n,k)?。表示它们之间差别的

大小。距离越大,两个码字的差别越大,则传送时从一个码字错成另一码字的可能性越小。

码的最小距离愈大,其抗干扰能力愈强。

1

2. 线性码的纠检错能力

(n,k)对于任一个线性分组码,若要在码字内检测出e个错误,则要求码的最小距离d?e?1;

(2)纠正t个错误,则要求码的最小距离d?2t?1;

(3)纠正t个错误同时检测e(≥t)个错误,则要求d?t?e?1;

2.3 循环码的编译码原理

2.3.1 编码原理

根据给定的(n,k )值,再根据循环码生成定理对所给定信息位k,选定生成多项式g(x),

所有码多项式c(x)都能被g(x)整除,且次数小于n- k。 若已知

g?x??gn?kxn?k?gn?k?1xn?k?1???g1x?g0 (2-4)

并设信息元多项式

m(x)?mk?1xk?1?mk?2xk?2???m1x?m0 (2-5)

要编码成系统循环码形式,即码字的最左边k位是信息元,其余n- k位是校验元,则要用x乘以m(x),再加上校验元多项式r(x),这样得到的码字多项式

n?kc(x)?xn?km(x)?r(x)?mk?1xn?1?mk?2xn?2???m0xn?k?rn?k?1xn?k?1???r1x?r0 (2-6)

n?k?1r(x)?rx???r1x?r0。 n?k?1式(2-6)中

c(x)一定是g(x)的倍数,即有多项式

c(x)?xn?km(x)?r(x)?q(x)g(x) (2-7)

c(x)?xn?km(x)?r(x)?0?modg(x) (2-8)

注意到g(x)为n?k次多项式,而r(x)最多为n- k-1次多项式

r(x)?xn?km(x)?modg(x) (2-9)

n?kr(x)xm(x)除以g(x)的余式。 即必是

上述过程指出了系统循环码的编码方法:

n?kn?km(x)xm(x),乘以xn?k的目的是将m(x)提高n?k次。 x(1).将信息组乘以变成

2

n?kxm(x)除以g(x),得到商q(x)和余式r(x)g(x),可知该余式 (2).然后将得到的

分子r(x),即为校验多项式,从而得到码字多项式

c(x)?xn?km(x)?r(x) (2-10) 2.3.2译码原理

设发送的码字为C(x),接收到的码字为R(x),如果C(x)= R(x),则说明收到的码字正确;如果

C(x)≠R(x),则说明收到的码字出现错误,则有:

R(x)?C(x)?E(x) (2-11) 公式(2-11)中的E(x)称为错误图样。当E(x)=0时说明没有错误,用g(x)去除R(x),

R(x)C(x)?E(x)C(x)E(x)?g(x)g(x)g(x) (2-12) g(x) ==

因为C(x)是由g(x)生成的,故C(x)必能为g(x)除尽,显然R(x)与E(x)同余式

R(x)?E(x)modg(x),以g(x)除E(x)所得余式称为伴随式S(x)。

由式(2-12)可知,

TR(x)H?(C(x)?E(x))H(x)?E(x)H(x) (2-13)

?0则E(x)H(x)?0;若E(x)?0,则E(x)H(x)?0。这说明,R(x)H仅与错若E(x)误图样有关,而与发送的码字无关。

由于g(x)的次数为n?k次,g(x)除E(x)后得到余式(即伴随式S(x))的次数为

Tn-k?1次,故S(x)共有2n?k个表达式,每个可能的表达式对应一个错误格式,可以知道

(15,7)循环码的S(x)共有2位错误。

系统循环码的译码方法:将收到的码字R(x)用g(x)去除,如果除尽则无错;否则有错。如果有错可由余式S(x)一一找出对应图样,然后将错误图样E(x)与R(x)模2相加,即为所求码字C(x),从而实现纠错目的。

在本课程设计中要求完成任意(15,7)循环码的编码和译码,其中给出的生成多项式为:

15?7个表达式,可以根据错误图样表来纠正(15,7)循环码的一

g(x)?x8?x7?x6?x4?1

则生成矩阵G为g(x)升幂排列时的G为

3

?111010001000000?

? ?011101000100000? ??0 ?G??0 ?0??0? 0?01110100010000??00111010001000?00011101000100??00001110100010?00000111010001??(2-13)

若信息码元与式(1.1.13)相乘,得到的就是系统循环码。在本课程设计中,由于生成

多项式为:g(x)=x8+x7+x6+x4+1,校验多项式为 h(x)= xn +1/g(x),因此可由长除法求得校验多项式为h(x)=x7+x6+x4+1,所以校验矩阵H为

?110100010000000?? ?011010001000000??? 001101000100000???000110100010000?H?? ?000011010001000???000001101000100? ??000000110100010???(2-14) ?000000011010001??? 本课程设计中采用(15,7)循环码由生成矩阵可得其最小码距dmin为5由最小码距可得其纠检错能力可知其最多可检4位错,可纠2位错。 上式指出了系统循环码的译码方法:将收到的码字R(x) 用g(x) 去除,如果除尽则无错;否则有错。如果有错,可由余式S(x) 一一找出对应图样,然后将错误图样E(x) 与R(x) 模2 和,即为所求码字C(x) ,从而实现纠错目的。

二、 系统分析

本次课程设计主要是完成(15,7)循环码的编译码,求出该码的最小码距以及其纠错能力,

并分析该码在高斯信道下的误码性能。 循环码的编译码过程如下:

(1)编码过程:第一步:将信息码字表示为m(x),其最高次幂为k?1;

n?kxm(x)与g(x)求模得出相应的余式r(x); 第二步:将

第三步:编码结果为c(x)?x

4

n?km(x)?r(x)。

(2)译码过程:第一步:由接收码字R(x)与监督矩阵相乘得出错误图样S;

第二步:判断S是否为零。若不为零,则出错。在假定至多只有一位错的情况下,可以有效地译了相应的信息码字;

第三步:在出错的情况下,将S与标准监督矩阵对比,得出错误的比特位并进行更正得出前四位为信息码字。

三、 仿真过程

如果不考虑具体的编码和译码过程,采用系统的默认生成矩阵,则仿真方法如下:

%(15,7)循环编码性能(纠错后还原为信息序列,与原信息序列进行比较) bits=70000;

msg=randint(bits,1,2);

SNR=0:1:12; %信噪比 L=length(SNR); BER1=zeros(1,L); BER2=zeros(1,L);

modbit1=pskmod(msg,2); %调制 for k=1:L %未编码的序列,调制后经过高斯白噪声信道,再解调制,求误码 y1=awgn(modbit1,SNR(k),'measured'); %在传输序列中加入AWGN噪声 demmsg1=pskdemod(y1,2); recode=reshape(demmsg1',1,[]); error1=(recode~=msg'); errorbits=sum(error1); BER1(k)=errorbits/length(msg); end

code=encode(msg,15,7,'syclic',[1 0 0 0 1 0 1 1 1]); %(15,7)循环编码 modbit2=pskmod(code,2); %调制 for k=1:L %编码的序列,调制后经过高斯白噪声信道,再解调制,再纠错后求误码 y2=awgn(modbit2,SNR(k),'measured'); demmsg2=pskdemod(y2,2); recode=reshape(demmsg2',1,[]); decodebit=decode(recode,15,7,'cyclic',[1 0 0 0 1 0 1 1 1]); error2=(decodedbit~=msg'); errorbits=sum(error2); BER2(k)=errorbits/length(msg); end

semilogy(SNR,(BER1),'b-*') %画图 hold on

semilogy(SNR,(BER2),'r-o') grid on

5

legend('未编码','(15,7)循环编码'); xlabel('SNR/dB'); ylabel('BER');

title('(15,7)循环编码性能') 运行结果如图所示。

由图可见,系统采用循环码编码后性能较好,与未编码的系统相比误码率大大降低。

四、 总结

本次课程设计题目是(15,7)循环码的编译码方法,首先介绍了线性分组码的编译码原理,循环码的编译码方法、步骤、流程。其次在仿真部分利用MATLAB软件完成(15,7)循环码的编码和译码的实现。

五、 参考文献

[1] 曾凡鑫. 现代编码技术. 西安:西安电子科技大学出版社,2007

[2] 刘爱莲.纠错码原理及MATLAB实现。北京:清华大学出版社,2013.10 [3] 樊昌信、曹丽娜.《通信原理》(第6版).北京:国防工业出版社,2011.1

6

本文来源:https://www.bwwdw.com/article/h54v.html

Top