@@ -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