int **h,**H,**g,**G; //实现编码所需变量 int code;
string Info_str,Code_str; int total_num,extra_num; public:
void Initializing(); void Trans_h_to_H(); void Trans_h_to_g(); void Print_g(); void Trans_g_to_G(); void Print_G(); //编码
void Before_Encoding();//编码前的准备 int Check(string); void Encoding(); };
/**********************初始化模块**********************/ void JuanjiCode::Initializing() {
cout<<\"请输入码字长n0=\"; cin>>n0;
cout<<\"请输入信息元个数k0=\"; cin>>k0;
cout<<\"请输入关联长度m=\"; cin>>m; //监督元个数
r0=n0-k0;//动态分配存储单元 h=new int*[r0]; for(i=0;i cout<<\"您输入的基本监督矩阵h[\"< cout< //由基本监督矩阵h导出一致监督矩阵H并打印输出 void JuanjiCode::Trans_h_to_H() { cout<<\"该卷积码对应的一致监督矩阵H[\"< { H[t*r0+i][j]=h[i][(m-t-1)*n0+j]; cout< cout<<\" \"; } cout< void JuanjiCode::Trans_h_to_g() { for(t=0;t g[k0*t+i][j]=h[j-k0][t*n0+i]; else { if(t==m-1&&i==j) g[k0*t+i][j]=1; else g[k0*t+i][j]=0; } } } } Print_g(); } void JuanjiCode::Print_g() { cout<<\"该卷积码对应的基本生成矩阵g[\"< cout< void JuanjiCode::Trans_g_to_G() { for(t=0;t if(i<(t+1)*k0) G[i][t*n0+j]=g[(m-(t+1))*k0+i][j]; else G[i][t*n0+j]=0; } } } Print_G(); } void JuanjiCode::Print_G() { cout<<\"该卷积码对应的一致生成矩阵G[\"< cout< cout<<\" \"; } if((i+1)%k0==0) cout< void JuanjiCode::Before_Encoding()//编码前的准备 { C: int flag; cout<<\"请输入待编码的0、1信息序列:\"< flag=Check(Info_str); if(!flag) { cout<<\"您输入的信息序列含除0、1外的其他字符,请重新输入!\"< cout<<\"您输入的信息序列存在冗余,无法进行编码,请重新输入!\"< int flag=1; total_num=0; for(i=0;Info_str[i]!='\\0';i++) { if(!(Info_str[i]=='0'||Info_str[i]=='1')) { flag=0; break; } total_num++;//统计输入的0、1的数目 } return flag; } void JuanjiCode::Encoding() { Before_Encoding(); Code_str=\"\"; //前m个码组通过一致生成矩阵G编出 for(i=0;i code+=G[j][i]; else code+=0; } if(code%2==0) Code_str+='0'; else Code_str+='1'; } //其余的码组由基本生成矩阵编出 extra_num=total_num/k0-m; for(t=0;t for(i=0;i if(Info_str[j]=='1') code+=g[j-(t+1)*k0][i]; else code+=0; } if(code%2==0) Code_str+='0'; else Code_str+='1'; } } //输出截短码组 cout<<\"经编码后,得到如下序列:\"< cout<<\" \"; } cout<<\"...\"< JuanjiCode J_Code; char choice=' '; int flag=0; cout<<\"\\n\"; while(choice!='3') { C: cout<<\" \"<<\"*************************卷积码简易编码器*************************\\n\"; cout<<\" \"<<\"1.初始化\"<<\" \"<<\"2.编码\"<<\" \"<<\"3.退出\\n\"; cout<<\"请输入您要操作的步骤:\"; cin>>choice; if(choice=='1') { if(!flag){//初次执行初始化操作 flag=1; } J_Code.Initializing(); J_Code.Trans_h_to_H(); J_Code.Trans_h_to_g(); J_Code.Trans_g_to_G(); } else if(choice=='2') { if(!flag) { cout<<\"操作错误!请执行初始化操作后再进行本操作!\"< J_Code.Encoding(); } else if(choice=='3') { exit(0);//退出 } else//如果选了选项之外的就让用户重新选择 { cout<<\"您没有输入正确的步骤,请重新输入!\"< 因篇幅问题不能全部显示,请点此查看更多更全内容