From 40a3290e36e50b39b356ff8e4b80ab9b8ff31368 Mon Sep 17 00:00:00 2001 From: Andre Puschmann Date: Mon, 15 Jan 2018 17:45:54 +0100 Subject: [PATCH 1/3] initialize metrics object --- lib/include/srslte/common/metrics_hub.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/include/srslte/common/metrics_hub.h b/lib/include/srslte/common/metrics_hub.h index ca6d0beac..5dc22f7c1 100644 --- a/lib/include/srslte/common/metrics_hub.h +++ b/lib/include/srslte/common/metrics_hub.h @@ -53,7 +53,7 @@ public: private: void run_period() { if (m) { - metrics_t metric; + metrics_t metric = {}; m->get_metrics(metric); for (uint32_t i=0;iset_metrics(metric); From d88ed887d7a88a18763973b84692464ddd51eff4 Mon Sep 17 00:00:00 2001 From: Ismael Gomez Date: Tue, 16 Jan 2018 09:55:14 +0100 Subject: [PATCH 2/3] Revert "Take 1st block of iteration instead of 2nd in viterbi" This reverts commit b12f5002072ce76db26a52a0b720bdfb47132941. --- lib/src/phy/fec/viterbi.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/src/phy/fec/viterbi.c b/lib/src/phy/fec/viterbi.c index ed4b3b9a4..9edcb52c0 100644 --- a/lib/src/phy/fec/viterbi.c +++ b/lib/src/phy/fec/viterbi.c @@ -73,7 +73,7 @@ int decode37(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length) { } update_viterbi37_blk_port(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_port(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_port(q->ptr, symbols, frame_length + q->K - 1, NULL); chainback_viterbi37_port(q->ptr, data, frame_length, 0); @@ -105,7 +105,7 @@ int decode37_sse(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_length } update_viterbi37_blk_sse(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_sse(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_sse(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_sse(q->ptr, data, frame_length, 0); @@ -151,7 +151,7 @@ int decode37_avx2_16bit(void *o, uint16_t *symbols, uint8_t *data, uint32_t fram } update_viterbi37_blk_avx2_16bit(q->ptr, q->tmp_s, TB_ITER*frame_length, &best_state); chainback_viterbi37_avx2_16bit(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_avx2_16bit(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_avx2_16bit(q->ptr, data, frame_length, 0); @@ -192,7 +192,7 @@ int decode37_avx2(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_lengt } update_viterbi37_blk_avx2(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_avx2(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_avx2(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_avx2(q->ptr, data, frame_length, 0); @@ -237,7 +237,7 @@ int decode37_neon(void *o, uint8_t *symbols, uint8_t *data, uint32_t frame_lengt } update_viterbi37_blk_neon(q->ptr, q->tmp, TB_ITER*frame_length, &best_state); chainback_viterbi37_neon(q->ptr, q->tmp, TB_ITER*frame_length, best_state); - memcpy(data, q->tmp, frame_length*sizeof(uint8_t)); + memcpy(data, &q->tmp[((int) (TB_ITER/2))*frame_length], frame_length*sizeof(uint8_t)); } else { update_viterbi37_blk_neon(q->ptr, symbols, frame_length+q->K-1, NULL); chainback_viterbi37_neon(q->ptr, data, frame_length, 0); From d2e160005330b192d6f69499aa60c67c42663a39 Mon Sep 17 00:00:00 2001 From: Ismael Gomez Date: Tue, 16 Jan 2018 09:57:45 +0100 Subject: [PATCH 3/3] Updated viterbi 16-bit scaling --- lib/src/phy/fec/viterbi.c | 6 +++--- lib/src/phy/fec/viterbi37_avx2_16bit.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/src/phy/fec/viterbi.c b/lib/src/phy/fec/viterbi.c index 9edcb52c0..25d77ef36 100644 --- a/lib/src/phy/fec/viterbi.c +++ b/lib/src/phy/fec/viterbi.c @@ -42,7 +42,7 @@ #define DEFAULT_GAIN 100 -#define DEFAULT_GAIN_16 10000 +#define DEFAULT_GAIN_16 1000 #define VITERBI_16 #ifndef LV_HAVE_AVX2 @@ -423,7 +423,7 @@ int init37_avx2_16bit(srslte_viterbi_t *q, int poly[3], uint32_t framebits, bool q->R = 3; q->framebits = framebits; q->gain_quant_s = 4; - q->gain_quant = DEFAULT_GAIN; + q->gain_quant = DEFAULT_GAIN_16; q->tail_biting = tail_biting; q->decode_s = decode37_avx2_16bit; q->free = free37_avx2_16bit; @@ -537,7 +537,7 @@ int srslte_viterbi_decode_f(srslte_viterbi_t *q, float *symbols, uint8_t *data, } } #ifdef VITERBI_16 - srslte_vec_quant_fus(symbols, q->symbols_us, DEFAULT_GAIN_16/max, 32767.5, 65535, len); + srslte_vec_quant_fus(symbols, q->symbols_us, q->gain_quant/max, 32767.5, 65535, len); return srslte_viterbi_decode_us(q, q->symbols_us, data, frame_length); #else srslte_vec_quant_fuc(symbols, q->symbols_uc, q->gain_quant/max, 127.5, 255, len); diff --git a/lib/src/phy/fec/viterbi37_avx2_16bit.c b/lib/src/phy/fec/viterbi37_avx2_16bit.c index cda292017..913b6a82e 100644 --- a/lib/src/phy/fec/viterbi37_avx2_16bit.c +++ b/lib/src/phy/fec/viterbi37_avx2_16bit.c @@ -301,7 +301,7 @@ void update_viterbi37_blk_avx2_16bit(void *p, unsigned short *syms, int nbits, u } // See if we need to normalize - if (vp->new_metrics->c[0] > 25600) { + if (vp->new_metrics->c[0] > 12288) { int i; uint16_t adjust;