卷积码编码程序的c语言实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
using namespace std;
int table1[8]={1,2,4,8,16,32,64,128};
int myn=0;
int stalen=0;
int stan0[256][2]={0};//输入0时个状态的输出
int stan1[256][2]={0};//输入1时各状态的输出
int stachn[256][2]={0};//状态装换表
int myg1[10]={0};
int myg2[10]={0};
int myout[100]; //
int myoutsym=0;
void chartobits(char ch,int *bits);
char bitstochar(int *bits);
void convolution(void);
void creatsta(void);
void myinput(void);
int main(){
char exit_char;
myinput();
creatsta();
convolution();
cin>>exit_char;
}
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,myj; 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 cout< cout< 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; myi=myi-pow(2.0,myn-1-j); } else{ tembits[j]=0; } } /*for(k=0;k cout< cout< for(k=0;k stan1[i][0]+=myg1[k]*tembits[k]; stan1[i][1]+=myg2[k]*tembits[k];