线性分组码信道编码DOC.docx
《线性分组码信道编码DOC.docx》由会员分享,可在线阅读,更多相关《线性分组码信道编码DOC.docx(20页珍藏版)》请在冰点文库上搜索。
![线性分组码信道编码DOC.docx](https://file1.bingdoc.com/fileroot1/2023-7/13/8e5f6ae6-5b1d-48ce-a76c-5f3476822c83/8e5f6ae6-5b1d-48ce-a76c-5f3476822c831.gif)
线性分组码信道编码DOC
数字通信课程报告
题目:
数字通信中的线性分组码
讲课老师:
学生姓名:
所属院系:
专业:
学号:
1设计目的和要求
数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图像跳跃,不连续,出现马赛克等现象。
通过信道编码可实现对数据流进行相应的处理,使系统具有一定的纠错能力和抗干扰能力,可极大地避免码流传送中误码的发生。
通过线性分组码实现信道编码,提高系统的可靠性。
2设计原理
要设计一个(6,3)线性分组码的编译码程序,最基本的是要具备对输入的信息码进行编码,让它具有抗干扰的能力。
同时,还要让它具有对接收到的整个码组中提取信息码组的功能。
但是,在实际的通信系统中,由于信道传输特性不理想以及加性噪声的影响,接收到的信息中不可避免地会发生错误,影响通信系统的传输可靠性,因而,本设计还要让该程序具有纠正错误的能力,当接收到的码组中有一位码,发生错误时可以检测到这一位错码,并且可以纠正这一位错码,并且让系统从纠正后的码组中提取正确的信息码组。
针对给定的矩阵
011
101
110
Q=
完成如下的工作:
1完成对任意信息序列的编码
2根据生成矩阵,形成监督矩阵;
3根据得到的监督矩阵,得到伴随式,并根据它进行译码;
4验证工作的正确性。
2.1线性分组码的编码
2.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
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=
(n,k)码字中的任一码字ci,均可由这组基底的线性组合生成,即
ci=mi ·G=[mn-1mn-2…mn-k]·G
式中,mi =[mn-1mn-2…mn-k]是k个信息元组成的信息组。
表2-1(7,3)线性分组码
信息组
码字
000
0000000
001
0011101
010
0100111
011
0111010
100
100110
101
1010011
110
1101001
111
1110100
对于表2-1给出的(7,3)线性分组码,可将写成矩阵形式
[c6c5c4c3c2c1c0]=[c6c5c4]·
故(7,3)码的生成矩阵为
G=
可以看到,从(7,3)码的8个码字中,挑选出k=3个线性无关的码字(1001110)(0100111),(00111101)作为码的一组基底,用c=m·G计算得码字。
一个系统码的生成矩阵G,其左边k行k列应是一个k阶单位方阵Ik,因此生成矩阵G表示为
G=[IkP]
式中,P是一个k×(n-k)阶矩阵。
3设计过程
3.1编码过程
监督矩阵H与生成矩阵G的关系:
由H与G的分块表示的矩阵形式
H=[PIn-k]
G=[IkQ]
P=QT
则有G·HT=0
或 H·GT=0
已知给出的(6,3)码的Q矩阵
111
201
110
Q=
则可以根据G=[IkQ]求出生成矩阵
100011
110101
001110
G=
由 P=QT和 H=[PIn-k]可求出监督矩阵H为
111100
201010
110001
H=
有了生成矩阵后则可以根据输入的四位信息位和生成矩阵相乘得到编码矩阵,即
MATLAB函数为:
C=rem(I*G,2);
其中C为编码后的结果,I为信息矩阵,G为生成矩阵。
则编码的所有情况为:
编码序列:
信息位||监督位
100000
001110
010101
011011
100011
101101
110110
111000
C=
3.2译码过程
011100
101010
110001
对于译码过程来说,同样由上知道监督矩阵:
H=
H矩阵与(n,k)码的任何一个许用码字进行相乘的结果必等于0,即若C=m·G是任一(n,k)码字,则必有C·HT=0。
若不属于许用码字,或有传输差错,且差错
位数在(n,k)码纠错能力内,则运算结果将为非0值,此时,可以纠错或检错重发。
011
101
110
100
010
001
S0=B·H
=[000000]·=000
011
101
110
100
010
001
S1=B·H
=[000001]·=001
011
101
110
100
010
001
S2=B·H
=[000010]·=010
011
101
110
100
010
001
S3=B·H
=[000100]·=011
011
101
110
100
010
001
S4=B·H
=[001000]·=100
011
101
110
100
010
001
S5=B·H
=[010000]·=101
011
101
110
100
010
001
S6=B·H
=[100000]·=110
011
101
110
100
010
001
S7=B·H
=[100100]·=111
当编码矩阵与生成矩阵的转置矩阵相乘时,若当其中的一位编码或两位出现差错时会有八种情况,则这些情况列出错码矩阵如下:
错码矩阵:
表3-1(6,3)线性分组码的译码表
校正子S
错误图样E
000
000000
001
000001
010
000010
011
000100
100
001000
101
010000
110
100000
111
100100
而这些情况正好是和校验子有某种对应关系的,根据这些对应关系可以进行相关编程。
若编程检测到了那一位错误可以根据
A=B+E其中A为纠错输出码序列,E为错码矩阵,R为信道输出码。
对接收到的信息进行改正求出正确的编码,从而再提去更正后的接收序列的前三位来提取信息位,以至获得信息矩阵I。
4仿真程序及结果分析
4.1仿真结果
1.输出编码结果及输入正确接收码的译码结果:
从程序的一开始运行就显示“您好!
欢迎使用线性分组码编译器:
请选择编译器种类:
1:
编译器2:
译码器:
0:
退出>>”的一串字样,当你输入“1”时,则又显示“请输入n*4的信息码组:
”。
当输入“2”时,显示“请输入接收码组B:
”。
当你输入“0”时,则退出程序。
运行结果如下图:
图1输出编码结果和正确输入时显示图
2.输入[0000;0001;0010;0011;0100;0101;0110;0111;1000;1001;1010;1011;1100;1101;1110;1111]一串信息码组后回车,便会得到编码后的码组。
运行结果如下图:
图2程序的编码过程
3.当输入“2”时,显示“请输入接收码组B:
”。
然后从提示符后输入:
[1101001;0101110],回车后显示如下:
图3程序的译码
4.当你输入“0”时,系统应该正常退出运行程序,运行结果如下:
图4系统正常输入退出
4.2结果分析
1.输出编码结果及输入正确接收码的译码结果分析
由图1可以看出编码的结果的八种情况和在推导过程中运算的结果是一致的,所以我们可以知道程序的编码过程是正确的。
对于译码过程而言,当界面显示“请输入接收码组B:
”,然后从提示符后输入:
[000000],由于输入的接收码组与编码后的码字一致,它提取了每个码组的前四位,即信息位,由结果看出译码过程是正确的,并没有出现错译的情况,可见程序的译码片段是正确的。
2.输入一位错误时的结果分析
由图1可以看出,当界面显示“请输入接收码组B:
”。
然后从提示符后输入:
[0000;0001;0010;0011;0100;0101;0110;0111;1000;1001;1010;1011;1100;1101;1110;1111]由图2有一位错误输入时的显示图所知,接收码组的第五位发生了错误,经程序纠检错误后改正了接收序列的错误,并且正确译出了信息位。
可见程序的纠错功能也是可以实现的,以上结果进一步证实了,系统译码程序的正确性。
3.输入两位特定位错误时的结果分析
由图3有两位特定位错误输入时的显示图知,当输入B=[1101001;0101110]时,校正子是111,错误图样是100100,所以说明理论得以验证。
Matlab程序如下:
functionbianyiqi
%-------$$$$$-------
%Definevariables:
%H监督矩阵%G生成矩阵
%C编码矩阵
%I输入信息序列
%R信道输出码
%A纠错输出码序列
%E错码矩阵
%S校验子矩阵
%M校验子的行的十进制序列
%=======================
Q=input(...
'您好!
欢迎使用线性分组码编译器:
\n请选择编译器种类:
\n1:
编码器2:
译码器0:
退出>>');
while(Q)
%信道编码程序
if(Q==1)
clearall
closeall
H=[1110100;
1011010;
1101001];%监督矩阵
G=gen2par(H);%求H阵的生成矩阵G
I=input('请输入n*4的信息码组:
');
C=rem(I*G,2);
disp('编码结果为:
C=');
disp(C);
elseif(Q==2)
%信道译码程序
clearall;
closeall;
H=[1110100;
1011010;
1101001];%监督矩阵
B=input('请输入接收码组B:
');
[a,b]=size(B);
E=[0000000;0000001;
0000010;0000100;
0001000;0010000;
0100000;1000000];
S=rem(B*H',2);%求校验子
i=1;
fori=1:
1:
a
M(i,1)=S(i,1).*4+S(i,2).*2+S(i,3);
%求校验子所表示的整数
end
fori=1:
1:
a
switch(M(i,1))
case0
A(i,:
)=B(i,:
)+E(1,:
);
case1
A(i,:
)=B(i,:
)+E(2,:
);
case2
A(i,:
)=B(i,:
)+E(3,:
);
case4
A(i,:
)=B(i,:
)+E(4,:
);
case3
A(i,:
)=B(i,:
)+E(5,:
);
case6
A(i,:
)=B(i,:
)+E(6,:
);
case5
A(i,:
)=B(i,:
)+E(7,:
);
case7
A(i,:
)=B(i,:
)+E(8,:
);
otherwise
'不可能出现'
end
end
A=rem(A,2);%求出正确的编码
disp('检纠错后的码组A=');
disp(A);
j=1;
whilej<=4%提取信息位
I(:
j)=A(:
j);
j=j+1;
end
disp('译出的信息序列I=');
disp(I);%显示原信息码
else
'对不起,您输入有误!
'
end
Q=input('接下来您想:
\n1:
用编码器2:
用译码器0:
退出>>');
end
disp('谢谢您的使用,再见!
!
!
');