mirror of https://github.com/PentHertz/srsLTE.git
srsLTE: Added PUCCH format 3 valid correlation
This commit is contained in:
parent
0192130742
commit
729986f259
|
@ -55,6 +55,7 @@
|
||||||
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT1 (0.5f)
|
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT1 (0.5f)
|
||||||
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT1A (0.5f)
|
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT1A (0.5f)
|
||||||
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT2 (0.5f)
|
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT2 (0.5f)
|
||||||
|
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_FORMAT3 (0.5f)
|
||||||
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_DMRS (0.4f)
|
#define SRSLTE_PUCCH_DEFAULT_THRESHOLD_DMRS (0.4f)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
@ -75,6 +75,7 @@ typedef struct SRSLTE_API {
|
||||||
float threshold_format1;
|
float threshold_format1;
|
||||||
float threshold_data_valid_format1a;
|
float threshold_data_valid_format1a;
|
||||||
float threshold_data_valid_format2;
|
float threshold_data_valid_format2;
|
||||||
|
float threshold_data_valid_format3;
|
||||||
float threshold_dmrs_detection;
|
float threshold_dmrs_detection;
|
||||||
|
|
||||||
// PUCCH configuration generated during a call to encode/decode
|
// PUCCH configuration generated during a call to encode/decode
|
||||||
|
|
|
@ -809,7 +809,7 @@ static bool decode_signal(srslte_pucch_t* q,
|
||||||
break;
|
break;
|
||||||
case SRSLTE_PUCCH_FORMAT_3:
|
case SRSLTE_PUCCH_FORMAT_3:
|
||||||
corr = (float)decode_signal_format3(q, sf, cfg, pucch_bits, q->z) / 4800.0f;
|
corr = (float)decode_signal_format3(q, sf, cfg, pucch_bits, q->z) / 4800.0f;
|
||||||
detected = true;
|
detected = corr > cfg->threshold_data_valid_format3;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ERROR("PUCCH format %d not implemented\n", cfg->format);
|
ERROR("PUCCH format %d not implemented\n", cfg->format);
|
||||||
|
@ -831,7 +831,7 @@ static void decode_bits(srslte_pucch_cfg_t* cfg,
|
||||||
uint32_t nof_ack = srslte_uci_cfg_total_ack(&cfg->uci_cfg);
|
uint32_t nof_ack = srslte_uci_cfg_total_ack(&cfg->uci_cfg);
|
||||||
memcpy(uci_data->ack.ack_value, pucch_bits, nof_ack);
|
memcpy(uci_data->ack.ack_value, pucch_bits, nof_ack);
|
||||||
uci_data->scheduling_request = (pucch_bits[nof_ack] == 1);
|
uci_data->scheduling_request = (pucch_bits[nof_ack] == 1);
|
||||||
uci_data->ack.valid = true;
|
uci_data->ack.valid = pucch_found;
|
||||||
} else {
|
} else {
|
||||||
// If was looking for scheduling request, update value
|
// If was looking for scheduling request, update value
|
||||||
if (cfg->uci_cfg.is_scheduling_request_tti) {
|
if (cfg->uci_cfg.is_scheduling_request_tti) {
|
||||||
|
|
|
@ -886,11 +886,16 @@ int srslte_uci_data_info(srslte_uci_cfg_t* uci_cfg, srslte_uci_value_t* uci_data
|
||||||
uint32_t nof_acks = srslte_uci_cfg_total_ack(uci_cfg);
|
uint32_t nof_acks = srslte_uci_cfg_total_ack(uci_cfg);
|
||||||
if (nof_acks) {
|
if (nof_acks) {
|
||||||
n = srslte_print_check(str, str_len, n, ", ack=");
|
n = srslte_print_check(str, str_len, n, ", ack=");
|
||||||
for (uint32_t i = 0; i < nof_acks; i++) {
|
if (uci_data->ack.valid) {
|
||||||
n = srslte_print_check(str, str_len, n, "%d", uci_data->ack.ack_value[i]);
|
|
||||||
}
|
for (uint32_t i = 0; i < nof_acks; i++) {
|
||||||
if (uci_cfg->ack[0].N_bundle) {
|
n = srslte_print_check(str, str_len, n, "%d", uci_data->ack.ack_value[i]);
|
||||||
n = srslte_print_check(str, str_len, n, ", n_bundle=%d", uci_cfg->ack[0].N_bundle);
|
}
|
||||||
|
if (uci_cfg->ack[0].N_bundle) {
|
||||||
|
n = srslte_print_check(str, str_len, n, ", n_bundle=%d", uci_cfg->ack[0].N_bundle);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
n = srslte_print_check(str, str_len, n, "invalid");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue