From 462d222fd272251f40c5b2638668e55b05e6c2e1 Mon Sep 17 00:00:00 2001 From: Ismael Gomez Date: Tue, 7 Feb 2017 17:26:40 +0000 Subject: [PATCH] chest dl to support multiple rx antennas --- matlab/tests/pdsch_equal.m | 4 ++-- srslte/include/srslte/ch_estimation/chest_dl.h | 5 +++++ srslte/lib/ch_estimation/chest_dl.c | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/matlab/tests/pdsch_equal.m b/matlab/tests/pdsch_equal.m index 1bd949532..f58920f14 100644 --- a/matlab/tests/pdsch_equal.m +++ b/matlab/tests/pdsch_equal.m @@ -128,8 +128,8 @@ if (length(SNR_values)>1) ylabel('BLER') axis([min(SNR_values) max(SNR_values) 1/Npackets/(Nsf+1) 1]) else - plot(abs(symbols{1}-pdschSymbols2)) - %scatter(real(symbols{1}),imag(symbols{1})) + %plot(abs(symbols{1}-pdschSymbols2)) + scatter(real(pdschSymbols2),imag(pdschSymbols2)) fprintf('Matlab: %d OK\nsrsLTE: %d OK\n',decoded, decoded_srslte); end diff --git a/srslte/include/srslte/ch_estimation/chest_dl.h b/srslte/include/srslte/ch_estimation/chest_dl.h index a4afa1d84..7d20ecb45 100644 --- a/srslte/include/srslte/ch_estimation/chest_dl.h +++ b/srslte/include/srslte/ch_estimation/chest_dl.h @@ -105,6 +105,11 @@ SRSLTE_API void srslte_chest_dl_set_smooth_filter3_coeff(srslte_chest_dl_t* q, SRSLTE_API void srslte_chest_dl_set_noise_alg(srslte_chest_dl_t *q, srslte_chest_dl_noise_alg_t noise_estimation_alg); +SRSLTE_API int srslte_chest_dl_estimate_multi(srslte_chest_dl_t *q, + cf_t *input[SRSLTE_MAX_RXANT], + cf_t *ce[SRSLTE_MAX_RXANT][SRSLTE_MAX_PORTS], + uint32_t sf_idx); + SRSLTE_API int srslte_chest_dl_estimate(srslte_chest_dl_t *q, cf_t *input, cf_t *ce[SRSLTE_MAX_PORTS], diff --git a/srslte/lib/ch_estimation/chest_dl.c b/srslte/lib/ch_estimation/chest_dl.c index 541f98646..5a1da4736 100644 --- a/srslte/lib/ch_estimation/chest_dl.c +++ b/srslte/lib/ch_estimation/chest_dl.c @@ -354,12 +354,26 @@ int srslte_chest_dl_estimate_port(srslte_chest_dl_t *q, cf_t *input, cf_t *ce, u return 0; } +int srslte_chest_dl_estimate(srslte_chest_dl_t *q, cf_t *input[SRSLTE_MAX_RXANT], cf_t *ce[SRSLTE_MAX_RXANT][SRSLTE_MAX_PORTS], uint32_t sf_idx, uint32_t nof_rx_antennas) +{ + for (uint32_t rxant=0;rxantcell.nof_ports;port_id++) { + if (srslte_chest_dl_estimate_port(q, input[rxant], ce[rxant][port_id], sf_idx, port_id)) { + return SRSLTE_ERROR; + } + } + } + return SRSLTE_SUCCESS; +} + int srslte_chest_dl_estimate(srslte_chest_dl_t *q, cf_t *input, cf_t *ce[SRSLTE_MAX_PORTS], uint32_t sf_idx) { uint32_t port_id; for (port_id=0;port_idcell.nof_ports;port_id++) { - srslte_chest_dl_estimate_port(q, input, ce[port_id], sf_idx, port_id); + if (srslte_chest_dl_estimate_port(q, input, ce[port_id], sf_idx, port_id)) { + return SRSLTE_ERROR; + } } return SRSLTE_SUCCESS; }