通信原理课程设计设计题目:卷积码编码专业:电子信息工程班级:09级电子2班学生姓名:代洪浩郭俊提交日期:摘要卷积码是P.Elias于1955年发明的一种非分组码。
分组码在编码的时候,先将输入信息码元序列分成长度为k的段,然后按照编码规则给每段附加上r位监督码元,构成长度为n的码组。
各个码组间没有约束关系,及监督码元只监督本码组的码元有无错码。
因此在解码时各个接收码组也是分别独立地进行解码的。
卷积码则不同。
卷积码在编码是虽然也是把k个比特的信息段编成n个比特的码组,但是监督码元不仅和当前的k比特信息段有关,而且还同前面m=(N-1)个信息段有关。
所以一个码组中的监督码元监督着N个信息段。
通常将N称为码组的约束度。
一般来说,对于卷积码,k和n的值是比较小的整数。
通常将卷积码记做(n,k,m),其码率为k/n。
卷积码的编码1.1卷积码编码原理框图图1-1所示为卷积码编码器的一般原理方框图。
编码器有3种主要元件构成,即移存器、模2加法器和旋转开关。
移存器共有Nk级,模2加法器共有n个。
每个模2加法器的输入端数目不等,它连接到某些移存器的输出端;模2加法器的输出端接到旋转开关上。
在每个时隙中,一次有k个比特从左端进入移存器,并且移存器各级暂存的内容向右移k位。
在此时隙中,旋转开关旋转一周,输出n个比特(n>k)。
Nk级k个比特移存器2每输入k 比特旋转一周图1-1 卷积码编码器原理方框图下面我们用两种方法来实现如下题目:设(2,1,2)卷积码的输入、输出关系为112c b b =+,223c b b =+,若输入序列为[1 1 0 0 1 0 1 0 1 0 0 1 1 1 1],试编写输出卷积码。
根据题意,我们可得卷积码(2,1,2)的框图如下:图1-2 (2,1,2)卷积码编码器方框图左边是信息的输入,每个时隙中,只有1个比特的输入信息进入移存器,并且移存器各级暂存的内容向右移1位,开关旋转一周输出2个比特。
所以,它的码率等于1/2。
每当输入1比特时,该编码器输出3比特C1C2,输入和输出的关系如下:C1=b1⊕b2 C2=b2⊕b3上式中,b1是当前输入信息位,b2和b3是移存器存储的前两个信息位。
对于(2,1,2)卷积码,有4个状态:00 01 10 11 ,分别用a, b, c, d 来表示,则我们可得移存器状态和输入输出码元的关系,如表1-1表1-1 移存器状态和输入输出码元的关系根据该表所示的移存器状态和输入输出码元的关系,我们可得(2,1,2)卷积码的码树图,码树的起点是初始状态,即以a 点为起点,假如规定:输入信息位为“0”时,则状态向上支路移动;输入信息位为“1”时,则状态向下支路移动。
图中的a、b、c、d 就是表示下图中的四种状态。
下图为(2,1,2)卷积码的码树图:1.2卷积码状态图由上图可知:前一状态a 只能转到下一状态a 或b, 前一状态b 只能转到下一状态c 或d,按照表1-1和图1-3所示的规律,可以画出(2,1,2)卷积码的状态图,如下图1-4所示。
图中,虚线表示输入信息位为“1”时状态转变的路线,实线表示输入信息位为“0”时状态转变的路线;线旁的2位数字是编码输出比特,利用这种状态图可以方便的从输入序列得到输出序列。
图1-4 (2,1,2)卷积码状态图1.2卷积码的网格图将状态图在时间上展开,可以得到网格图,如图1-5所示图1-5 (2,1,2)卷积码网格图图中画了5个时隙,从该网格图中可以看出,在第四时隙以后的网格图形完全是重复第三时隙的图形。
如果给出输入信息位为1 1 0 0 1时,从该网格图中可以得到输出编码序列是:10 01 10 01 10,则用网格图表示编码过程和输入输出关系比码树图更为简练。
解题方法根据以上各图形,下面我们用两种方法来完成该题目。
解法一:用以前学过的C语言来实现,所用的软件为:Win-TC.根据以上各图形,则可以用C语言知识来编写程序,我们所编写的程序如下:#include <stdio.h>#include "conio.h"#include "math.h"#include <stdlib.h>#define N 100int encode(char f,int m){ int b1,b2,b3,c1,c2;b1=m;if(f=='a') b2=0,b3=0;elseif(f=='b') b2=1,b3=0;elseif(f=='c') b2=0,b3=1;else b2=1,b3=1;if(b1==b2) c1=0;else c1=1;if(b2==b3) c2=0;else c2=1;printf("%d%d",c1,c2);printf(" ");}char nextstate(char f,int m){ switch(f){ case 'a':{ if(m==0) f='a';else f='b';};break;case 'b':{ if(m==0) f='c';else f='d';};break;case 'c':{ if(m==0) f='a';else f='b';};break;case 'd':{ if(m==0) f='c';else f='d';};break;}return(f);}void main(){ char f='a';int e,i,n;int input[N];int encode(char f,int m);char nextstate(char f,int m);printf("please input the number of information bits:\n"); scanf("%d",&n);printf("\n");printf("please input the information bits:\n");for(i=0;i<n;i++)scanf("%d",&input[i]);printf("the output sequence:\n");for(i=0;i<n;i++){ e=input[i];decode(f,e);f=nextstate(f,e);}getch();}在Win-TC的命令窗口输入上述程序后,再运行,然后得到如下提示:“please input the number of information bits:”在提示后面输入:15(因为题目中给定的序列是15位,所以此处输入15,当然也可以输入其他小于100的整数,但是一定要和后面输入的序列的位数一致。
)输入“15”后,将会出现如下提示:“please input the information bits:”。
这时就要输入特定的15位序列(序列长度与前面输入的数字一致)。
然后程序运行后的结果如下图所示:以下还有一个程序是在编写的C语言程序中直接输入题目中的序列,然后直接运行也能实现上述结果,该程序如下:#include <stdio.h>#include "conio.h"#include "math.h"#include <stdlib.h>#define N 15int decode(char f,int m){ int b1,b2,b3,c1,c2;b1=m;if(f=='a') b2=0,b3=0;elseif(f=='b') b2=1,b3=0;elseif(f=='c') b2=0,b3=1;else b2=1,b3=1;if(b1==b2) c1=0;else c1=1;if(b2==b3) c2=0;else c2=1;printf("%d%d",c1,c2);printf(" ");}char nextstate(char f,int m){ switch(f){ case 'a':{ if(m==0) f='a';else f='b';};break;case 'b':{ if(m==0) f='c';else f='d';};break;case 'c':{ if(m==0) f='a';else f='b';};break;case 'd':{ if(m==0) f='c';else f='d';};break;}return(f);}void main(){ char f='a';int e,i;int input[N]={1,1,0,0,1,0,1,0,1,0,0,1,1,1,1}; int decode(char f,int m);char nextstate(char f,int m);printf("the input information bits:\n");for(i=0;i<N;i++)printf("%2d",input[i]);printf("\nthe output sequence:\n");for(i=0;i<N;i++){ e=input[i];decode(f,e);f=nextstate(f,e);}getch();}程序运行后的结果如下:解法二:这种解法利用的是卷积码解析表示法,卷积码的解析表示法大致可以分为离散卷积法,生成矩阵法,码多项式法。
根据题目所给的(2,1,2)卷积码,并且由输入输出的关系:C1=b1⊕b2 C2=b2⊕b3我们可得卷积码的编码器如下图:由上图可知,该编码器有1个输入端,2个输出端。
若输入序列m(x)=(m0 m1 m2 m3 m4…….),则对应的两个输出的序列分别为:C1=(C01 C11 C21 C31 C41……)和C2=(C02 C12 C22 C32 C42 ……)相应的编码方程可写为:C1=m(x)*g1 C2=m(x)*g2 C=(C1,C2)其中的“*”表示卷积运算,g1和g2分别表示编码器的两个冲激响应,即编码器的输出可以又输入序列和编码器的两个冲激响应卷积而得到,故称为卷积码。