From be2ffbd8eb492ed4785cf2804e807aa05d994aa0 Mon Sep 17 00:00:00 2001 From: "Gonzalo J. Carracedo Carballal" Date: Wed, 7 Feb 2024 14:32:52 +0100 Subject: [PATCH] WIP: Debug power issues --- cmake/cmake-pcfilegenerator | 2 +- src/sigutils/specttuner.c | 35 +++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/cmake/cmake-pcfilegenerator b/cmake/cmake-pcfilegenerator index cda18b5..c6012b1 160000 --- a/cmake/cmake-pcfilegenerator +++ b/cmake/cmake-pcfilegenerator @@ -1 +1 @@ -Subproject commit cda18b55ffc52525a5fa070c8bbbbe3c3ceaddf8 +Subproject commit c6012b18c68d7ede8ec9bbd4bc05dfd1d6923b82 diff --git a/src/sigutils/specttuner.c b/src/sigutils/specttuner.c index fcfd25e..5c70357 100644 --- a/src/sigutils/specttuner.c +++ b/src/sigutils/specttuner.c @@ -796,38 +796,49 @@ __su_specttuner_feed_channel( self->fft + window_size - (channel->halfw - len), (channel->halfw - len) * sizeof(SUCOMPLEX)); + if (channel->params.domain == SU_SPECTTUNER_CHANNEL_TIME_DOMAIN) { /*********************** Apply filter and scaling ************************/ #ifdef SU_SPECTTUNER_SQUARE_FILTER - for (i = 0; i < channel->halfw; ++i) - channel->fft[i] *= channel->k; + for (i = 0; i < channel->halfw; ++i) + channel->fft[i] *= channel->k; - for (i = channel->size - channel->halfw; i < channel->size; ++i) - channel->fft[i] *= channel->k; + for (i = channel->size - channel->halfw; i < channel->size; ++i) + channel->fft[i] *= channel->k; #else - for (i = 0; i < channel->halfsz; ++i) { - channel->fft[i] *= channel->k * channel->h[i]; - channel->fft[channel->size - i - 1] *= - channel->k * channel->h[window_size - i - 1]; - } + for (i = 0; i < channel->halfsz; ++i) { + channel->fft[i] *= channel->k * channel->h[i]; + channel->fft[channel->size - i - 1] *= + channel->k * channel->h[window_size - i - 1]; + } #endif - /************************* Back to time domain******************************/ - if (channel->params.domain == SU_SPECTTUNER_CHANNEL_FREQUENCY_DOMAIN) { + } else { /* Channel is defined in the frequency domain. This means that we do not need to perform get back to the time domain (hence we can go ahead and skip one IFFT completely) */ if (self->state == SU_SPECTTUNER_STATE_EVEN) { + memcpy( + channel->fft + channel->halfw, + channel->fft + channel->size - channel->halfw, + channel->halfw * sizeof(SUCOMPLEX)); + + for (i = 0; i < channel->width; ++i) + channel->fft[i] *= channel->k; + curr = channel->fft; + + printf("Done, delivering %d/%d\n", channel->width, channel->size); return (channel->params.on_data)( channel, channel->params.privdata, curr, - channel->size); + channel->width); } else { return SU_TRUE; } } + /************************* Back to time domain******************************/ SU_FFTW(_execute)(channel->plan[self->state]); curr = channel->ifft[self->state];