维特比译码程序Word下载.docx
- 文档编号:16843815
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:13
- 大小:16.73KB
维特比译码程序Word下载.docx
《维特比译码程序Word下载.docx》由会员分享,可在线阅读,更多相关《维特比译码程序Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
intcalluj(inta1,inta2,intb1,intb2);
voidinitpath(void);
voidselpath(inta1,inta2);
voidwridata(void);
voidviterbit(void);
voidwritdataedn(void);
voidcreatsta(void);
voidmyinput(void);
intmain(){
myinput();
creatsta();
viterbit();
}
voidmyinput(void){
inti,j;
cout<
<
"
输入编码的约束长度N:
(3<
N<
9)"
endl;
cin>
>
myn;
stalen=int(pow,myn-1));
选择默认的编码矢量则输入1,输入2则可输入其他的编码矢量"
i;
if(i==1){
switch(myn){
case3:
myg1[0]=1,myg1[1]=1,myg1[2]=1;
myg2[0]=1,myg2[1]=0,myg2[2]=1;
break;
case4:
myg1[0]=1,myg1[1]=1,myg1[2]=1,myg1[3]=1;
myg2[0]=1,myg2[1]=0,myg2[2]=1,myg2[3]=1;
case5:
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;
case6:
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;
case7:
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;
case8:
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;
case9:
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,myg2[5]=1,myg2[6]=1,myg2[7]=0,myg2[8]=1;
}
}
else{
cout<
输入g1"
for(j=0;
j<
j++)
cin>
myg1[j];
输入g2"
myg2[j];
连接矢量1为"
for(j=0;
myg1[j]<
"
;
连接矢量2为"
myg2[j]<
stalen:
stalen;
voidcreatsta(void){
inti,j,k,myi;
inttembits[10];
for(i=0;
i<
i++){
stan1[i][0]=0;
stan1[i][1]=0;
stan0[i][0]=0;
stan0[i][1]=0;
stachn[i][0]=i/2;
myi=i;
j++){
if(myi>
=pow,myn-1-j)){
tembits[j]=1;
myi=myi-pow,myn-1-j);
}
else{
tembits[j]=0;
for(k=0;
k<
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,myn-1));
stachn[i][1]=myi/2;
stan1[i][0]+=myg1[k]*tembits[k];
stan1[i][1]+=myg2[k]*tembits[k];
stan1[i][0]=stan1[i][0]%2;
stan1[i][1]=stan1[i][1]%2;
状态转移出"
i++)
stachn[i][0]<
"
stachn[i][1]<
输入0状态转移后的输出"
stan0[i][0]<
stan0[i][1]<
输入1状态转移后的输出"
stan1[i][0]<
stan1[i][1]<
voidchartobits(charch,int*bits){
inti;
8;
if(ch<
0)
bits[i]=1;
else
bits[i]=0;
ch=ch<
1;
charbitstochar(int*bits){
chartemp=0;
if(bits[i]==1)
temp+=table1[7-i];
returntemp;
intcalluj(inta1,inta2,intb1,intb2){
inty=0;
if(a1!
=b1)
y++;
if(a2!
=b2)
return(y);
voidinitpath(){
inttem;
intt_tem[256][5]={0};
inti,j,k,l;
intljtem[256][100];
intpttem[256]={0};
intstaflag[256]={0};
staflag[0]=1;
inta1,a2;
for(l=0;
l<
myn-1;
l++){
for(i=0;
for(j=0;
pthsym;
ljtem[i][j]=path[i][j];
i=0;
a1=myin[2*l];
a2=myin[2*l+1];
if(staflag[j]==1){
tem=calluj(a1,a2,stan0[j][0],stan0[j][1]);
t_tem[i][t_src]=j;
t_tem[i][t_des]=stachn[j][0];
t_tem[i][t_len]=calpath[j]+tem;
t_tem[i][t_in]=0;
tem=calluj(a1,a2,stan1[j][0],stan1[j][1]);
t_tem[i+1][t_src]=j;
t_tem[i+1][t_des]=stachn[j][1];
t_tem[i+1][t_len]=calpath[j]+tem;
t_tem[i+1][t_in]=1;
i=i+2;
k++)
staflag[k]=0;
staflag[t_tem[k][t_des]]=1;
calpath[t_tem[k][t_des]]=t_tem[k][t_len];
path[t_tem[k][t_des]][j]=ljtem[t_tem[k][t_src]][j];
path[t_tem[k][t_des]][pthsym]=t_tem[k][t_in];
pthsym++;
/*cout<
初始化后的路径长度"
for(inti=0;
calpath[i]<
*/
voidselpath(inta1,inta2){//16选8
intt_tem[512][5]={0};
inti,j,tem;
j=0;
2*stalen;
i=i+2){
tem=calluj(a1,a2,stan0[j][0],stan0[j][1]);
t_tem[i][t_src]=j;
t_tem[i][t_des]=stachn[j][0];
t_tem[i][t_len]=calpath[j]+tem;
t_tem[i][t_flag]=0;
t_tem[i][t_in]=0;
//t_tem[i][t_rep]=0;
tem=calluj(a1,a2,stan1[j][0],stan1[j][1]);
t_tem[i+1][t_src]=j;
t_tem[i+1][t_des]=stachn[j][1];
t_tem[i+1][t_len]=calpath[j]+tem;
t_tem[i+1][t_flag]=0;
t_tem[i+1][t_in]=1;
j++;
for(j=i+1;
if(t_tem[i][t_des]==t_tem[j][t_des]){
if(t_tem[i][t_len]<
=t_tem[j][t_len]){
t_tem[i][t_flag]=1;
}
else{
t_tem[j][t_flag]=1;
ljtem[i][j]=path[i][j];
if(t_tem[i][t_flag]==1){
calpath[t_tem[i][t_des]]=t_tem[i][t_len];
path[t_tem[i][t_des]][j]=ljtem[t_tem[i][t_src]][j];
path[t_tem[i][t_des]][pthsym]=t_tem[i][t_in];
if(pthsym>
16)
outfull=1;
pthsym++;
voidwridata(){
inti,j,icout,equcout;
icout=0;
equcout=0;
stalen-1;
if(path[j][i]==path[j+1][i])
equcout++;
if(equcout==stalen-1){
myout[myoutsym++]=path[0][i];
icout++;
equcout=0;
break;
if(icout!
=0){
pthsym-icout;
path[j][i]=path[j][i+icout];
pthsym=pthsym-icout;
outfull=0;
voidwritdataedn(void){
i=0;
for(j=1;
if(calpath[i]>
calpath[j])
i=j;
myout[myoutsym++]=path[i][j];
voidviterbit(){
FILE*fp_input,*fp_output;
if(!
(fp_input=fopen("
r"
))==1){
failedtoopen"
exit(0);
else
weopenedtheoutput_file"
(fp_output=fopen("
w+"
failedtoopenoutput_file"
weopenedthe"
charch;
intcount=0;
charwch;
intwcout=0;
intmybit[8];
ch=fgetc(fp_input);
chartobits(ch,mybit);
myin[i]=mybit[i];
while(feof(fp_input)==0){
ch=fgetc(fp_input);
//cout<
输入"
ch<
/*cout<
输入数据1为"
for(temi=0;
temi<
temi++)
cout<
myin[temi]<
if(count==0){
chartobits(ch,mybit);
for(i=0;
myin[i+8]=mybit[i];
initpath();
for(j=myn-1;
j=j++)
selpath(myin[2*j],myin[2*j+1]);
else{
chartobits(ch,myin);
4;
count++;
if(count==0)
count=1;
//if(outfull==1)
wridata();
if(myoutsym>
=8){
wcout=int(myoutsym/8);
wcout;
for(j=0;
mybit[j]=myout[8*i+j];
wch=bitstochar(mybit);
//cout<
输出为"
wch<
fputc(wch,fp_output);
myoutsym-wcout*8;
myout[i]=myout[wcout*8+i];
myoutsym=myoutsym-wcout*8;
writdataedn();
if(myoutsym>
=3){
8-myoutsym;
myout[myoutsym++]=0;
wch=bitstochar(myout);
fputc(wch,fp_output);
fclose(fp_input);
fclose(fp_output);
inputanyintegertoend"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 译码 程序