www.pudn.com > hmmPlatform.rar > VQ.h


#ifndef _CVQ_H_ 
#define _CVQ_H_ 
#pragma once 
 
////////////////////////////////////////////////////////////////////////// 
// 采用改进LBG算法,实现输入序列的矢量量化 
//  
// 创建人:		陈文凯 
// 创建日期:	2005-06-07 
// 修改人: 
// 修改日期: 
 
// 默认的最大迭代次数 
#define CVQ_MAX_REPEAT 
// 无穷大 
#define CVQ_MAXIMUN	50000 
 
class CVQ 
{ 
public: 
	CVQ(void); 
	~CVQ(void); 
 
public: 
	//// 采用LGB算法进行VQ 
	//static void LGB( 
	//	const double* pInVector,		// 输入样本序列 
	//	unsigned int nInLen,			// 输入样本序列长度 
	//	const double* pInCodeBook,		// 输入码本,可为空 
	//	double* pOutCodeBook,			// 输出码本 
	//	unsigned int nCodeNums,			// 码本长度 
	//	unsigned int nMaxReapt,			// 最大迭代次数 
	//	double fMinChange,				// 畸变改进阈值 
	//	double fInitDistortion = CVQ_MAXIMUN	//初始畸变 
	//	); 
 
	//// 进行LGB算法迭代,输出总畸变 
	//static double LGBRepeat( 
	//	const double* pInVector,		// 输入样本序列 
	//	unsigned int nInLen,			// 输入样本序列长度 
	//	double* pCodeBook,				// 输入/出码本 
	//	unsigned int nCodeNums			// 码本长度 
	//	); 
 
	// 对输入样本进行简单聚类 
	static void EasyCluster( 
		const double* pInVector,		// 输入样本序列 
		unsigned int nInLen,			// 输入样本序列长度 
		double* pCodeBook,				// 输入/出码本 
		unsigned int nCodeNums			// 码本长度 
		); 
 
	// 实现K均值聚类 
	static void KMeansCluster( 
		const double* pInVector,		// 输入样本序列 
		unsigned int nInLen,			// 输入样本序列长度 
		double* pCodeBook,				// 输出码本 
		unsigned int nCodeNums			// 码本长度 
		); 
 
	// 对输入码本,按照标准码本进行分类 
	static void Classify( 
		const double* pInCodeBook,	// 输入码本 
		unsigned int nInNums,		// 输入码本中码字数量 
		const double* pCodeBook,	// 模板码本 
		unsigned int nCodeNums,		// 模板码本中码字数量 
		unsigned int* pKinds		// 输入码本中的码字对应的模板码本中码字的下标 
		); 
 
	// 计算码本欧式距离 
	static double GetDistance( 
		const double* pCode1, 
		const double* pCode2,  
		unsigned int nCodeNums 
		); 
private: 
	// 实现K均值聚类迭代, 输出总畸变 
	static double KMeansClusterRepeat( 
		const double* pInVector,		// 输入样本序列 
		unsigned int nInLen,			// 输入样本序列长度 
		double* pCodeBook,				// 输入码本 
		unsigned int nCodeNums,			// 码本长度 
		unsigned int* pFlag,			// 用于分类的数组,再KMeansCluster中分配 
		double* pNewCodeBook			// 输出新码本 
		); 
}; 
 
#endif	/*_CVQ_H_*/