维特比译码程序
(n,k,N)卷积码的维特比译码算法实现#include#define t_src 0#define t_des 1#define t_len 2#define t_flag 3#define t_in 4using 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<>myn;stalen=int(pow(2.0,myn-1));cout<>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,myg1[8]=1;myg2[0]=1,myg2[1]=0,myg2[2]=0,myg2[3]=0,myg2[4]=1