Correction - limited strongest_window_nr to avoid reading outside of buffer boundaries.
diff --git a/lib/receiver_impl.cc b/lib/receiver_impl.cc
index 09461c6..1a188a5 100644
--- a/lib/receiver_impl.cc
+++ b/lib/receiver_impl.cc
@@ -712,7 +712,6 @@
}
//TODO: get_norm_chan_imp_resp is similar to get_sch_chan_imp_resp - consider joining this two functions
-//TODO: this is place where most errors are introduced and can be corrected by improvements to this fuction
//especially computations of strongest_window_nr
int receiver_impl::get_norm_chan_imp_resp(const gr_complex *input, gr_complex * chan_imp_resp, float *corr_max, int bcc)
{
@@ -725,11 +724,11 @@
int chan_imp_resp_center = 0;
float max_correlation = 0;
float energy = 0;
-
+
int search_center = (int)((TRAIN_POS + GUARD_PERIOD) * d_OSR);
int search_start_pos = search_center + 1 - 5*d_OSR;
// int search_start_pos = search_center - d_chan_imp_length * d_OSR;
- int search_stop_pos = search_center + d_chan_imp_length * d_OSR + 2 * d_OSR;
+ int search_stop_pos = search_center + d_chan_imp_length * d_OSR + 5 * d_OSR;
for (int ii = search_start_pos; ii < search_stop_pos; ii++)
{
@@ -765,8 +764,11 @@
window_energy_buffer.push_back(energy);
}
- strongest_window_nr = max_element(window_energy_buffer.begin(), window_energy_buffer.end()) - window_energy_buffer.begin();
- strongest_window_nr = strongest_window_nr-d_OSR;
+ strongest_window_nr = max_element(window_energy_buffer.begin(), window_energy_buffer.end()-((d_chan_imp_length)*d_OSR)) - window_energy_buffer.begin();
+ //strongest_window_nr = strongest_window_nr-d_OSR;
+ if(strongest_window_nr<0){
+ strongest_window_nr = 0;
+ }
max_correlation = 0;
for (int ii = 0; ii < (d_chan_imp_length)*d_OSR; ii++)