diff --git a/lib/src/phy/ch_estimation/chest_common.c b/lib/src/phy/ch_estimation/chest_common.c index e354b962c..ea2d32557 100644 --- a/lib/src/phy/ch_estimation/chest_common.c +++ b/lib/src/phy/ch_estimation/chest_common.c @@ -62,19 +62,26 @@ uint32_t srslte_chest_set_smooth_filter_gauss(float* filter, uint32_t order, flo { const uint32_t filterlen = order + 1; const int center = (filterlen - 1) / 2; - float norm_p = 0.0f; - if (filterlen) { + if (!filterlen) { + return 0; + } - for (int i = 0; i < filterlen; i++) { - filter[i] = expf(-powf(i - center, 2) / (2.0f * powf(std_dev, 2))); - norm_p += powf(filter[i], 2); - } + for (int i = 0; i < filterlen; i++) { + filter[i] = expf(-powf(i - center, 2) / (2.0f * powf(std_dev, 2))); + } - const float norm = srslte_vec_acc_ff(filter, filterlen); + // Calculate average for normalization + const float norm = srslte_vec_acc_ff(filter, filterlen); - srslte_vec_sc_prod_fff(filter, 1.0f / norm, filter, filterlen); + // Avoids NAN, INF or ZERO division + if (!isnormal(norm)) { + return 0; } + + // Normalize filter + srslte_vec_sc_prod_fff(filter, 1.0f / norm, filter, filterlen); + return filterlen; }