Main Page | Namespace List | Class Hierarchy | Class List | Directories | File List | Namespace Members | Class Members

vq.h

00001 // Copyright (C) 1999 Jean-Marc Valin
00002 
00003 #ifndef VQ_H
00004 #define VQ_H
00005 
00006 //#include "kmeans.h"
00007 #include "Object.h"
00008 #include <vector>
00009 
00010 namespace FD {
00011 
00013 class VQ : public Object {
00014   protected:
00015    float (*dist)(const float *, const float*, int);
00016    int length;
00017   public:
00018    static float euclidian (const float *x, const float *y, int len)
00019    {
00020       float sum1=0,sum2=0,sum3=0,sum4=0;
00021       const float *end = x+len;
00022       while (x<end-3)
00023       {
00024          sum1 += (*x-*y)*(*x-*y);
00025          x++; y++;
00026          sum2 += (*x-*y)*(*x-*y);
00027          x++; y++;
00028          sum3 += (*x-*y)*(*x-*y);
00029          x++; y++;
00030          sum4 += (*x-*y)*(*x-*y);
00031          x++; y++;
00032       }
00033        while (x<end)
00034        {
00035          sum1 += (*x-*y)*(*x-*y);
00036          x++; y++;
00037        }
00038       return (sum1+sum2)+(sum3+sum4);
00039    }
00040 
00041   public:
00042    VQ(float (*_dist)(const float *, const float*, int) = euclidian)
00043       : dist(_dist)
00044       {}
00045 
00046    virtual ~VQ() {}
00047 
00048    virtual int nbClasses() const = 0;
00049 
00050    //virtual const std::vector<float> &operator[] (int i) const = 0;
00051 
00052    virtual int getClassID (const float *v, float *dist_return = NULL) const = 0;
00053    
00054    //virtual void calcDist (const float *v, float *dist_return) const = 0;
00055 
00056    virtual void printOn(std::ostream &out=std::cout) const = 0;
00057    virtual void readFrom (std::istream &in=std::cin) = 0;
00058 };
00059 
00060 }//namespace FD
00061 
00062 #endif

Generated on Wed Oct 5 14:28:56 2005 for FlowDesigner by  doxygen 1.4.4