Mercurial > hg > dmlib
changeset 750:e6d807ce715b
Add two more functions for converting FFT data to frequency and time
domains.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 04 May 2013 23:41:57 +0300 |
parents | 44138892c784 |
children | 817e792d9360 |
files | dmfft.c dmfft.h |
diffstat | 2 files changed, 44 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- 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; +}
--- 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