From 7a00833cabc1f43bff59bcef6d28bd5405250771 Mon Sep 17 00:00:00 2001 From: Ismael Gomez Date: Mon, 18 Jul 2016 11:35:23 +0200 Subject: [PATCH] chest_dl: fixed interpolation for 4 ports --- srslte/lib/ch_estimation/chest_dl.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/srslte/lib/ch_estimation/chest_dl.c b/srslte/lib/ch_estimation/chest_dl.c index 9d63b0b69..c233fc5d5 100644 --- a/srslte/lib/ch_estimation/chest_dl.c +++ b/srslte/lib/ch_estimation/chest_dl.c @@ -245,7 +245,11 @@ static void interpolate_pilots(srslte_chest_dl_t *q, cf_t *pilot_estimates, cf_t srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(7), &cesymb(11), &cesymb(8), 3); srslte_interp_linear_vector2(&q->srslte_interp_linvec, &cesymb(7), &cesymb(11), &cesymb(11), &cesymb(12), 2); } else { - srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(8), &cesymb(1), &cesymb(0), 1); + srslte_vec_sub_ccc(&cesymb(1), &cesymb(8), q->srslte_interp_linvec.diff_vec, q->srslte_interp_linvec.vector_len); + srslte_vec_sc_prod_cfc(q->srslte_interp_linvec.diff_vec, (float) 1/7, q->srslte_interp_linvec.diff_vec, + q->srslte_interp_linvec.vector_len); + srslte_vec_sum_ccc(q->srslte_interp_linvec.diff_vec, &cesymb(1), &cesymb(0), q->srslte_interp_linvec.diff_vec); + srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(1), &cesymb(8), &cesymb(2), 6); srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(1), &cesymb(8), &cesymb(9), 5); } @@ -256,7 +260,11 @@ static void interpolate_pilots(srslte_chest_dl_t *q, cf_t *pilot_estimates, cf_t srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(6), &cesymb(9), &cesymb(7), 2); srslte_interp_linear_vector2(&q->srslte_interp_linvec, &cesymb(6), &cesymb(9), &cesymb(9), &cesymb(10), 2); } else { - srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(7), &cesymb(1), &cesymb(0), 1); + srslte_vec_sub_ccc(&cesymb(1), &cesymb(7), q->srslte_interp_linvec.diff_vec, q->srslte_interp_linvec.vector_len); + srslte_vec_sc_prod_cfc(q->srslte_interp_linvec.diff_vec, (float) 1/6, q->srslte_interp_linvec.diff_vec, + q->srslte_interp_linvec.vector_len); + srslte_vec_sum_ccc(q->srslte_interp_linvec.diff_vec, &cesymb(1), &cesymb(0), q->srslte_interp_linvec.diff_vec); + srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(1), &cesymb(7), &cesymb(2), 5); srslte_interp_linear_vector(&q->srslte_interp_linvec, &cesymb(1), &cesymb(7), &cesymb(8), 4); }