Commit 084f50a9 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Merge analysis window generation into one function.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 84146548
......@@ -59,26 +59,33 @@ FFTAnalyzer::FFTAnalyzer (int n_channels) :
m_n_channels (n_channels),
m_fft_processor (Params::frame_size)
{
/* generate analysis window */
m_window.resize (Params::frame_size);
m_window = gen_normalized_window (Params::frame_size);
}
/* safe to call from any thread */
vector<float>
FFTAnalyzer::gen_normalized_window (size_t n_values)
{
vector<float> window (n_values);
/* generate analysis window */
double window_weight = 0;
for (size_t i = 0; i < Params::frame_size; i++)
for (size_t i = 0; i < n_values; i++)
{
const double fsize_2 = Params::frame_size / 2.0;
// const double win = window_cos ((i - fsize_2) / fsize_2);
const double win = window_hamming ((i - fsize_2) / fsize_2);
const double n_values_2 = n_values / 2.0;
// const double win = window_cos ((i - n_values_2) / n_values_2);
const double win = window_hamming ((i - n_values_2) / n_values_2);
//const double win = 1;
m_window[i] = win;
window[i] = win;
window_weight += win;
}
/* normalize window using window weight */
for (size_t i = 0; i < Params::frame_size; i++)
for (size_t i = 0; i < n_values; i++)
{
m_window[i] *= 2.0 / window_weight;
window[i] *= 2.0 / window_weight;
}
return window;
}
vector<vector<complex<float>>>
......
......@@ -130,6 +130,8 @@ public:
std::vector<std::vector<std::complex<float>>> run_fft (const std::vector<float>& samples, size_t start_index);
std::vector<std::vector<std::complex<float>>> fft_range (const std::vector<float>& samples, size_t start_index, size_t frame_count);
static std::vector<float> gen_normalized_window (size_t n_values);
};
struct MixEntry
......
......@@ -212,22 +212,7 @@ SpeedSync::prepare_mags (const SpeedScanParams& scan_params)
const int sub_frame_size = Params::frame_size / 2;
const int sub_sync_search_step = Params::sync_search_step / 2;
/* generate analysis window */
double window_weight = 0;
float window[sub_frame_size];
for (size_t i = 0; i < sub_frame_size; i++)
{
const double fsize_2 = sub_frame_size / 2.0;
const double win = window_hamming ((i - fsize_2) / fsize_2);
window[i] = win;
window_weight += win;
}
/* normalize window using window weight */
for (size_t i = 0; i < sub_frame_size; i++)
{
window[i] *= 2.0 / window_weight;
}
vector<float> window = FFTAnalyzer::gen_normalized_window (sub_frame_size);
FFTProcessor fft_processor (sub_frame_size);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment