语音特征参数分析平台(六) 矢量量化
四、矢量量化:
这里讨论的是K-means聚类,取码本的容量为4。
1、CVQ类的功能:
1)进行K-means聚类
2)计算两个码本的欧式距离
2、CVQ类的设计
这里讨论的是K-means聚类,取码本的容量为4。
1、CVQ类的功能:
1)进行K-means聚类
2)计算两个码本的欧式距离
2、CVQ类的设计
1 //////////////////////////////////////////////////////////////////////////
2 // 采用改进LBG算法,实现输入序列的矢量量化
3 //
4 // 创建人: 陈文凯
5 // 创建日期: 2005-06-07
6 // 修改人:
7 // 修改日期:
8
9 // 默认的最大迭代次数
10 #define CVQ_MAX_REPEAT
11 // 无穷大
12 #define CVQ_MAXIMUN 50000
13
14 class CVQ
15 {
16 public:
17 CVQ(void);
18 ~CVQ(void);
19
20 public:
21 // 对输入样本进行简单聚类
22 static void EasyCluster(
23 const double* pInVector, // 输入样本序列
24 unsigned int nInLen, // 输入样本序列长度
25 double* pCodeBook, // 输入/出码本
26 unsigned int nCodeNums // 码本长度
27 );
28
29 // 实现K均值聚类
30 static void KMeansCluster(
31 const double* pInVector, // 输入样本序列
32 unsigned int nInLen, // 输入样本序列长度
33 double* pCodeBook, // 输出码本
34 unsigned int nCodeNums // 码本长度
35 );
36
37 // 对输入码本,按照标准码本进行分类
38 static void Classify(
39 const double* pInCodeBook, // 输入码本
40 unsigned int nInNums, // 输入码本中码字数量
41 const double* pCodeBook, // 模板码本
42 unsigned int nCodeNums, // 模板码本中码字数量
43 unsigned int* pKinds // 输入码本中的码字对应的模板码本中码字的下标
44 );
45
46 // 计算码本欧式距离
47 static double GetDistance(
48 const double* pCode1,
49 const double* pCode2,
50 unsigned int nCodeNums
51 );
52 private:
53 // 实现K均值聚类迭代, 输出总畸变
54 static double KMeansClusterRepeat(
55 const double* pInVector, // 输入样本序列
56 unsigned int nInLen, // 输入样本序列长度
57 double* pCodeBook, // 输入码本
58 unsigned int nCodeNums, // 码本长度
59 unsigned int* pFlag, // 用于分类的数组,再KMeansCluster中分配
60 double* pNewCodeBook // 输出新码本
61 );
62 };
2 // 采用改进LBG算法,实现输入序列的矢量量化
3 //
4 // 创建人: 陈文凯
5 // 创建日期: 2005-06-07
6 // 修改人:
7 // 修改日期:
8
9 // 默认的最大迭代次数
10 #define CVQ_MAX_REPEAT
11 // 无穷大
12 #define CVQ_MAXIMUN 50000
13
14 class CVQ
15 {
16 public:
17 CVQ(void);
18 ~CVQ(void);
19
20 public:
21 // 对输入样本进行简单聚类
22 static void EasyCluster(
23 const double* pInVector, // 输入样本序列
24 unsigned int nInLen, // 输入样本序列长度
25 double* pCodeBook, // 输入/出码本
26 unsigned int nCodeNums // 码本长度
27 );
28
29 // 实现K均值聚类
30 static void KMeansCluster(
31 const double* pInVector, // 输入样本序列
32 unsigned int nInLen, // 输入样本序列长度
33 double* pCodeBook, // 输出码本
34 unsigned int nCodeNums // 码本长度
35 );
36
37 // 对输入码本,按照标准码本进行分类
38 static void Classify(
39 const double* pInCodeBook, // 输入码本
40 unsigned int nInNums, // 输入码本中码字数量
41 const double* pCodeBook, // 模板码本
42 unsigned int nCodeNums, // 模板码本中码字数量
43 unsigned int* pKinds // 输入码本中的码字对应的模板码本中码字的下标
44 );
45
46 // 计算码本欧式距离
47 static double GetDistance(
48 const double* pCode1,
49 const double* pCode2,
50 unsigned int nCodeNums
51 );
52 private:
53 // 实现K均值聚类迭代, 输出总畸变
54 static double KMeansClusterRepeat(
55 const double* pInVector, // 输入样本序列
56 unsigned int nInLen, // 输入样本序列长度
57 double* pCodeBook, // 输入码本
58 unsigned int nCodeNums, // 码本长度
59 unsigned int* pFlag, // 用于分类的数组,再KMeansCluster中分配
60 double* pNewCodeBook // 输出新码本
61 );
62 };
All the posts in this blog are provided "AS IS" with no warranties, and confer no rights. Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 2.5 China Mainland License.
浙公网安备 33010602011771号