⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trans.h

📁 软判决功率归一viterbi约束长度9
💻 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 + -