text: /*============================================================================
  
         fourier.h  -  Don Cross <dcross@intersrv.com>
  
         http://www.intersrv.com/~dcross/fft.html
  
         Contains definitions for doing Fourier transforms
         and inverse Fourier transforms.
  
  ============================================================================*/
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /*
  **   fft() computes the Fourier transform or inverse transform
  **   of the complex inputs to produce the complex outputs.
  **   The number of samples must be a power of two to do the
  **   recursive decomposition of the FFT algorithm.
  **   See Chapter 12 of "Numerical Recipes in FORTRAN" by
  **   Press, Teukolsky, Vetterling, and Flannery,
  **   Cambridge University Press.
  **
  **   Notes:  If you pass ImaginaryIn = NULL, this function will "pretend"
  **           that it is an array of all zeroes.  This is convenient for
  **           transforming digital samples of real number data without
  **           wasting memory.
  */
  
  void fft_double (
      unsigned  NumSamples,          /* must be a power of 2 */
      int       InverseTransform,    /* 0=forward FFT, 1=inverse FFT */
      double   *RealIn,              /* array of input's real samples */
      double   *ImaginaryIn,         /* array of input's imag samples */
      double   *RealOut,             /* array of output's reals */
      double   *ImaginaryOut );      /* array of output's imaginaries */
  
  
  void fft_float (
      unsigned  NumSamples,          /* must be a power of 2 */
      int       InverseTransform,    /* 0=forward FFT, 1=inverse FFT */
      float    *RealIn,              /* array of input's real samples */
      float    *ImaginaryIn,         /* array of input's imag samples */
      float    *RealOut,             /* array of output's reals */
      float    *ImaginaryOut );      /* array of output's imaginaries */
  
  
  int IsPowerOfTwo ( unsigned x );
  unsigned NumberOfBitsNeeded ( unsigned PowerOfTwo );
  unsigned ReverseBits ( unsigned index, unsigned NumBits );
  
  #define fprintf(...)
      
  /*
  **   The following function returns an "abstract frequency" of a
  **   given index into a buffer with a given number of frequency samples.
  **   Multiply return value by sampling rate to get frequency expressed in Hz.
  */
  double Index_to_frequency ( unsigned NumSamples, unsigned Index );
  
  #ifdef __cplusplus
  }
  #endif
  
  
  /*--- end of file fourier.h ---*/
  