维特比译码程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(n,k,N)卷积码的维特比译码算法实现#include

#define t_src 0

#define t_des 1

#define t_len 2

#define t_flag 3

#define t_in 4

using namespace std;

int myn=0;

int stalen=0;

int myg1[10]={0};

int myg2[10]={0};

int stan0[256][2]={0};//输入0时个状态的输出

int stan1[256][2]={0};//输入1时各状态的输出

int stachn[256][2]={0};//状态装换表

int path[256][100]={0};//存储路径

int calpath[256]={0};//存储路径长度

int myin[24];//一次处理12次

int myout[200]; //

int myoutsym=0;

int pthsym;

int outfull=0; //决定是否输出

int table1[8]={1,2,4,8,16,32,64,128};

void chartobits(char ch,int *bits);

char bitstochar(int *bits);

int calluj(int a1,int a2,int b1,int b2);

void initpath(void);

void selpath(int a1,int a2);

void wridata(void);

void viterbit(void);

void writdataedn(void);

void creatsta(void);

void myinput(void);

int main(){

myinput();

creatsta();

viterbit();

}

void myinput(void){

int i,j;

cout<<"输入编码的约束长度N:(3

cin>>myn;

stalen=int(pow(2.0,myn-1));

cout<<"选择默认的编码矢量则输入1,输入2则可输入其他的编码矢量"<

cin>>i;

if(i==1){

switch(myn){

case 3:myg1[0]=1,myg1[1]=1,myg1[2]=1;

myg2[0]=1,myg2[1]=0,myg2[2]=1;

break;

case 4:myg1[0]=1,myg1[1]=1,myg1[2]=1,myg1[3]=1;

myg2[0]=1,myg2[1]=0,myg2[2]=1,myg2[3]=1;

break;

case 5:myg1[0]=1,myg1[1]=0,myg1[2]=1,myg1[3]=1,myg1[4]=1;

myg2[0]=1,myg2[1]=1,myg2[2]=0,myg2[3]=1,myg2[4]=1;

break;

case 6:myg1[0]=1,myg1[1]=0,myg1[2]=1,myg1[3]=1,myg1[4]=1,myg1[5]=1;

myg2[0]=1,myg2[1]=1,myg2[2]=0,myg2[3]=1,myg2[4]=0,myg2[5]=1;

break;

case 7: myg1[0]=1,myg1[1]=0,myg1[2]=0,myg1[3]=1,myg1[4]=1,myg1[5]=1,myg1[6]=1;

myg2[0]=1,myg2[1]=1,myg2[2]=0,myg2[3]=1,myg2[4]=1,myg2[5]=0,myg2[6]=1;

break;

case 8: myg1[0]=1,myg1[1]=0,myg1[2]=0,myg1[3]=1,myg1[4]=1,myg1[5]=1,myg1[6]=1,myg1[7]=1;

myg2[0]=1,myg2[1]=1,myg2[2]=1,myg2[3]=0,myg2[4]=0,myg2[5]=1,myg2[6]=0,myg2[7]=1;

break;

case 9: myg1[0]=1,myg1[1]=1,myg1[2]=0,myg1[3]=1,myg1[4]=0,myg1[5]=1,myg1[6]=1,myg1[7]=1,m yg1[8]=1;

myg2[0]=1,myg2[1]=0,myg2[2]=0,myg2[3]=0,myg2[4]=1,myg2[5]=1,myg2[6]=1,myg2[7]=0,m yg2[8]=1;

break;

}

}

else{

cout<<"输入g1"<

for(j=0;j

cin>>myg1[j];

cout<<"输入g2"<

for(j=0;j

cin>>myg2[j];

}

cout<<"连接矢量1为"<

for(j=0;j

cout<

cout<

cout<<"连接矢量2为"<

for(j=0;j

cout<

cout<

cout<<"stalen: "<

cout<

}

void creatsta(void){

int i,j,k,myi;

int tembits[10];

for(i=0;i

stan1[i][0]=0;

stan1[i][1]=0;

stan0[i][0]=0;

stan0[i][1]=0;

stachn[i][0]=i/2;

myi=i;

for(j=0;j

if(myi>=pow(2.0,myn-1-j)){

tembits[j]=1;

myi=myi-pow(2.0,myn-1-j);

}

else{

tembits[j]=0;

}

}

for(k=0;k

stan0[i][0]+=myg1[k]*tembits[k];

stan0[i][1]+=myg2[k]*tembits[k];

}

stan0[i][0]=stan0[i][0]%2;

stan0[i][1]=stan0[i][1]%2;

myi=i+int(pow(2.0,myn-1));

stachn[i][1]=myi/2;

for(j=0;j

if(myi>=pow(2.0,myn-1-j)){

tembits[j]=1;

相关文档
最新文档