# HG changeset patch # User Matti Hamalainen # Date 1367700117 -10800 # Node ID e6d807ce715b09b46d3f43c698d65bd2e28b6c8c # Parent 44138892c784a958dd94abf38add7015eaf40268 Add two more functions for converting FFT data to frequency and time domains. diff -r 44138892c784 -r e6d807ce715b dmfft.c --- a/dmfft.c Sat May 04 23:29:22 2013 +0300 +++ b/dmfft.c Sat May 04 23:41:57 2013 +0300 @@ -149,3 +149,42 @@ return DMERR_OK; } + + +int dmConvertFFTtoFreqDomain(DMFFTContext *ctx, DMFFTType *buffer, DMFFTType *real, DMFFTType *imag) +{ + int i; + if (ctx == NULL || buffer == NULL || real == NULL || imag == NULL) + return DMERR_NULLPTR; + + // Convert from bitreversed form to normal frequency domain + for (i = 1; i < ctx->npoints; i++) + { + real[i] = buffer[ctx->breversed[i] ]; + imag[i] = buffer[ctx->breversed[i]+1]; + } + + // Make the ends meet + real[0] = buffer[0]; + imag[0] = 0; + real[ctx->npoints] = buffer[1]; + imag[ctx->npoints] = 0; + + return DMERR_OK; +} + + +int dmConvertFFTtoTimeDomain(DMFFTContext *ctx, DMFFTType *buffer, DMFFTType *tdom) +{ + int i; + if (ctx == NULL || buffer == NULL || tdom == NULL) + return DMERR_NULLPTR; + + for (i = 1; i < ctx->npoints; i++) + { + tdom[i*2 ] = buffer[ctx->breversed[i] ]; + tdom[i*2+1] = buffer[ctx->breversed[i]+1]; + } + + return DMERR_OK; +} diff -r 44138892c784 -r e6d807ce715b dmfft.h --- a/dmfft.h Sat May 04 23:29:22 2013 +0300 +++ b/dmfft.h Sat May 04 23:41:57 2013 +0300 @@ -15,9 +15,11 @@ } DMFFTContext; -int dmInitializeFFT(DMFFTContext *, int); -void dmEndFFT(DMFFTContext *); -int dmRealFFT(DMFFTContext *, DMFFTType *); +int dmInitializeFFT(DMFFTContext *, int); +void dmEndFFT(DMFFTContext *); +int dmRealFFT(DMFFTContext *, DMFFTType *); +int dmConvertFFTtoFreqDomain(DMFFTContext *ctx, DMFFTType *buffer, DMFFTType *real, DMFFTType *imag); +int dmConvertFFTtoTimeDomain(DMFFTContext *ctx, DMFFTType *buffer, DMFFTType *tdom); #endif // DMFFT_H