📄 viterbi_deconbolution.cpp
字号:
#include <stdlib.h>
#include <math.h>
unsigned int* viterbi(unsigned int* convol_data)
{
unsigned int* deconvol_data;
unsigned int *result_temp1;
unsigned int *result_temp2;
unsigned int code_dis_temp1;
unsigned int code_dis_temp2;
unsigned int deconvol_num=(sizeof(convol_data)/2);
//a前三节点的码距,存入code_dis_a;解码data存入a_f6;
unsigned int a_f6[4000];
unsigned int a_f61[6]={0,0,0,0,0,0};
unsigned int a_f62[6]={1,1,1,0,1,1};
unsigned int code_dis_a;
unsigned int code_dis_a1=0;
unsigned int code_dis_a2=0;
for(int ia=0;ia<6;ia++)
{
if(convol_data[ia]==a_f61[ia])
code_dis_a1+=1;
if(convol_data[ia]==a_f62[ia])
code_dis_a2+=1;
}
if(code_dis_a1>=code_dis_a2)
{
code_dis_a=code_dis_a2;
a_f6[0]=1;
a_f6[1]=0;
a_f6[2]=0;
}
else
{
code_dis_a=code_dis_a1;
a_f6[0]=0;
a_f6[1]=0;
a_f6[2]=0;
}
//b前三节点的码距;
unsigned int b_f6[4000];
unsigned int b_f61[6]={0,0,0,0,1,1};
unsigned int b_f62[6]={1,1,1,0,0,0};
unsigned int code_dis_b;
unsigned int code_dis_b1=0;
unsigned int code_dis_b2=0;
for(int ib=0;ib<6;ib++)
{
if(convol_data[ib]==b_f61[ib])
code_dis_b1+=1;
if(convol_data[ib]==b_f62[ib])
code_dis_b2+=1;
}
if(code_dis_b1>=code_dis_b2)
{
code_dis_b=code_dis_b2;
b_f6[0]=1;
b_f6[1]=0;
b_f6[2]=1;
}
else
{
code_dis_b=code_dis_b1;
b_f6[0]=0;
b_f6[1]=0;
b_f6[2]=1;
}
//c前三节点的码距;
unsigned int c_f6[4000];
unsigned int c_f61[6]={0,0,1,1,1,0};
unsigned int c_f62[6]={1,1,0,1,0,1};
unsigned int code_dis_c;
unsigned int code_dis_c1=0;
unsigned int code_dis_c2=0;
for(int ic=0;ic<6;ic++)
{
if(convol_data[ic]==b_f61[ic])
code_dis_b1+=1;
if(convol_data[ic]==b_f62[ic])
code_dis_c2+=1;
}
if(code_dis_c1>=code_dis_c2)
{
code_dis_c=code_dis_c2;
c_f6[0]=1;
c_f6[1]=1;
c_f6[2]=0;
}
else
{
code_dis_c=code_dis_c1;
c_f6[0]=0;
c_f6[1]=1;
c_f6[2]=0;
}
//d前三节点的码距;
unsigned int d_f6[4000];
unsigned int d_f61[6]={0,0,1,1,0,1};
unsigned int d_f62[6]={1,1,0,1,1,0};
unsigned int code_dis_d;
unsigned int code_dis_d1=0;
unsigned int code_dis_d2=0;
for(int id=0;id<6;id++)
{
if(convol_data[id]==b_f61[id])
code_dis_d1+=1;
if(convol_data[id]==b_f62[id])
code_dis_d2+=1;
}
if(code_dis_d1>=code_dis_d2)
{
code_dis_d=code_dis_d2;
d_f6[0]=1;
d_f6[1]=1;
d_f6[2]=1;
}
else
{
code_dis_d=code_dis_d1;
d_f6[0]=0;
d_f6[1]=1;
d_f6[2]=1;
}
//四节点以后解码处理;
for (unsigned int j=3;j<deconvol_num;j++)
{
//a节点只从上一节点的a,和c走线
unsigned int code_dis_a_a=code_dis_a;
unsigned int code_dis_a_b=code_dis_a;
unsigned int code_dis_b_c=code_dis_b;
unsigned int code_dis_b_d=code_dis_b;
unsigned int code_dis_c_a=code_dis_c;
unsigned int code_dis_c_b=code_dis_c;
unsigned int code_dis_d_c=code_dis_c;
unsigned int code_dis_d_d=code_dis_d;
if(convol_data[j*2]==0)
{
code_dis_c_a+=1;
code_dis_a_b+=1;
code_dis_b_c+=1;
code_dis_d_d+=1;
}
else
{
code_dis_a_a+=1;
code_dis_c_b+=1;
code_dis_d_c+=1;
code_dis_b_d+=1;
}
if(convol_data[j*2+1]==0)
{
code_dis_c_a+=1;
code_dis_a_b+=1;
code_dis_d_c+=1;
code_dis_b_d+=1;
}
else
{
code_dis_a_a+=1;
code_dis_c_b+=1;
code_dis_b_c+=1;
code_dis_d_d+=1;
}
//
if (code_dis_a_a>=code_dis_c_a)
{
code_dis_a=code_dis_c_a;
a_f6[j]=0;
}
else
{
code_dis_a=code_dis_a_a;
a_f6[j]=0;
}
//
if (code_dis_a_b>=code_dis_c_b)
{
code_dis_b=code_dis_c_b;
b_f6[j]=1;
}
else
{
code_dis_b=code_dis_a_b;
b_f6[j]=1;
}
//
if (code_dis_b_c>=code_dis_d_c)
{
code_dis_c=code_dis_d_c;
c_f6[j]=0;
}
else
{
code_dis_c=code_dis_b_c;
c_f6[j]=0;
}
//
if (code_dis_b_d>=code_dis_d_d)
{
code_dis_d=code_dis_d_d;
d_f6[j]=1;
}
else
{
code_dis_d=code_dis_b_d;
d_f6[j]=1;
}
}
if (code_dis_a>=code_dis_b)
{
result_temp1=b_f6;
code_dis_temp1=code_dis_b;
}
else
{
result_temp1=a_f6;
code_dis_temp1=code_dis_a;
}
//
if (code_dis_c>=code_dis_d)
{
result_temp2=d_f6;
code_dis_temp2=code_dis_d;
}
else
{
result_temp2=c_f6;
code_dis_temp2=code_dis_c;
}
if (code_dis_temp1>=code_dis_temp2)
deconvol_data=result_temp2;
else deconvol_data=result_temp1;
return deconvol_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -