Skip to content

Commit dd4bdcf

Browse files
authored
Merge pull request #105 from BatchDrake/develop
Make master up to date
2 parents ed27281 + 0e5b64a commit dd4bdcf

File tree

3 files changed

+30
-13
lines changed

3 files changed

+30
-13
lines changed

src/include/sigutils/specttuner.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,13 @@ SU_METHOD(su_specttuner, void, force_state, enum sigutils_specttuner_state state
266266
self->state = state;
267267
}
268268

269+
SUINLINE
270+
SU_GETTER(su_specttuner, SUBOOL, uses_early_windowing)
271+
{
272+
return self->params.early_windowing;
273+
}
274+
275+
269276
#ifndef __cplusplus
270277

271278
/* Internal */

src/sigutils/specttuner.c

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -796,38 +796,48 @@ __su_specttuner_feed_channel(
796796
self->fft + window_size - (channel->halfw - len),
797797
(channel->halfw - len) * sizeof(SUCOMPLEX));
798798

799+
if (channel->params.domain == SU_SPECTTUNER_CHANNEL_TIME_DOMAIN) {
799800
/*********************** Apply filter and scaling ************************/
800801
#ifdef SU_SPECTTUNER_SQUARE_FILTER
801-
for (i = 0; i < channel->halfw; ++i)
802-
channel->fft[i] *= channel->k;
802+
for (i = 0; i < channel->halfw; ++i)
803+
channel->fft[i] *= channel->k;
803804

804-
for (i = channel->size - channel->halfw; i < channel->size; ++i)
805-
channel->fft[i] *= channel->k;
805+
for (i = channel->size - channel->halfw; i < channel->size; ++i)
806+
channel->fft[i] *= channel->k;
806807
#else
807-
for (i = 0; i < channel->halfsz; ++i) {
808-
channel->fft[i] *= channel->k * channel->h[i];
809-
channel->fft[channel->size - i - 1] *=
810-
channel->k * channel->h[window_size - i - 1];
811-
}
808+
for (i = 0; i < channel->halfsz; ++i) {
809+
channel->fft[i] *= channel->k * channel->h[i];
810+
channel->fft[channel->size - i - 1] *=
811+
channel->k * channel->h[window_size - i - 1];
812+
}
812813
#endif
813-
/************************* Back to time domain******************************/
814-
if (channel->params.domain == SU_SPECTTUNER_CHANNEL_FREQUENCY_DOMAIN) {
814+
} else {
815815
/* Channel is defined in the frequency domain. This means that we
816816
do not need to perform get back to the time domain (hence we can
817817
go ahead and skip one IFFT completely) */
818818

819819
if (self->state == SU_SPECTTUNER_STATE_EVEN) {
820+
memcpy(
821+
channel->fft + channel->halfw,
822+
channel->fft + channel->size - channel->halfw,
823+
channel->halfw * sizeof(SUCOMPLEX));
824+
825+
for (i = 0; i < channel->width; ++i)
826+
channel->fft[i] *= channel->k;
827+
820828
curr = channel->fft;
829+
821830
return (channel->params.on_data)(
822831
channel,
823832
channel->params.privdata,
824833
curr,
825-
channel->size);
834+
channel->width);
826835
} else {
827836
return SU_TRUE;
828837
}
829838
}
830839

840+
/************************* Back to time domain******************************/
831841
SU_FFTW(_execute)(channel->plan[self->state]);
832842

833843
curr = channel->ifft[self->state];

0 commit comments

Comments
 (0)