00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00038 
00039 #if !defined(__libzplVecLib_HEADER_INCLUDED__)
00040 #define __libzplVecLib_HEADER_INCLUDED__
00041 
00042 
00043 
00044 #ifdef WIN32
00045 typedef float zCOMPLEX;
00046 #define ZCDECL __cdecl
00047 #elif defined(_MACH)
00048 typedef float zCOMPLEX;
00049 #define ZCDECL
00050 #else
00051 #error  "undefined system"
00052 #endif
00053 #if defined (NDEBUG) || (GP_DEBUG == 0)
00054     #define ZASSERT(exp)    ((void)0)
00055 #else
00056     #include <assert.h>
00057     #define ZASSERT(exp)    assert(!(exp))
00058 #endif
00059 
00060 #include "RingBuffer.h"
00061 
00062 
00063 
00071 void zplVecLibDispatcher ();
00072 
00073 
00081 extern float*   (ZCDECL *zplfMalloc)      (int       iNumOfFloats);
00082 
00090 extern void       (ZCDECL *zplfFree)        (float   *&ppfBuffer);
00091 
00100 extern void       (ZCDECL *zplfSetZero)     (float   *pfBuffer, int iLengthAsPowOf4);
00101 
00102 
00113 extern void       (ZCDECL *zplfRealFindMax)   (float    *pfSrc, float    *pfMax, int    *piIdx, int    iLengthAsPowOf4);
00114 
00124 extern void       (ZCDECL *zplfRealAdd_I)   (float   *pfSrcDest, float    *pfSrc, int    iLengthAsPowOf4);
00125 
00135 extern void       (ZCDECL *zplfRealAddC_I)   (float   *pfSrcDest, float    fValue, int    iLengthAsPowOf4);
00136 
00146 extern void       (ZCDECL *zplfRealSub_I)   (float   *pfSrcDest, float    *pfSrc, int    iLengthAsPowOf4);
00147 
00157 extern void       (ZCDECL *zplfRealMul_I)   (float   *pfSrcDest, float    *pfSrc, int    iLengthAsPowOf4);
00158 
00168 extern void       (ZCDECL *zplfRealMulC_I)  (float   *pfSrcDest, float    fScaleFactor, int    iLengthAsPowOf4);
00169 
00179 extern void       (ZCDECL *zplfRealDiv_I)   (float   *pfNomSrcDest, float    *pfDenomSrc, int    iLengthAsPowOf4);
00180 
00191 extern void       (ZCDECL *zplfRealMac_I)   (float   *pfSrcDest, float    *pfSrc1, float   *pfSrc2, int   iLengthAsPowOf4);
00192 
00201 extern void       (ZCDECL *zplfRealAbs_I)   (float   *pfSrcDest, int iLengthAsPowOf4);
00202 
00211 extern float    (ZCDECL *zplfRealSum)   (float   *pfSrc, int iLengthAsPowOf4);
00212 
00213 
00223 extern void       (ZCDECL *zplfCompAdd_I)   (zCOMPLEX   *pfSrcDest, zCOMPLEX    *pfSrc,  int iRealLengthAsPowOf4);
00224 
00234 extern void       (ZCDECL *zplfCompMul_I)   (zCOMPLEX   *pfSrcDest, zCOMPLEX    *pfSrc,  int iRealLengthAsPowOf4);
00235 
00245 extern void       (ZCDECL *zplfCompDiv_I)   (zCOMPLEX   *pfNomSrcDest, zCOMPLEX    *pfDenomSrc, int    iRealLengthAsPowOf4);
00246 
00257 extern void       (ZCDECL *zplfCompMac_I)   (zCOMPLEX   *pfSrcDest, zCOMPLEX    *pfSrc1, float   *pfSrc2, int   iRealLengthAsPowOf4);
00258 
00268 extern void       (ZCDECL *zplfCompAbs)     (float   *pfDest,    zCOMPLEX    *pfSrc1, int iRealLengthAsPowOf4);
00269 
00270 
00271 class CzplfFFT_If
00272 {
00273 public:
00274 
00275     
00277     enum _Fft_Windows_
00278     {
00279         _RECT,      
00280         _HANNING,   
00281         _HAMMING,   
00282         _BLACKMAN,  
00283         _BARTLETT,  
00284         _WELCH      
00285     };
00286 
00287 
00288 
00297     virtual void           zplfFFT         (zCOMPLEX *pfDest, float *pfSrc) = 0;
00298 
00307     virtual void           zplfIFFT        (float *pfDest, zCOMPLEX *pfSrc) = 0;
00308 
00309 
00317     int zplfGetWindow                      (float *pfWindow);
00318 
00319 protected:
00320     int      m_eLastError;
00321 
00322     void       CalculateWindow (_Fft_Windows_ eWindowType);
00323     unsigned int     Log2 (int iValueAsPowOf2);
00324     virtual int      BuildFFTTables () = 0;
00325     virtual void       FreeFFTTables () = 0;
00326 
00327     int        m_iFFTLength,
00328                 m_iBlockLength;
00329 
00330     float    *m_pfWindow;
00331 };
00332 
00333 
00344 extern int       (ZCDECL *zplfFFTCreateInstance)  (CzplfFFT_If*& pCFFT, int iBlockLength, int iZeroPadFactor, CzplfFFT_If::_Fft_Windows_ eWindowType);
00345 
00353 extern int       (ZCDECL *zplfFFTDestroyInstance) (CzplfFFT_If*& pCFFT);
00354 
00355 
00356 extern int        (ZCDECL *zplfZeroCrossings)     (float   *pfSrc, int        iRealLengthAsPowOf4);
00357 
00358 
00359 #endif // #if !defined(__libzplVecLib_HEADER_INCLUDED__)
00360 
00361 
00362