资源描述
信息工程学院 通信工程系
设计题目:基于MATLAB线性分组码 编译码仿真设计
班 级: 10通信 班
学 号:
姓 名:
指导老师:
年 11 月 15 日
成绩:
摘 要
该系统是(6,3)线性分组码编码和译码实现,它能够对输入三位信息码进行线性分组码编码,对于接收到六位码字能够进行译码,从而译出三位信息码。
当接收到六位码字中有一位发生错误时,能够纠正这一位错码;当接收到码字有两位发生错误时,只能纠正一位错误,但同时能检测出另一位错误不能纠正。只有特定位有两位错误时,才能纠正两位错误。这么就译出正确信息码组,整个过程是用MATLAB语言实现。
关键词:编码; 译码; 纠错
目 录
序言 2
第1章 设计目标 2
第2章 MATLAB介绍 3
第3章 基础原理 3
3.1 线性分组码编码 3
3.1.1 生成矩阵 3
3.1.2 校验矩阵 5
3.2 伴随式和译码 6
3.2.1 码距离及纠检错能力 6
3.2.2 伴随式和译码 6
第4章 推导过程 7
4.1 编码过程 7
4.2 译码过程 9
第5章 仿真程序及结果分析 11
5.1 仿真程序 11
5.2 仿真结果图 13
5.3 结果分析 15
参考文件 16
总结 17
序言
多年来,伴随计算机、卫星通信及高速数据网飞速发展,数据交换、处理和存放技术得到了广泛应用,大家对数据传输和存放系统可靠性提出了越来越高要求。所以,怎样控制差错、提升数据传输和存放可靠性,成为现代数字通信系统设计关键课题。
现在,绝大多数数字计算机和数字通信系统中广泛采取二进制形式码。而线性分组码含有编译码简单,封闭性好等特点,采取差错控制编码技术是提升数字通信可靠性有效方法,是现在较为流行差错控制编码技术。
对线性分组码讨论全部在有限域GF(2)上进行,域中元素为{0,1},域中元素计算为模二加法和模二乘法。分组码是一组固定长度码组,可表示为(n , k),通常它用于前向纠错。在分组码中,监督位被加到信息位以后,形成新码。在编码时,k个信息位被编为n位码组长度,而n-k个监督位作用就是实现检错和纠错。
对于长度为n二进制线性分组码,它有种2n可能码组,从2n种码组中,能够选择M=2k个码组(k<n)组成一个码。这么,一个k比特信息线性分组码能够映射到一个长度为n码组上,该码组是从M=2k个码组组成码集中选出来,这么剩下码组就能够对这个分组码进行检错或纠错。
第1章 设计目标
要设计一个(6,3)线性分组码编译码程序,最基础是要含有对输入信息码进行编码,让它含有抗干扰能力。同时,还要让它含有对接收到整个码组中提取信息码组功效。不过,在实际通信系统中,因为信道传输特征不理想和加性噪声影响,接收到信息中不可避免地会发生错误,影响通信系统传输可靠性,所以,本设计还要让该程序含有纠正错误能力,当接收到码组中有一位码,发生错误时能够检测到这一位错码,而且能够纠正这一位错码,而且让系统从纠正后码组中提取正确信息码组。
针对给定矩阵
0 1 1
1 0 1
1 1 0
Q=
完成以下工作:
1 完成对任意信息序列编码
2 依据生成矩阵,形成监督矩阵;
3 依据得到监督矩阵,得到伴随式,并依据它进行译码;
4 验证工作正确性。
第2章 MATLAB介绍
MATLAB是很实用数学软件它在数学类科技应用软件中在数值运算方面首屈一指。MATLAB能够进行运算、绘制函数和数据、实现算法、创建用户界面、连接接其它编程语言程序等,关键应用于工程计算、控制设计、信号处理和通讯、金融建模设计和分析等领域。 MATLAB基础数据单位是矩阵,它指令表示式和数学、工程中常见形式十分相同,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同事情简捷得多,而且mathwork也吸收了像Maple等软件优点,使MATLAB成为一个强大数学软件。能够直接调用,用户也能够将自己编写实用程序导入到MATLAB函数库中方便自己以后调用,另外很多MATLAB爱好者全部编写了部分经典程序,用户能够直接进行下载就能够用。
第3章 基础原理
3.1 线性分组码编码
3.1.1 生成矩阵
线性分组码(n,k)中许用码字(组)为2k个。定义线性分组码加法为模二加法,乘法为二进制乘法。即1+1=0、1+0=1、0+1=1、0+0=0;1×1=1、1×0=0、0×0=0、0×1=0。且码字和码字运算在各个对应比特位上符合上述二进制加法运算规则。
线性分组码含有以下性质(n,k)性质:1、封闭性。任意两个码组和还是许用码组。2、码最小距离等于非零码最小码重。
对于码组长度为n、信息码元为k位、监督码元为r=n-k位分组码,常记作(n,k)码,假如满足2r-1≥n,则有可能结构出纠正一位或一位以上错误线性码。
下面我们经过(7,3)分组码例子来说明怎样具体结构这种线性码。设分组码(n,k)中,k = 3,为能纠正一位误码,要求r≥3。现取r=4,则n=k+r=7。该例子中,信息组为(c6c5c4),码字为(c6c5c4c3c2c1c0).当已知信息组时,按以下规则得到四个校验元,即
c3=c6+c4
c2=c6+c5+c4 (3-1)
c1=c6+c5
c0=c5+c4
这组方程称为校验方程。
(7,3)线性分组码有23(8)个许用码字或正当码字,另有27-23个禁用码字。发送方发送是许用码字,若接收方收到是禁用码字,则说明传输中发生了错误。
为了深化对线性分组码理论分析,可将其和线性空间联络起来。因为每个码字全部是一个二进制n重,及二进制n维线性空间Vn中一个矢量,所以码字又称为码矢。线性分组码一个关键参数是码率r=k/n,它说明在一个码字中信息位所占比重,r越大,说明信息位所占比重越大,码传输信息有效性越高。因为(n,k)线性分组,线性分组码2k个码字组成了n维线性空间Vn一个K维子空间。所以这2k个码字完全可由k个线性无关矢量所组成。
设此k个矢量为c1,c2,…,ck,有生成矩阵形式为
c1
c2
·
·
·
ck
G=
(3-2)
(n,k)码字中任一码字ci,均可由这组基底线性组合生成,即
ci=mi ·G=[mn-1 mn-2 … mn-k]·G 式中,mi =[mn-1 mn-2 …mn-k ]是k个信息元组成信息组。
表3-1 (7,3)线性分组码
信息组
码字
000
0000000
001
0011101
010
0100111
011
0111010
100
100110
101
1010011
110
1101001
111
1110100
对于表3-1给出(7,3)线性分组码,可将写成矩阵形式
[c6 c5 c4 c3 c2 c1 c0]=[c6 c5 c4]·
故(7,3)码生成矩阵为
G=
能够看到,从(7,3)码8个码字中,挑选出k=3个线性无关码字(1001110)(0100111),(00111101)作为码一组基底,用c=m·G计算得码字。
一个系统码生成矩阵G,其左边k行k列应是一个k阶单位方阵Ik,所以生成矩阵G表示为 G=[Ik P] (3-3)
式中,P是一个k×(n-k)阶矩阵。
3.1.2 校验矩阵
表3-1所表示(7,3)线性分组码四个校验元由式(3-1)所表示线性方程组决定。把(3-1)移相,有
c6+c4+c3=0
c6+c5+c4+c2=0
c6+c1+c5=0 (3-4)
c5+c4+c0=0
上式矩阵形式为
· =
这里四行七列矩阵称为(7,3)码一致校验矩阵,用H表示,即
H= (3-5)
由H矩阵得到(n,k)线性分组码每一码字ci,(i=1,2,…,2k),全部必需满足由H矩阵各行所确定线性方程组,即 ci·HT=0.(7,3)码生成矩阵G中每一行及其线性组合全部是(n,k)码码字,所以有G·HT =0。由G和H组成行生成空间互为零空间,即G和H相互正交。H=[PT Ir]其右边r行r列组成一个单位方阵。
3.2 伴随式和译码
3.2.1 码距离及纠检错能力
1.码距离
两个码字之间,对应位取之不一样个数,称为汉明距离,用d表示。一个吗最小距离dmin定义为dmin=min{d(ci,cj),i≠j,ci,cj∈(n,k)},两个码字之间距离表示了它们之间差异大小。距离越大,两个码字差异越大,则传送时从一个码字错成另一码字可能性越小。码最小距离愈大,其抗干扰能力愈强。
2. 线性码纠检错能力
对于任一个(n,k)线性分组码,若要在码字内(1) 检测出e个错误,则要求码最小距离d≥e+1;(2) 纠正t个错误,则要求码最小距离d≥2t+1;(3)纠正t个错误同时检测e(≥t)个错误,则要求 d≥t+e+1;
3.2.2 伴随式和译码
假设接收端收到码字为B,那么它和原来发送端发送码字A之间就有可能存在着误差。即在码组A={a6 a5 a4 a3 a2 a1 a0 }中任意一位就有可能犯错。这么我们在接收端接收到一个码组是就有可能判定错发送端原来应该要表示意思。为了描述数据在传输信道中出现错误情况,引入了错误图样E,在错误图样中,0代表对应位没有传错,1代表传输错误。实际上错误图样E就是收序列和发送序列差。所以在译码中用接收到码字B模尔加错误图样E就能够得到发送端正确码字A。所以译码过程就是要找到错误图样E。
定义:校正子S
S = B * H= ( A + E ) * H
= A * H+ E * H
= E * H
因为A是编得正确码字。依据前面所叙述,它和监督矩阵转置相乘为0。显然,S仅和错误图样相关,它们之间是一一对应关系。找到了校正子S,也就能够找到E。而和发送码字无关。若E=0,则S=0;所以依据S是否为0可进行码字检错。
假如接收码字B中只有一位码元发生错误,又设错误在第i位。即Ei-1=1,其它Ei均为0。在后面译码程序中,建立了一个校正子S和错误图样E对应表。也就是收到一个B序列,就能够经过计算得到一个校正子,而每一个校正子全部对应着一个错误图样E,再经过B模尔加上E,就能够得到正确码字A。
因为在不一样错误序列B中,同一位码元错误时对应E是一样,所以能够利用0000000这个正确码字让它每位依次错误,来求得它八个校正子。而这时矩阵B就是错误图样E。
这么就算得了8个校正子S。而这时错误序列B,就是错误图样E,所以有: E和S全部已经得到,这时就能够建立一个表来将它们一一对应起来,方便在编程过程中用SWITCH语句。
第4章 推导过程
4.1 编码过程
监督矩阵H和生成矩阵G关系:
由H和G分块表示矩阵形式
H =[P In-k] (4-1)
G=[Ik Q] (4-2)
P=QT (4-3)
则有G·HT=0 (4-4)或 H·GT=0 (4-5)
已知给出(6,3)码Q矩阵
0 1 1
1 0 1
1 1 0
Q= (4-6)
则能够依据G=[Ik Q]求出生成矩阵
1 0 0 0 1 1
0 1 0 1 0 1
0 0 1 1 1 0
G= (4-7)
由 P=QT 和 H =[P In-k] 可求出监督矩阵H为
0 1 1 1 0 0
1 0 1 0 1 0
1 1 0 0 0 1
H=
有了生成矩阵后则能够依据输入四位信息位和生成矩阵相乘得到编码矩阵,即
MATLAB函数为:
C=rem(I*G,2); (4-8)
其中C为编码后结果,I为信息矩阵,G为生成矩阵。
则编码全部情况为:
编码序列:
信息位 || 监督位
0 0 0 0 0 0
0 0 1 1 1 0
0 1 0 1 0 1
0 1 1 0 1 1
1 0 0 0 1 1
1 0 1 1 0 1
1 1 0 1 1 0
1 1 1 0 0 0
C= (4-9)
4.2 译码过程
0 1 1 1 0 0
1 0 1 0 1 0
1 1 0 0 0 1
对于译码过程来说,一样由上知道监督矩阵:
H=
H矩阵和(n,k)码任何一个许用码字进行相乘结果必等于0,即若C=m·G是任一(n,k)码字,则必有C·HT=0。若不属于许用码字,或有传输差错,且差错
位数在(n,k)码纠错能力内,则运算结果将为非0值,此时,能够纠错或检错重发。
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S0 = B ·H= [000000]· =000 (4-10)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S1 = B ·H=[000001] · =001 (4-11)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S2 = B ·H=[000010]· =010 (4-12)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S3 = B ·H=[000100]· =011 (4-13)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S4 = B ·H=[001000]· =100 (4-14)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S5 = B ·H=[010000]· =101 (4-15)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S6 = B ·H=[100000]· =110 (4-16)
0 1 1
1 0 1
1 1 0
1 0 0
0 1 0
0 0 1
S7 = B ·H=[100100]· =111 (4-17)
当编码矩阵和生成矩阵转置矩阵相乘时,若当其中一位编码或两位出现差错时会有八种情况,则这些情况列犯错码矩阵以下:
错码矩阵:
表4-1(6,3)线性分组码译码表
校正子S
错误图样E
000
000000
001
000001
010
000010
011
000100
100
001000
101
010000
110
100000
111
100100
而这些情况恰好是和校验子有某种对应关系,依据这些对应关系能够进行相关编程。若编程检测到了那一位错误能够依据
A=B+E (4-18)
其中A 为纠错输出码序列,E为错码矩阵,R为信道输出码。
对接收到信息进行更正求出正确编码,从而再提去更正后接收序列前三位来提取信息位,以至取得信息矩阵I。
第5章 仿真程序及结果分析
5.1 仿真程序
% H 监督矩阵
% G 生成矩阵
% C 编码矩阵
% I 输入信息序列
% R 信道输出码
% A 纠错输出码序列
% E 错码矩阵
% S 校验子矩阵
% M 校验子行十进制序列
%信道编码程序
clear all
close all
H=[0 1 1 1 0 0;
1 0 1 0 1 0;
1 1 0 0 0 1]; %监督矩阵H
G=gen2par(H); %求H阵生成矩阵G
I=[0 0 0;0 0 1;0 1 0;0 1 1;1 0 0;1 0 1;1 1 0;1 1 1];
C=rem(I*G,2); %求码字C
disp('所得编码结果为:C='); %显示输出码字C
disp(C);
%信道译码程序
clear all;
close all;
H=[0 1 1 1 0 0;
1 0 1 0 1 0;
1 1 0 0 0 1]; %监督矩阵H
B=input('请输入接收码组B:');
[a,b]=size(B); %返回数组B维数
E=[0 0 0 0 0 0;0 0 0 0 0 1;0 0 0 0 1 0;0 0 0 1 0 0;
0 0 1 0 0 0;0 1 0 0 0 0;1 0 0 0 0 0;1 0 0 1 0 0];
S=rem(B*H',2); %求校验子S
i=1;
for i=1:1:a
M(i,1)=S(i,1).*4+S(i,2).*2+S(i,3); %求校验子所表示十进制整数
end
for i=1:1:a
switch(M(i,1))
case 0
A(i,:)=B(i,:)+E(1,:);
case 1
A(i,:)=B(i,:)+E(2,:);
case 2
A(i,:)=B(i,:)+E(3,:);
case 3
A(i,:)=B(i,:)+E(4,:);
case 4
A(i,:)=B(i,:)+E(5,:);
case 5
A(i,:)=B(i,:)+E(6,:);
case 6
A(i,:)=B(i,:)+E(7,:);
case 7
A(i,:)=B(i,:)+E(8,:);
end
end
for i=1:1:a
switch(M(i,1))
case 0
disp(‘没有出现错误!’);
case 1
disp(‘注意:第1位出现一个错误!请纠正!’);
case 2
disp(‘注意:第2位出现一个错误!请纠正!’);
case 3
disp(‘注意:第3位出现一个错误!请纠正!’);
case 4
disp(‘注意:第4位出现一个错误!请纠正!’);
case 5
disp(‘注意:第5位出现一个错误!请纠正!’);
case 6
disp(‘注意:第6位出现一个错误!请纠正!’);
case 7
disp(‘注意:第6位和第3位出现两个错误!请纠正!’);
end
end
A=rem(A,2); %求出正确编码
disp('检纠错后码组A=');
disp(A); %显示正确编码
j=1;
while j<=3 %提取信息位
I(:,j)=A(:,j);
j=j+1;
end
disp('译出信息序列I=');
disp(I); %显示原信息码
5.2 仿真结果图
1.输出编码结果及输入正确接收码译码结果:
依据仿真程序得出仿真结果以下图所表示:
图5-1 输出编码结果和正确输入时显示图
2.输入一位错误时结果显示图
图5-2 有一位错误输入时显示图
3.输入两位特定位错误时结果显示
图5-3 有两位特定位错误输入时显示图
5.3 结果分析
1.输出编码结果及输入正确接收码译码结果分析
由图5-1 输出编码结果和正确输入时显示图所表示结果能够看出编码结果八种情况和在推导过程中运算结果是一致,能够见得程序编码过程是正确。对于译码过程而言,当界面显示“请输入接收码组B:” ,然后从提醒符后输入:[0 0 0 0 0 0],因为输入接收码组和编码后码字一致,它提取了每个码组前四位,即信息位,由结果看出译码过程是正确,并没有出现错译情况,可见程序译码片段是正确。
2.输入一位错误时结果分析
对于纠错过程而言,当界面显示“请输入接收码组B:” 。然后从提醒符后输入:[1 0 1 0 0 0],由图5-2 有一位错误输入时显示图所知,接收码组第五位发生了错误,经程序纠检错误后更正了接收序列错误,而且正确译出了信息位。可见程序纠错功效也是能够实现,以上结果深入证实了,系统译码程序正确性。
3.输入两位特定位错误时结果分析
由图5-3 有两位特定位错误输入时显示图知,当输入B=[1 0 0 1 0 0]时,校正子是111,错误图样是100100,所以结果显示和理论相符。
参考文件
[1] 孙丽华编. 信息论和纠错编码. 电子工业出版社. ,3
[2] 郭文彬 桑林编. 通信原理-基于MATLAB计算机仿真. 北京邮电大学出版社. .2
[3] 苏金明 阮沈勇编. MATLAB实用教程(第二版). 电子工业出版社. .2
[4] 徐东艳 孟晓刚编. MATLAB函数库查询词典. 中国铁道出版社. .4
[5] 潘新民编. 计算机通信技术. 电子工业出版社. .7
[6] 吴玲达 李国辉 杨冰等编. 计算机通信原理和技术. 国防科技大学出版社. .3
[7] 曹志刚 钱压生编. 现代通信原理. 清华大学出版社. 1992.2
[8] 梅志红 杨万铨编. MATLAB程序设计基础及其应用. 清华大学出版社.
[9] 樊昌兴. 通信原理编. 国防工业出版社. 1999.10
[10] 王华 李有军编. MATLAB电子仿真和应用教程(第二版). 国防工业出版社. .3
[11] 孙屹主编. MATLAB通信仿真开发手册. 国防工业出版社. .1
总结
经过对线性分组码中线性分组码编译码编程实现,了解到线性分组码组成方法是把信息序列分成每k个码元一段,并由这k个码元按一定规则产生r 个校验位,组成长度为n=k+r码字,用(n,k)表示。信息码元和校验位之间为线性关系。而且知道了线性分组码编码过程信息码元和校验位之间线性关系实现起来是十分简单.
对于码组长度为n、信息码元为k位、监督码元为r=n-k位分组码,假如满足2r-1≥n,则有可能结构出纠正一位或一位以上错误线性码。就像本设计(6,3)分组码(n,k)中,n=6,k = 3,r≥3能纠正一位误码,检测到两位误码。
利用MATLAB语言进行编程,能够较显著知道编码过程和译码时出现错误,码字最小距离是3时,能够纠正一位错误,当输入特定两位错误时,该码字还能够纠正这两位错误,这种情况在编程结果命令窗口中能够显著看到。
线性分组码含有编译码简单,封闭性好等特点,采取差错控制编码技术是提升数字通信可靠性有效方法,是现在较为流行差错控制编码技术之一。
展开阅读全文