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

📄 viterbi216.h

📁 viterbi 编译码器C源程序
💻 H
字号:
//文件名:Viterbi216.h
//作 用:对1/2码率,N=7的卷积码进行维特比译码(硬判决)
//作 者:蒋岩
//时 间:2005.7.25
//版 本:VC--1.0
//说 明:
/*(n0,k0,m)卷积码的字母定义:
*n0——每个时刻编码器输出码元个数
*k0——每个时刻编码器输入信息元个数
*m——输入的信息组在编码器中的存储的单位时间
*N=m+1——编码约束度,编码过程中相互约束的子码个数
*df=10——自由距离,由卷积码的生成多项式决定
*维特比译码输出信息元误码率算法
*Pme=2^df * Pe^(df/2)——(Pe为信道的误码率)
*例:Pe=10^-2,则Pme=10^-7
*/

//---------------------------------------------------------------------------
#ifndef VITERBI_216_H
#define VITERBI_216_H

#define  G1  0x6d  //G1 = 1101101
#define  G2  0x4f  //G2 = 1001111

int WeightInt(int);
class CViterbi_216
{
public:
	int Decode_States;  //状态数 2^m*k0
	int Branch_Num;    //从一个状态延伸的分支数 n0
	int Path_Length;  //路径保留长度 5*m < L < 10*m
	int Path_Num;    //保存幸存路径个数
	int Init_Num;    //幸存路径预装载个数,Init_Num 的计算方法如下 2^Init_Num = Path_Num
	int First_Use;    //是否第一次处理缓存的标志

	//-----分支缓存定义-----
	//Branch_Tab[Decode_States][Branch_Num]
	//移位寄存器在各个状态下输入“0”或“1”对应的输出结果表
	unsigned char Branch_Tab[64][2];

	//-----幸存路径结构定义-----
	//同时也是距离寄存器和信息序列寄存器
	struct Survivor {
		int Sum_d;//幸存路径的累积距离
		unsigned int H_m32;//幸存路径的信息存储变量,高32比特
		unsigned int L_m32;//幸存路径的信息存储变量,低32比特
	};
	Survivor Survivor_Save[64];
	//保存幸存路径的结构缓存(结构缓存个数 = Path_Num)
	Survivor Survivor_Temp[128];
	//临时幸存路径的结构缓存(结构缓存个数 = Path_Num * Branch_Num)
public:
	CViterbi_216();
	virtual ~CViterbi_216();
	void Initial(void);
	int Encode_216(unsigned char * InBuf, int InLength, unsigned char * OutBuf, int Now_State);
	//编码正确返回编码后移位寄存器的状态;编码出错则返回0xff;
	int  Viterbi216(unsigned char * InBuf, int InLength, unsigned char * OutBuf, int Star_Mode);
	//Star_Mode 表示启动该函数的方式,
	//Star_Mode == 0 表示处理非连续卷积码编码数据
	//Star_Mode == 1 表示处理连续卷积码编码数据
};
//---------------------------------------------------------------------------
#endif




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -