diff --git a/fdzp.hh b/fdzp.hh index 68e0d75..09d71e4 100644 --- a/fdzp.hh +++ b/fdzp.hh @@ -10,28 +10,29 @@ Copyright 2019 Ahmet Inan namespace DSP { -template +template class FDZP { typedef typename CMPLX::value_type VALUE; - FastFourierTransform fwd; - FastFourierTransform bwd; - CMPLX tmp[BINS * FACT]; - static constexpr VALUE SCALE = VALUE(1) / VALUE(BINS); + FastFourierTransform fwd; + FastFourierTransform bwd; + CMPLX tmp[OUTPUT]; + static constexpr VALUE SCALE = VALUE(1) / VALUE(INPUT); + static_assert(INPUT < OUTPUT, "OUTPUT must be larger than INPUT"); public: void operator ()(CMPLX *output, const CMPLX *input) { fwd(tmp, input); - if (!(BINS&1)) { - tmp[BINS/2] *= VALUE(0.5); - tmp[BINS*FACT-BINS/2] = tmp[BINS/2]; + if (!(INPUT&1)) { + tmp[INPUT/2] *= VALUE(0.5); + tmp[OUTPUT-INPUT/2] = tmp[INPUT/2]; } - for (int i = (BINS+1)/2+1; i < BINS; ++i) - tmp[BINS*(FACT-1)+i] = tmp[i]; - for (int i = (BINS+1)/2+1; i < BINS; ++i) + for (int i = (INPUT+1)/2+1; i < INPUT; ++i) + tmp[OUTPUT-INPUT+i] = tmp[i]; + for (int i = (INPUT+1)/2+1; i < INPUT; ++i) tmp[i] = 0; bwd(output, tmp); - for (int i = 0; i < BINS * FACT; ++i) + for (int i = 0; i < OUTPUT; ++i) output[i] *= SCALE; } };