IT++ Logo
vq.h
Go to the documentation of this file.
1 
29 #ifndef VQ_H
30 #define VQ_H
31 
32 #include <itpp/base/vec.h>
33 #include <itpp/base/sort.h>
34 #include <itpp/base/math/log_exp.h>
35 #include <itpp/itexports.h>
36 
37 namespace itpp
38 {
39 
62 class ITPP_EXPORT Vector_Quantizer
63 {
64 public:
68  Vector_Quantizer(const char *Name);
70  int encode(const vec &x);
72  ivec encode(const vec &x, int num);
74  vec decode(int Index) const;
76  Array<vec> decode(const ivec &Index) const;
78  vec Q(const vec &x);
80  vec operator()(const vec &x);
82  void set_codebook(const mat &CB);
84  mat get_codebook() const;
86  void set_codevector(int Index, const vec &indata);
88  vec get_codevector(int Index) const;
90  void modify_codevector(int no, double mul, const vec &add);
92  int size() const;
94  int dim() const;
96  int nobits() const;
103  void load(const char *Name);
110  void save(const char *Name) const;
112  double latest_distortion();
113 protected:
115  vec CodeBook;
117  int Size;
119  int Dim;
121  double LatestDist;
122 };
123 
124 // INLINE FUNCTIONS
125 
126 inline int Vector_Quantizer::size() const { return Size; }
127 inline int Vector_Quantizer::nobits() const { return levels2bits(Size); }
128 inline int Vector_Quantizer::dim() const { return Dim; }
130 inline vec Vector_Quantizer::decode(int Index) const { return get_codevector(Index); }
131 inline vec Vector_Quantizer::Q(const vec &x) { return decode(encode(x)); }
132 inline vec Vector_Quantizer::operator()(const vec &x) { return Q(x); }
133 
152 class ITPP_EXPORT Scalar_Quantizer
153 {
154 public:
158  Scalar_Quantizer(const char *Name);
160  int encode(double x) const;
162  ivec encode(const vec &x) const;
164  double decode(int Index) const;
166  vec decode(const ivec &Index) const;
168  double Q(double x) const;
170  vec Q(const vec &x) const;
172  double operator()(double x) const;
174  vec operator()(const vec &x) const;
176  void set_levels(const vec &L);
178  vec get_levels() const;
180  int size() const;
181 protected:
183  vec Levels;
185  double LatestDist;
186 };
187 
188 inline int Scalar_Quantizer::size() const { return Levels.length(); }
189 inline double Scalar_Quantizer::decode(int Index) const { return Levels(Index); }
190 inline double Scalar_Quantizer::Q(double x) const { return decode(encode(x)); }
191 inline double Scalar_Quantizer::operator()(double x) const { return Q(x); }
192 inline vec Scalar_Quantizer::operator()(const vec &x) const { return Q(x); }
193 inline void Scalar_Quantizer::set_levels(const vec &L) {Levels = L;sort(Levels); }
194 inline vec Scalar_Quantizer::get_levels() const {return Levels; }
195 
197 ITPP_EXPORT int scalar_encode(double x, vec &Levels) ;
199 ITPP_EXPORT ivec scalar_encode(vec &x, vec &Levels);
201 inline double scalar_quantize(double x, vec &Levels) { return Levels(scalar_encode(x, Levels)); }
203 inline vec scalar_quantize(vec &x, vec &Levels) { return Levels(scalar_encode(x, Levels)); }
204 
205 
206 } // namespace itpp
207 
208 #endif // #ifndef VQ_H
SourceForge Logo

Generated on Sat Jul 6 2013 10:54:25 for IT++ by Doxygen 1.8.2