/***************************************************************************/ /* 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 typedef struct _sFFT { UINT32 m_numPoints, m_numStages; avfloat_t *pTwfRe, *pTwfIm; } FFT; typedef struct _sFFT2D { struct _sFFT *pXfft, *pYfft; UINT32 m_Nx, m_Ny; } FFT2D; /* DFT functions */ extern void DFT(avfloat_t *pDataR, avfloat_t *pDataI, UINT32 N); extern void IDFT(avfloat_t *pDataR, avfloat_t *pDataI, UINT32 N); /* FFT functions */ extern void FFTinit(FFT *pFFT, UINT32 N); extern void FFTfree(FFT *pFFT); extern void fft(FFT *pFFT, avfloat_t*, avfloat_t*); extern void ifft(FFT *pFFT, avfloat_t*, avfloat_t*); extern void ffts(FFT *pFFT, avfloat_t *in_re, avfloat_t *in_im); extern void FFTCalcTwiddleTable (avfloat_t *pRealData, avfloat_t *pImagData, UINT32 numPoints); /* 2D FFT functions */ extern void FFT2Dinit(struct _sFFT2D *pFFT, UINT32 Nx, UINT32 Ny); extern void FFT2Dfree(struct _sFFT2D *pFFT); extern void fft2d(struct _sFFT2D *pFFT, avfloat_t **ppReal, avfloat_t **ppImag); extern void ifft2d(struct _sFFT2D *pFFT, avfloat_t **ppReal, avfloat_t **ppImag); /* Helper functions */ extern void Scale(avfloat_t *pRealData, avfloat_t *pImagData , avfloat_t scaleFactor, UINT32 N); extern void Modulus(avfloat_t *pRealData, avfloat_t *pImagData, UINT32 N); extern void Hanning (avfloat_t *pRealData, avfloat_t *pImagData, UINT32 N, UINT32 maximum); extern avfloat_t hanning_k (UINT32, UINT32); extern avfloat_t gauss_k(UINT32, UINT32, UINT32); extern AVERR IsPowerOfTwo(UINT32 N); #endif /* FFT_H */