diff --git a/resources/news.txt b/resources/news.txt index 6583e21a..cad1edbb 100644 --- a/resources/news.txt +++ b/resources/news.txt @@ -6,6 +6,7 @@ FIXED: Remove empty frame from bottom of I/Q tool window. FIXED: Sudden scrolling of file list in I/Q tool window. IMPROVED: AGC performance. + IMPROVED: Apply amplitude normalization to FFT window functions. 2.15.9: Released April 9, 2022 diff --git a/src/dsp/rx_fft.cpp b/src/dsp/rx_fft.cpp index d42fd6f8..c0e85292 100644 --- a/src/dsp/rx_fft.cpp +++ b/src/dsp/rx_fft.cpp @@ -204,6 +204,7 @@ unsigned int rx_fft_c::get_fft_size() const /*! \brief Set new window type. */ void rx_fft_c::set_window_type(int wintype) { + float tmp; if (wintype == d_wintype) { /* nothing to do */ @@ -219,6 +220,8 @@ void rx_fft_c::set_window_type(int wintype) d_window.clear(); d_window = gr::fft::window::build((gr::fft::window::win_type)d_wintype, d_fftsize, 6.76); + volk_32f_accumulator_s32f(&tmp, d_window.data(), d_fftsize); + volk_32f_s32f_normalize(d_window.data(), tmp / float(d_fftsize), d_fftsize); } /*! \brief Get currently used window type. */ @@ -391,6 +394,7 @@ unsigned int rx_fft_f::get_fft_size() const /*! \brief Set new window type. */ void rx_fft_f::set_window_type(int wintype) { + float tmp; if (wintype == d_wintype) { /* nothing to do */ @@ -406,6 +410,8 @@ void rx_fft_f::set_window_type(int wintype) d_window.clear(); d_window = gr::fft::window::build((gr::fft::window::win_type)d_wintype, d_fftsize, 6.76); + volk_32f_accumulator_s32f(&tmp, d_window.data(), d_fftsize); + volk_32f_s32f_normalize(d_window.data(), tmp / float(d_fftsize), d_fftsize); } /*! \brief Get currently used window type. */