From 65e24d421f79df1e3397e106661e4afcf88b179e Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Sun, 16 Feb 2020 22:26:38 +0100 Subject: [PATCH] made count of input and output samples independent --- fdzp.hh | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) 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; } };