kiss_fft.h
上传用户:ozl2332
上传日期:2009-12-28
资源大小:38k
文件大小:2k
源码类别:

语音压缩

开发平台:

C/C++

  1. #ifndef KISS_FFT_H
  2. #define KISS_FFT_H
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <math.h>
  6. #include <memory.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /*
  11.  ATTENTION!
  12.  If you would like a :
  13.  -- a utility that will handle the caching of fft objects
  14.  -- real-only FFT
  15.  -- a multi-dimensional FFT
  16.  -- a command-line utility to perform ffts
  17.  -- a command-line utility to perform fast-convolution filtering
  18.  then see tools/
  19.  */
  20. #ifdef FIXED_POINT
  21. # define kiss_fft_scalar short
  22. #else
  23. # ifndef kiss_fft_scalar
  24. /*  default is float */
  25. #   define kiss_fft_scalar float
  26. # endif
  27. #endif
  28. typedef struct {
  29.     kiss_fft_scalar r;
  30.     kiss_fft_scalar i;
  31. }kiss_fft_cpx;
  32. typedef struct kiss_fft_state* kiss_fft_cfg;
  33. /* 
  34.  *  kiss_fft_alloc
  35.  *  
  36.  *  Initialize a FFT (or IFFT) algorithm's cfg/state buffer.
  37.  *
  38.  *  typical usage:      kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL);
  39.  *
  40.  *  The return value from fft_alloc is a cfg buffer used internally
  41.  *  by the fft routine or NULL.
  42.  *
  43.  *  If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc.
  44.  *  The returned value should be free()d when done to avoid memory leaks.
  45.  *  
  46.  *  The state can be placed in a user supplied buffer 'mem':
  47.  *  If lenmem is not NULL and mem is not NULL and *lenmem is large enough,
  48.  *      then the function places the cfg in mem and the size used in *lenmem
  49.  *      and returns mem.
  50.  *  
  51.  *  If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough),
  52.  *      then the function returns NULL and places the minimum cfg 
  53.  *      buffer size in *lenmem.
  54.  * */
  55. kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); 
  56. /*
  57.  * kiss_fft(cfg,in_out_buf)
  58.  *
  59.  * Perform an FFT on a complex input buffer.
  60.  * for a forward FFT,
  61.  * fin should be  f[0] , f[1] , ... ,f[nfft-1]
  62.  * fout will be   F[0] , F[1] , ... ,F[nfft-1]
  63.  * Note that each element is complex and can be accessed like
  64.     f[k].r and f[k].i
  65.  * */
  66. void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout);
  67. void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride);
  68. /* If kiss_fft_alloc allocated a buffer, it is one contiguous 
  69.    buffer and can be simply free()d when no longer needed*/
  70. #define kiss_fft_free free
  71. #ifdef __cplusplus
  72. #endif
  73. #endif