📄 viterbi216.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 + -