VQ.h
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:2k
源码类别:

控制台编程

开发平台:

C/C++

  1. #ifndef _CVQ_H_
  2. #define _CVQ_H_
  3. #pragma once
  4. //////////////////////////////////////////////////////////////////////////
  5. // 采用改进LBG算法,实现输入序列的矢量量化
  6. // 
  7. // 创建人: 陈文凯
  8. // 创建日期: 2005-06-07
  9. // 修改人:
  10. // 修改日期:
  11. // 默认的最大迭代次数
  12. #define CVQ_MAX_REPEAT
  13. // 无穷大
  14. #define CVQ_MAXIMUN 50000
  15. class CVQ
  16. {
  17. public:
  18. CVQ(void);
  19. ~CVQ(void);
  20. public:
  21. //// 采用LGB算法进行VQ
  22. //static void LGB(
  23. // const double* pInVector, // 输入样本序列
  24. // unsigned int nInLen, // 输入样本序列长度
  25. // const double* pInCodeBook, // 输入码本,可为空
  26. // double* pOutCodeBook, // 输出码本
  27. // unsigned int nCodeNums, // 码本长度
  28. // unsigned int nMaxReapt, // 最大迭代次数
  29. // double fMinChange, // 畸变改进阈值
  30. // double fInitDistortion = CVQ_MAXIMUN //初始畸变
  31. // );
  32. //// 进行LGB算法迭代,输出总畸变
  33. //static double LGBRepeat(
  34. // const double* pInVector, // 输入样本序列
  35. // unsigned int nInLen, // 输入样本序列长度
  36. // double* pCodeBook, // 输入/出码本
  37. // unsigned int nCodeNums // 码本长度
  38. // );
  39. // 对输入样本进行简单聚类
  40. static void EasyCluster(
  41. const double* pInVector, // 输入样本序列
  42. unsigned int nInLen, // 输入样本序列长度
  43. double* pCodeBook, // 输入/出码本
  44. unsigned int nCodeNums // 码本长度
  45. );
  46. // 实现K均值聚类
  47. static void KMeansCluster(
  48. const double* pInVector, // 输入样本序列
  49. unsigned int nInLen, // 输入样本序列长度
  50. double* pCodeBook, // 输出码本
  51. unsigned int nCodeNums // 码本长度
  52. );
  53. // 对输入码本,按照标准码本进行分类
  54. static void Classify(
  55. const double* pInCodeBook, // 输入码本
  56. unsigned int nInNums, // 输入码本中码字数量
  57. const double* pCodeBook, // 模板码本
  58. unsigned int nCodeNums, // 模板码本中码字数量
  59. unsigned int* pKinds // 输入码本中的码字对应的模板码本中码字的下标
  60. );
  61. // 计算码本欧式距离
  62. static double GetDistance(
  63. const double* pCode1,
  64. const double* pCode2, 
  65. unsigned int nCodeNums
  66. );
  67. private:
  68. // 实现K均值聚类迭代, 输出总畸变
  69. static double KMeansClusterRepeat(
  70. const double* pInVector, // 输入样本序列
  71. unsigned int nInLen, // 输入样本序列长度
  72. double* pCodeBook, // 输入码本
  73. unsigned int nCodeNums, // 码本长度
  74. unsigned int* pFlag, // 用于分类的数组,再KMeansCluster中分配
  75. double* pNewCodeBook // 输出新码本
  76. );
  77. };
  78. #endif /*_CVQ_H_*/