/***************************************************************************/ /* FFT.H */ /* Fast-Fourier-Transformation /* Author: Jens Ahrensfeld */ /* Datum : 24.06.1999 */ /* letzte Änderung: 09.06.2000 */ /***************************************************************************/ /* Tabellen und Funktionen für die FFT */ /***************************************************************************/ #ifndef FFT_H #define FFT_H #define PI 3.1415926535897932384626433832795 #define fft_float_t FLOAT32 #define FFT_ERROR 0x80000000 typedef struct _sfft_t { UINT32 m_numPoints, m_numStages; fft_float_t *pTwfRe, *pTwfIm; } fft_t; typedef struct _sfft2_t { fft_t *pXfft, *pYfft; UINT32 m_Nx, m_Ny; } fft2_t; /* DFT functions */ extern void DFT(fft_float_t *pDataR, fft_float_t *pDataI, UINT32 N); extern void IDFT(fft_float_t *pDataR, fft_float_t *pDataI, UINT32 N); /* FFT functions */ extern void FFTinit(fft_t *pFFT, UINT32 N); extern void FFTfree(fft_t *pFFT); extern void fft(fft_t *pFFT, fft_float_t*, fft_float_t*); extern void ifft(fft_t *pFFT, fft_float_t*, fft_float_t*); extern void ffts(fft_t *pFFT, fft_float_t *in_re, fft_float_t *in_im); extern void FFTCalcTwiddleTable (fft_float_t *pRealData, fft_float_t *pImagData, UINT32 numPoints); /* 2D FFT functions */ extern void FFT2Dinit(fft2_t *pFFT, UINT32 Nx, UINT32 Ny); extern void FFT2Dfree(fft2_t *pFFT); extern void fft2d(fft2_t *pFFT, fft_float_t **ppReal, fft_float_t **ppImag); extern void ifft2d(fft2_t *pFFT, fft_float_t **ppReal, fft_float_t **ppImag); /* Helper functions */ extern void Scale(fft_float_t *pRealData, fft_float_t *pImagData , fft_float_t scaleFactor, UINT32 N); extern void Modulus(fft_float_t *pRealData, fft_float_t *pImagData, UINT32 N); extern void Hanning (fft_float_t *pRealData, fft_float_t *pImagData, UINT32 N, UINT32 maximum); extern fft_float_t hanning_k (UINT32, UINT32); extern fft_float_t gauss_k(UINT32, UINT32, UINT32); extern UINT32 IsPowerOfTwo(UINT32 N); #endif /* FFT_H */