📄 trans.h
字号:
/*
* viterbi译码9约束长度软判决 功率归一化
*
************************************************************************************************
* MODULE NAME: trans.h
*************************************************************************************************
* DESCRIPTION 产生256状态的网格图
* FUNCTION init_trans()产生256状态的网格图
*
*************************************************************************************************
*/
#include "conv_encode.h"
struct state
{unsigned last1; //前一步一号状态
unsigned last2; //前一步二号状态
unsigned last1_out_bit0; //前一步一号状态转移过来产生的2bit输出
unsigned last1_out_bit1;
unsigned last2_out_bit0; //前一步二号状态转移过来产生的2bit输出
unsigned last2_out_bit1;
};
state trans[256];
//产生256状态的网格图
void init_trans()
{ unsigned reg[9];
int i,j;
for(i=0;i<256;i++) //计算每个状态的前一步2个状态
{
if (i<=127)
{ trans[i].last1=2*i;
trans[i].last2=2*i+1;
}
else
{ trans[i].last1=2*i-256;
trans[i].last2=2*i-255;
}
}
for(i=0;i<256;i++)
{
for(j=0;j<9;j++)
reg[j]=0;
if (i<=127) reg[0]=0; //状态0—127 由输入信息位0转化来
else reg[0]=1; //状态128—255 由输入信息位1转化来
//寄存器首位是输入比特
//前一步一号状态转移过来产生的2bit输出
reg[1]=(trans[i].last1>>7)&0x01; //寄存器1—8位是上一状态编号
reg[2]=(trans[i].last1>>6)&0x01;
reg[3]=(trans[i].last1>>5)&0x01;
reg[4]=(trans[i].last1>>4)&0x01;
reg[5]=(trans[i].last1>>3)&0x01;
reg[6]=(trans[i].last1>>2)&0x01;
reg[7]=(trans[i].last1>>1)&0x01;
reg[8]=(trans[i].last1)&0x01; //由寄存器生成输出
trans[i].last1_out_bit0=(reg[0]+reg[2]+reg[3]+reg[4]+reg[8])%2;
trans[i].last1_out_bit1=(reg[0]+reg[1]+reg[2]+reg[3]+reg[5]+reg[7]+reg[8])%2;
//计算前一步二号状态转移过来产生的2bit输出
reg[1]=(trans[i].last2>>7)&0x01;//寄存器1—8位是上一状态编号
reg[2]=(trans[i].last2>>6)&0x01;
reg[3]=(trans[i].last2>>5)&0x01;
reg[4]=(trans[i].last2>>4)&0x01;
reg[5]=(trans[i].last2>>3)&0x01;
reg[6]=(trans[i].last2>>2)&0x01;
reg[7]=(trans[i].last2>>1)&0x01;
reg[8]=(trans[i].last2)&0x01;//由寄存器生成输出
trans[i].last2_out_bit0=(reg[0]+reg[2]+reg[3]+reg[4]+reg[8])%2;
trans[i].last2_out_bit1=(reg[0]+reg[1]+reg[2]+reg[3]+reg[5]+reg[7]+reg[8])%2;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -