📄 decoder.c
字号:
#include<stdio.h>
#include"ctc.h"
void decoder(float code[],int niter,int L1,int decode[])
{
int start_state1=0,start_state2=0;
double L_a[L_total*2],L_e[L_total*2],L_all[L_total*2];
int iter,i;
float rec[2][L_total*3];
// printf("%f %f",code[0],code[1]);
for(i=0;i<L_total;i++){
rec[0][3*i]=code[2*i];
rec[1][3*i]=code[alpha[2*i]-1];
rec[0][3*i+1]=code[2*i+1];
rec[1][3*i+1]=code[alpha[2*i+1]-1];
}
for(i=0;i<L_total;i++){
rec[0][3*i+2]=code[i+L_total*2];
rec[1][3*i+2]=code[i+L_total*3];
}
for(i=0;i<2*L_total;i++){
L_e[i]=0;
L_all[i]=0;
}
for(iter=0;iter<niter;iter++){
//decoder1
for(i=0;i<2*L_total;i++){
L_a[alpha[i]-1]=L_e[i];
}
logmap(rec[0],L_a,iter,0,L1,L_all,&start_state1);
for(i=0;i<L_total;i++){
L_e[2*i]=L_all[2*i]-2*rec[0][3*i]-L_a[2*i];
L_e[2*i+1]=L_all[2*i+1]-2*rec[0][3*i+1]-L_a[2*i+1];
}
//decoder2
for(i=0;i<2*L_total;i++){
L_a[i]=L_e[alpha[i]-1];
}
logmap(rec[1],L_a,iter,0,L1,L_all,&start_state2);
for(i=0;i<L_total;i++){
L_e[2*i]=L_all[2*i]-2*rec[1][3*i]-L_a[2*i];
L_e[2*i+1]=L_all[2*i+1]-2*rec[1][3*i+1]-L_a[2*i+1];
}
}
for(i=0;i<2*L_total;i++){
if(L_all[i]>0){
decode[alpha[i]-1]=1;
}
else{
decode[alpha[i]-1]=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -