From eb0fd10c40eb7f58a2b894fd32663c8fbfbd504f Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 3 Sep 2013 01:09:03 +0000 Subject: add resize_fft --- fft.c | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/fft.c b/fft.c index 06c1670..1e0e426 100644 --- a/fft.c +++ b/fft.c @@ -26,12 +26,12 @@ struct fft { fftw_plan plan; double *in; double *out; - int n; + size_t n; double *window; }; double * -hamming(int n) +hamming(size_t n) { double *w; int i; @@ -47,19 +47,36 @@ hamming(int n) } struct fft * -init_fft(int n) +resize_fft(struct fft *p, size_t n) { - struct fft *p; + if (n != p->n) { + p->n = n; + + if (p->in) + fftw_free(p->in); + p->in = fftw_malloc(p->n * sizeof(double)); + + if (p->out) + fftw_free(p->out); + p->out = fftw_malloc(p->n * sizeof(double)); - p = malloc(sizeof(struct fft)); + if (p->window) + free(p->window); + p->window = hamming(p->n); - p->n = n; - p->in = fftw_malloc(n * sizeof(double)); - p->out = fftw_malloc(n * sizeof(double)); - p->plan = fftw_plan_r2r_1d(n, p->in, p->out, - FFTW_R2HC, FFTW_MEASURE); + p->plan = fftw_plan_r2r_1d(p->n, p->in, p->out, + FFTW_R2HC, FFTW_MEASURE); + } + return p; +} + +struct fft * +init_fft(size_t n) +{ + struct fft *p; - p->window = hamming(n); + p = calloc(1, sizeof(struct fft)); + p = resize_fft(p, n); return p; } -- cgit v1.2.3