📄 parallel decoder.cpp
字号:
/**********************************************************************************************
*This programme is decoder of fire code of (42,33). *
*Decoding method consult to the paper "Parallel Decoding Cyclic Brust Error Correcting Codes".*
*generate ploy is g(x)=(1+x^6)(1+x+x^3). *
***********************************************************************************************/
#include<iostream.h>
void main()
{
/*******************************************************************
The fuction of this part is calculating canpainion polynomial s(x).
********************************************************************/
//received data
//int signal_in[42]={1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0};
//int signal_in[42]={1,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,0,1,1,0};
int signal_in[42]={1,0,1,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,1,0,1,0,0,0,1,1,0,1,1,1};
int now_state[9]={0};//the now state of register
int next_state[9]={0};//the next state of register
int cycle,var_i;//cycle is period of inputing data
cycle=0;
while(cycle<1)
{
next_state[0]=now_state[0]^signal_in[34]^signal_in[30]^signal_in[35]^signal_in[39]^signal_in[28]^signal_in[8]^signal_in[33]^signal_in[9]^signal_in[10]^signal_in[41]^signal_in[37]^signal_in[12]^signal_in[25]^signal_in[14]^signal_in[29]^signal_in[17]^signal_in[18]^signal_in[19]^signal_in[38]^signal_in[20]^signal_in[22];
next_state[1]=signal_in[24]^now_state[1]^signal_in[30]^signal_in[35]^signal_in[27]^signal_in[39]^signal_in[7]^signal_in[32]^signal_in[40]^signal_in[10]^signal_in[41]^signal_in[11]^signal_in[12]^signal_in[25]^signal_in[13]^signal_in[14]^signal_in[16]^signal_in[20]^signal_in[21]^signal_in[36]^signal_in[22];
next_state[2]=signal_in[24]^now_state[2]^signal_in[23]^signal_in[34]^signal_in[35]^signal_in[31]^signal_in[39]^signal_in[6]^signal_in[40]^signal_in[9]^signal_in[10]^signal_in[11]^signal_in[12]^signal_in[13]^signal_in[15]^signal_in[29]^signal_in[19]^signal_in[38]^signal_in[20]^signal_in[21]^signal_in[26];
next_state[3]=now_state[3]^signal_in[23]^signal_in[35]^signal_in[5]^signal_in[41]^signal_in[11]^signal_in[29]^signal_in[17];
next_state[4]=now_state[4]^signal_in[34]^signal_in[4]^signal_in[28]^signal_in[40]^signal_in[10]^signal_in[16]^signal_in[22];
next_state[5]=now_state[5]^signal_in[3]^signal_in[27]^signal_in[39]^signal_in[33]^signal_in[9]^signal_in[15]^signal_in[21];
next_state[6]=now_state[6]^signal_in[34]^signal_in[30]^signal_in[35]^signal_in[2]^signal_in[39]^signal_in[32]^signal_in[28]^signal_in[33]^signal_in[9]^signal_in[10]^signal_in[41]^signal_in[37]^signal_in[12]^signal_in[25]^signal_in[29]^signal_in[17]^signal_in[18]^signal_in[19]^signal_in[22]^signal_in[26];
next_state[7]=signal_in[24]^now_state[7]^signal_in[30]^signal_in[1]^signal_in[35]^signal_in[27]^signal_in[31]^signal_in[39]^signal_in[32]^signal_in[40]^signal_in[10]^signal_in[41]^signal_in[11]^signal_in[37]^signal_in[12]^signal_in[14]^signal_in[16]^signal_in[19]^signal_in[20]^signal_in[21]^signal_in[36]^signal_in[22];
next_state[8]=now_state[8]^signal_in[23]^signal_in[0]^signal_in[34]^signal_in[30]^signal_in[35]^signal_in[31]^signal_in[39]^signal_in[40]^signal_in[9]^signal_in[10]^signal_in[11]^signal_in[13]^signal_in[15]^signal_in[29]^signal_in[18]^signal_in[19]^signal_in[38]^signal_in[20]^signal_in[21]^signal_in[36]^signal_in[26];
for(var_i=0;var_i<9;var_i++)
{
now_state[var_i]=next_state[var_i];
}
cout<<endl<<"The input data is:"<<endl;
for(var_i=0;var_i<42;var_i++)
{
cout<<signal_in[var_i]<<" ";
}
cycle+=1;
}
cout<<endl<<"The syndromes bits is:"<<endl;
for(var_i=0;var_i<9;var_i++)
{
cout<<now_state[var_i]<<" ";
}
/*********************************************************
In this part, we will calculate the error mode in parellel
**********************************************************/
int syndromes[9];
//int syndromes[9]={0,1,1,0,1,1,1,1,1};
int e[6][9];
int var_j;
for(var_j=0;var_j<9;var_j++)
{
syndromes[var_j]=now_state[var_j];
}
//calculate the first frame error mode e0=T^42*s=T^0*s
e[0][0]=syndromes[0];
e[0][1]=syndromes[1];
e[0][2]=syndromes[2];
e[0][3]=syndromes[3];
e[0][4]=syndromes[4];
e[0][5]=syndromes[5];
e[0][6]=syndromes[6];
e[0][7]=syndromes[7];
e[0][8]=syndromes[8];
cout<<endl<<"e[0] is:";
for(var_j=0;var_j<9;var_j++)
{
cout<<e[0][var_j]<<" ";
}
//calculate the first frame error mode e1=T^35*s
e[1][0]=syndromes[1]^syndromes[3]^syndromes[5]^syndromes[6]^syndromes[7];
e[1][1]=syndromes[1]^syndromes[2]^syndromes[3]^syndromes[4]^syndromes[5]^syndromes[8];
e[1][2]=syndromes[0]^syndromes[2]^syndromes[3]^syndromes[4]^syndromes[5]^syndromes[6];
e[1][3]=syndromes[4];
e[1][4]=syndromes[5];
e[1][5]=syndromes[0]^syndromes[6];
e[1][6]=syndromes[3]^syndromes[5]^syndromes[6];
e[1][7]=syndromes[1]^syndromes[3]^syndromes[4]^syndromes[5];
e[1][8]=syndromes[0]^syndromes[2]^syndromes[4]^syndromes[5]^syndromes[6];
cout<<endl<<"e[1] is:";
for(var_j=0;var_j<9;var_j++)
{
cout<<e[1][var_j]<<" ";
}
//calculate the first frame error mode e2=T^28*s
e[2][0]=syndromes[0]^syndromes[2]^syndromes[3]^syndromes[4]^syndromes[5]^syndromes[8];
e[2][1]=syndromes[0]^syndromes[1]^syndromes[2]^syndromes[6]^syndromes[8];
e[2][2]=syndromes[1]^syndromes[2]^syndromes[3]^syndromes[7];
e[2][3]=syndromes[5];
e[2][4]=syndromes[0]^syndromes[6];
e[2][5]=syndromes[1]^syndromes[7];
e[2][6]=syndromes[0]^syndromes[3]^syndromes[4]^syndromes[5];
e[2][7]=syndromes[0]^syndromes[1]^syndromes[2]^syndromes[3]^syndromes[6]^syndromes[8];
e[2][8]=syndromes[1]^syndromes[2]^syndromes[3]^syndromes[4]^syndromes[7];
cout<<endl<<"e[2] is:";
for(var_j=0;var_j<9;var_j++)
{
cout<<e[2][var_j]<<" ";
}
//calculate the first frame error mode e3=T^21*s
e[3][0]=syndromes[0]^syndromes[1]^syndromes[4]^syndromes[7];
e[3][1]=syndromes[2]^syndromes[4]^syndromes[5]^syndromes[7]^syndromes[8];
e[3][2]=syndromes[0]^syndromes[3]^syndromes[5]^syndromes[6]^syndromes[8];
e[3][3]=syndromes[0]^syndromes[6];
e[3][4]=syndromes[1]^syndromes[7];
e[3][5]=syndromes[2]^syndromes[8];
e[3][6]=syndromes[0]^syndromes[1]^syndromes[3]^syndromes[4]^syndromes[7];
e[3][7]=syndromes[2]^syndromes[5]^syndromes[7]^syndromes[8];
e[3][8]=syndromes[0]^syndromes[3]^syndromes[6]^syndromes[8];
cout<<endl<<"e[3] is:";
for(var_j=0;var_j<9;var_j++)
{
cout<<e[3][var_j]<<" ";
}
//calculate the first frame error mode e4=T^14*s
e[4][0]=syndromes[1]^syndromes[2]^syndromes[3]^syndromes[6]^syndromes[7]^syndromes[8];
e[4][1]=syndromes[0]^syndromes[1]^syndromes[4]^syndromes[6];
e[4][2]=syndromes[1]^syndromes[2]^syndromes[5]^syndromes[7];
e[4][3]=syndromes[1]^syndromes[7];
e[4][4]=syndromes[2]^syndromes[8];
e[4][5]=syndromes[3];
e[4][6]=syndromes[1]^syndromes[2]^syndromes[3]^syndromes[4]^syndromes[6]^syndromes[7]^syndromes[8];
e[4][7]=syndromes[0]^syndromes[1]^syndromes[4]^syndromes[5]^syndromes[6];
e[4][8]=syndromes[0]^syndromes[1]^syndromes[2]^syndromes[5]^syndromes[6]^syndromes[7];
cout<<endl<<"e[4] is:";
for(var_j=0;var_j<9;var_j++)
{
cout<<e[4][var_j]<<" ";
}
//calculate the first frame error mode e5=T^7*s
e[5][0]=syndromes[2]^syndromes[4]^syndromes[5]^syndromes[6]^syndromes[8];
e[5][1]=syndromes[2]^syndromes[3]^syndromes[4]^syndromes[7]^syndromes[8];
e[5][2]=syndromes[3]^syndromes[4]^syndromes[5]^syndromes[8];
e[5][3]=syndromes[2]^syndromes[8];
e[5][4]=syndromes[3];
e[5][5]=syndromes[4];
e[5][6]=syndromes[2]^syndromes[4]^syndromes[6]^syndromes[8];
e[5][7]=syndromes[0]^syndromes[2]^syndromes[3]^syndromes[4]^syndromes[6]^syndromes[7]^syndromes[8];
e[5][8]=syndromes[1]^syndromes[3]^syndromes[4]^syndromes[5]^syndromes[7]^syndromes[8];
cout<<endl<<"e[5] is:";
for(var_j=0;var_j<9;var_j++)
{
cout<<e[5][var_j]<<" ";
}
/*****************************************************************************************
In this part, we will check whether the error mode is valid.
If error_valid[n]=1 means error mode is valid, nonethless, it means error mode is invalid.
******************************************************************************************/
int error_valid[6]={0};
//check if the error mode of e0 is valid
for(var_i=0;var_i<9;var_i++)
{
if(e[0][var_i]==1)
{
if(var_i<6)
{
for(var_j=var_i+3;var_j<9;var_j++)
{
if(var_j!=8 && e[0][var_j]==1) {error_valid[0]=0; break;}
else if(var_j==8 && e[0][var_j]==0) {error_valid[0]=1;}
else if(var_j==8 && e[0][var_j]!=0) {error_valid[0]=0;}
}
}
else if(var_i==6)
error_valid[0]=1;
else
error_valid[0]=0;
break;
}
else if(var_i==8)
error_valid[0]=0;
}
cout<<endl<<"Error_valid[0] is:"<<error_valid[0];
//check if the error mode of e1 is valid
for(var_i=0;var_i<9;var_i++)
{
if(e[1][var_i]==1)
{
if(var_i<6)
{
for(var_j=var_i+3;var_j<9;var_j++)
{
if(var_j!=8 && e[1][var_j]==1) {error_valid[1]=0; break;}
else if(var_j==8 && e[1][var_j]==0) {error_valid[1]=1;}
else if(var_j==8 && e[1][var_j]!=0) {error_valid[1]=0;}
}
}
else if(var_i==6)
error_valid[1]=1;
else
error_valid[1]=0;
break;
}
else if(var_i==8)
error_valid[1]=0;
}
cout<<endl<<"Error_valid[1] is:"<<error_valid[1];
//check if the error mode of e2 is valid
for(var_i=0;var_i<9;var_i++)
{
if(e[2][var_i]==1)
{
if(var_i<6)
{
for(var_j=var_i+3;var_j<9;var_j++)
{
if(var_j!=8 && e[2][var_j]==1) {error_valid[2]=0; break;}
else if(var_j==8 && e[2][var_j]==0) {error_valid[2]=1;}
else if(var_j==8 && e[2][var_j]!=0) {error_valid[2]=0;}
}
}
else if(var_i==6)
error_valid[2]=1;
else
error_valid[2]=0;
break;
}
else if(var_i==8)
error_valid[2]=0;
}
cout<<endl<<"Error_valid[2] is:"<<error_valid[2];
//check if the error mode of e3 is valid
for(var_i=0;var_i<9;var_i++)
{
if(e[3][var_i]==1)
{
if(var_i<6)
{
for(var_j=var_i+3;var_j<9;var_j++)
{
if(var_j!=8 && e[3][var_j]==1) {error_valid[3]=0; break;}
else if(var_j==8 && e[3][var_j]==0) {error_valid[3]=1;}
else if(var_j==8 && e[3][var_j]!=0) {error_valid[3]=0;}
}
}
else if(var_i==6)
error_valid[3]=1;
else
error_valid[3]=0;
break;
}
else if(var_i==8)
error_valid[3]=0;
}
cout<<endl<<"Error_valid[3] is:"<<error_valid[3];
//check if the error mode of e4 is valid
for(var_i=0;var_i<9;var_i++)
{
if(e[4][var_i]==1)
{
if(var_i<6)
{
for(var_j=var_i+3;var_j<9;var_j++)
{
if(var_j!=8 && e[4][var_j]==1) {error_valid[4]=0; break;}
else if(var_j==8 && e[4][var_j]==0) {error_valid[4]=1;}
else if(var_j==8 && e[4][var_j]!=0) {error_valid[4]=0;}
}
}
else if(var_i==6)
error_valid[4]=1;
else
error_valid[4]=0;
break;
}
else if(var_i==8)
error_valid[4]=0;
}
cout<<endl<<"Error_valid[4] is:"<<error_valid[4];
//check if the error mode of e5 is valid
for(var_i=0;var_i<9;var_i++)
{
if(e[5][var_i]==1)
{
if(var_i<6)
{
for(var_j=var_i+3;var_j<9;var_j++)
{
if(var_j!=8 && e[5][var_j]==1) {error_valid[5]=0; break;}
else if(var_j==8 && e[5][var_j]==0) {error_valid[5]=1;}
else if(var_j==8 && e[5][var_j]!=0) {error_valid[5]=0;}
}
}
else if(var_i==6)
error_valid[5]=1;
else
error_valid[5]=0;
break;
}
else if(var_i==8)
error_valid[5]=0;
}
cout<<endl<<"Error_valid[5] is:"<<error_valid[5];
/*********************************************************************
In this part, we will correct the error part in receiving codes though
the value of the error_valid[n].
**********************************************************************/
int frame_j;
int correct_codes[42];
for(var_i=0;var_i<42;var_i++)
{
correct_codes[var_i]=signal_in[var_i];
}
for(frame_j=0;frame_j<6;frame_j++)
{
if(error_valid[frame_j]==1)
for(var_j=0;var_j<9;var_j++)
{
//If the jth frame has error, then add the jth error mode to the jth frame of receive codes.
correct_codes[7*frame_j+var_j]=correct_codes[7*frame_j+var_j]^e[frame_j][var_j];
}
}
cout<<endl<<"The output data is:"<<endl;
for(var_i=0;var_i<42;var_i++)
cout<<correct_codes[var_i]<<" ";
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -