mirror of https://github.com/PentHertz/srsLTE.git
Restored non-guru DFT interface. Removed input buffer from ue_dl interface
This commit is contained in:
parent
b9854b65da
commit
cfbea7a6c1
|
@ -332,7 +332,7 @@ int main(int argc, char **argv) {
|
|||
case DECODE_SIB:
|
||||
/* We are looking for SI Blocks, search only in appropiate places */
|
||||
if ((srslte_ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) {
|
||||
n = srslte_ue_dl_decode(&ue_dl, sf_buffer, data, 0, sfn*10+srslte_ue_sync_get_sfidx(&ue_sync), acks);
|
||||
n = srslte_ue_dl_decode(&ue_dl, data, 0, sfn*10+srslte_ue_sync_get_sfidx(&ue_sync), acks);
|
||||
if (n < 0) {
|
||||
fprintf(stderr, "Error decoding UE DL\n");fflush(stdout);
|
||||
return -1;
|
||||
|
|
|
@ -663,26 +663,25 @@ int main(int argc, char **argv) {
|
|||
if(sfidx != 1 || prog_args.mbsfn_area_id < 0){ // Not an MBSFN subframe
|
||||
if (cell.nof_ports == 1) {
|
||||
/* Transmission mode 1 */
|
||||
n = srslte_ue_dl_decode(&ue_dl, sf_buffer, data, 0, sfn*10+srslte_ue_sync_get_sfidx(&ue_sync), acks);
|
||||
n = srslte_ue_dl_decode(&ue_dl, data, 0, sfn*10+srslte_ue_sync_get_sfidx(&ue_sync), acks);
|
||||
} else {
|
||||
if (prog_args.rf_nof_rx_ant == 1) {
|
||||
/* Transmission mode 2 */
|
||||
n = srslte_ue_dl_decode(&ue_dl, sf_buffer, data, 1, sfn * 10 + srslte_ue_sync_get_sfidx(&ue_sync),
|
||||
n = srslte_ue_dl_decode(&ue_dl, data, 1, sfn * 10 + srslte_ue_sync_get_sfidx(&ue_sync),
|
||||
acks);
|
||||
} else {
|
||||
/* Transmission mode 3 */
|
||||
n = srslte_ue_dl_decode(&ue_dl, sf_buffer, data, 2, sfn * 10 + srslte_ue_sync_get_sfidx(&ue_sync),
|
||||
n = srslte_ue_dl_decode(&ue_dl, data, 2, sfn * 10 + srslte_ue_sync_get_sfidx(&ue_sync),
|
||||
acks);
|
||||
if (n < 1) {
|
||||
/* Transmission mode 4 */
|
||||
n = srslte_ue_dl_decode(&ue_dl, sf_buffer, data, 3, sfn * 10 + srslte_ue_sync_get_sfidx(&ue_sync),
|
||||
n = srslte_ue_dl_decode(&ue_dl, data, 3, sfn * 10 + srslte_ue_sync_get_sfidx(&ue_sync),
|
||||
acks);
|
||||
}
|
||||
}
|
||||
}
|
||||
}else{ // MBSFN subframe
|
||||
n = srslte_ue_dl_decode_mbsfn(&ue_dl,
|
||||
sf_buffer,
|
||||
data[0],
|
||||
sfn*10+srslte_ue_sync_get_sfidx(&ue_sync));
|
||||
if(n>0){
|
||||
|
|
|
@ -113,8 +113,16 @@ SRSLTE_API void srslte_ofdm_rx_free(srslte_ofdm_t *q);
|
|||
SRSLTE_API void srslte_ofdm_rx_slot(srslte_ofdm_t *q,
|
||||
int slot_in_sf);
|
||||
|
||||
SRSLTE_API void srslte_ofdm_rx_slot_ng(srslte_ofdm_t *q,
|
||||
cf_t *input,
|
||||
cf_t *output);
|
||||
|
||||
SRSLTE_API void srslte_ofdm_rx_sf(srslte_ofdm_t *q);
|
||||
|
||||
SRSLTE_API void srslte_ofdm_rx_sf_ng(srslte_ofdm_t *q,
|
||||
cf_t *input,
|
||||
cf_t *output);
|
||||
|
||||
SRSLTE_API int srslte_ofdm_tx_init(srslte_ofdm_t *q,
|
||||
srslte_cp_t cp_type,
|
||||
cf_t *in_buffer,
|
||||
|
|
|
@ -131,7 +131,7 @@ typedef struct SRSLTE_API {
|
|||
|
||||
/* This function shall be called just after the initial synchronization */
|
||||
SRSLTE_API int srslte_ue_dl_init(srslte_ue_dl_t *q,
|
||||
cf_t *in_buffer[SRSLTE_MAX_PORTS],
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint32_t max_prb,
|
||||
uint32_t nof_rx_antennas);
|
||||
|
||||
|
@ -141,18 +141,20 @@ SRSLTE_API int srslte_ue_dl_set_cell(srslte_ue_dl_t *q,
|
|||
srslte_cell_t cell);
|
||||
|
||||
int srslte_ue_dl_decode_fft_estimate(srslte_ue_dl_t *q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint32_t sf_idx,
|
||||
uint32_t *cfi);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_decode_fft_estimate_mbsfn(srslte_ue_dl_t *q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint32_t sf_idx,
|
||||
uint32_t *cfi,
|
||||
srslte_sf_t sf_type);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_decode_fft_estimate_noguru(srslte_ue_dl_t *q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint32_t sf_idx,
|
||||
uint32_t *cfi);
|
||||
|
||||
int srslte_ue_dl_decode_estimate(srslte_ue_dl_t *q,
|
||||
SRSLTE_API int srslte_ue_dl_decode_estimate(srslte_ue_dl_t *q,
|
||||
uint32_t sf_idx,
|
||||
uint32_t *cfi);
|
||||
|
||||
|
@ -195,14 +197,12 @@ SRSLTE_API void srslte_ue_dl_set_sample_offset(srslte_ue_dl_t * q,
|
|||
float sample_offset);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_decode(srslte_ue_dl_t *q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint8_t *data[SRSLTE_MAX_CODEWORDS],
|
||||
uint32_t tm,
|
||||
uint32_t tti,
|
||||
bool acks[SRSLTE_MAX_CODEWORDS]);
|
||||
|
||||
SRSLTE_API int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint8_t *data[SRSLTE_MAX_CODEWORDS],
|
||||
uint32_t tm,
|
||||
uint32_t tti,
|
||||
|
@ -216,7 +216,6 @@ SRSLTE_API int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q,
|
|||
* srslte_pmch_decode_multi
|
||||
*/
|
||||
SRSLTE_API int srslte_ue_dl_decode_mbsfn(srslte_ue_dl_t * q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint8_t *data,
|
||||
uint32_t tti);
|
||||
|
||||
|
|
|
@ -380,15 +380,8 @@ void srslte_ofdm_tx_free(srslte_ofdm_t *q) {
|
|||
srslte_ofdm_free_(q);
|
||||
}
|
||||
|
||||
/* Transforms input samples into output OFDM symbols.
|
||||
* Performs FFT on a each symbol and removes CP.
|
||||
*/
|
||||
void srslte_ofdm_rx_slot(srslte_ofdm_t *q, int slot_in_sf) {
|
||||
cf_t *output = q->out_buffer + slot_in_sf * q->nof_re * q->nof_symbols;
|
||||
|
||||
#ifdef AVOID_GURU
|
||||
void srslte_ofdm_rx_slot_ng(srslte_ofdm_t *q, cf_t *input, cf_t *output) {
|
||||
uint32_t i;
|
||||
cf_t *input = q->in_buffer + slot_in_sf * q->slot_sz;
|
||||
for (i=0;i<q->nof_symbols;i++) {
|
||||
input += SRSLTE_CP_ISNORM(q->cp)?SRSLTE_CP_LEN_NORM(i, q->symbol_sz):SRSLTE_CP_LEN_EXT(q->symbol_sz);
|
||||
srslte_dft_run_c(&q->fft_plan, input, q->tmp);
|
||||
|
@ -396,6 +389,16 @@ void srslte_ofdm_rx_slot(srslte_ofdm_t *q, int slot_in_sf) {
|
|||
input += q->symbol_sz;
|
||||
output += q->nof_re;
|
||||
}
|
||||
}
|
||||
|
||||
/* Transforms input samples into output OFDM symbols.
|
||||
* Performs FFT on a each symbol and removes CP.
|
||||
*/
|
||||
void srslte_ofdm_rx_slot(srslte_ofdm_t *q, int slot_in_sf) {
|
||||
cf_t *output = q->out_buffer + slot_in_sf * q->nof_re * q->nof_symbols;
|
||||
|
||||
#ifdef AVOID_GURU
|
||||
srslte_ofdm_rx_slot_ng(q, q->in_buffer + slot_in_sf * q->slot_sz, q->out_buffer + slot_in_sf * q->nof_re * q->nof_symbols);
|
||||
#else
|
||||
float norm = 1.0f/sqrtf(q->fft_plan.size);
|
||||
cf_t *tmp = q->tmp + slot_in_sf * q->symbol_sz * q->nof_symbols;
|
||||
|
@ -462,6 +465,22 @@ void srslte_ofdm_rx_sf(srslte_ofdm_t *q) {
|
|||
}
|
||||
}
|
||||
|
||||
void srslte_ofdm_rx_sf_ng(srslte_ofdm_t *q, cf_t *input, cf_t *output) {
|
||||
uint32_t n;
|
||||
if (q->freq_shift) {
|
||||
srslte_vec_prod_ccc(q->in_buffer, q->shift_buffer, q->in_buffer, 2*q->slot_sz);
|
||||
}
|
||||
if(!q->mbsfn_subframe){
|
||||
for (n=0;n<2;n++) {
|
||||
srslte_ofdm_rx_slot_ng(q, &input[n*q->slot_sz], &output[n*q->nof_re*q->nof_symbols]);
|
||||
}
|
||||
}
|
||||
else{
|
||||
srslte_ofdm_rx_slot_mbsfn(q, &q->in_buffer[0*q->slot_sz], &q->out_buffer[0*q->nof_re*q->nof_symbols]);
|
||||
srslte_ofdm_rx_slot(q, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/* Transforms input OFDM symbols into output samples.
|
||||
* Performs FFT on a each symbol and adds CP.
|
||||
*/
|
||||
|
|
|
@ -182,7 +182,7 @@ int main(int argc, char **argv) {
|
|||
srslte_filesource_read(&fsrc, input_buffer[0], flen);
|
||||
INFO("Reading %d samples sub-frame %d\n", flen, sf_idx);
|
||||
|
||||
ret = srslte_ue_dl_decode(&ue_dl, input_buffer, data, 0, sf_idx, acks);
|
||||
ret = srslte_ue_dl_decode(&ue_dl, data, 0, sf_idx, acks);
|
||||
if(ret > 0) {
|
||||
printf("PDSCH Decoded OK!\n");
|
||||
} else if (ret == 0) {
|
||||
|
|
|
@ -187,7 +187,7 @@ int main(int argc, char **argv) {
|
|||
|
||||
srslte_filesource_read(&fsrc, input_buffer[0], flen);
|
||||
INFO("Reading %d samples sub-frame %d\n", flen, sf_idx);
|
||||
ret = srslte_ue_dl_decode_mbsfn(&ue_dl, input_buffer, data[0], sf_idx);
|
||||
ret = srslte_ue_dl_decode_mbsfn(&ue_dl, data[0], sf_idx);
|
||||
if(ret > 0) {
|
||||
printf("PMCH Decoded OK!\n");
|
||||
} else if (ret < 0) {
|
||||
|
|
|
@ -359,20 +359,20 @@ void srslte_ue_dl_set_sample_offset(srslte_ue_dl_t * q, float sample_offset) {
|
|||
* - PDCCH decoding: Find DCI for RNTI given by previous call to srslte_ue_dl_set_rnti()
|
||||
* - PDSCH decoding: Decode TB scrambling with RNTI given by srslte_ue_dl_set_rnti()
|
||||
*/
|
||||
int srslte_ue_dl_decode(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS], uint8_t *data[SRSLTE_MAX_CODEWORDS],
|
||||
int srslte_ue_dl_decode(srslte_ue_dl_t *q, uint8_t *data[SRSLTE_MAX_CODEWORDS],
|
||||
uint32_t tm, uint32_t tti, bool acks[SRSLTE_MAX_CODEWORDS]) {
|
||||
return srslte_ue_dl_decode_rnti(q, input, data, tm, tti, q->current_rnti, acks);
|
||||
return srslte_ue_dl_decode_rnti(q, data, tm, tti, q->current_rnti, acks);
|
||||
}
|
||||
|
||||
|
||||
int srslte_ue_dl_decode_fft_estimate(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS], uint32_t sf_idx, uint32_t *cfi){
|
||||
int srslte_ue_dl_decode_fft_estimate(srslte_ue_dl_t *q, uint32_t sf_idx, uint32_t *cfi){
|
||||
|
||||
return srslte_ue_dl_decode_fft_estimate_mbsfn(q, input, sf_idx, cfi, SRSLTE_SF_NORM);
|
||||
return srslte_ue_dl_decode_fft_estimate_mbsfn(q, sf_idx, cfi, SRSLTE_SF_NORM);
|
||||
}
|
||||
|
||||
int srslte_ue_dl_decode_fft_estimate_mbsfn(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS], uint32_t sf_idx, uint32_t *cfi, srslte_sf_t sf_type)
|
||||
int srslte_ue_dl_decode_fft_estimate_mbsfn(srslte_ue_dl_t *q, uint32_t sf_idx, uint32_t *cfi, srslte_sf_t sf_type)
|
||||
{
|
||||
if (input && q && cfi && sf_idx < SRSLTE_NSUBFRAMES_X_FRAME) {
|
||||
if (q && cfi && sf_idx < SRSLTE_NSUBFRAMES_X_FRAME) {
|
||||
|
||||
/* Run FFT for all subframe data */
|
||||
for (int j=0;j<q->nof_rx_antennas;j++) {
|
||||
|
@ -398,6 +398,32 @@ int srslte_ue_dl_decode_fft_estimate_mbsfn(srslte_ue_dl_t *q, cf_t *input[SRSLTE
|
|||
return SRSLTE_ERROR_INVALID_INPUTS;
|
||||
}
|
||||
}
|
||||
|
||||
int srslte_ue_dl_decode_fft_estimate_noguru(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS], uint32_t sf_idx, uint32_t *cfi)
|
||||
{
|
||||
if (input && q && cfi && sf_idx < SRSLTE_NSUBFRAMES_X_FRAME) {
|
||||
|
||||
/* Run FFT for all subframe data */
|
||||
for (int j=0;j<q->nof_rx_antennas;j++) {
|
||||
srslte_ofdm_rx_sf_ng(&q->fft[j], input[j], q->sf_symbols_m[j]);
|
||||
|
||||
/* Correct SFO multiplying by complex exponential in the time domain */
|
||||
if (q->sample_offset) {
|
||||
int nsym = SRSLTE_CP_NSYMB(q->cell.cp);
|
||||
for (int i=0;i<2*nsym;i++) {
|
||||
srslte_cfo_correct(&q->sfo_correct,
|
||||
&q->sf_symbols_m[j][i*q->cell.nof_prb*SRSLTE_NRE],
|
||||
&q->sf_symbols_m[j][i*q->cell.nof_prb*SRSLTE_NRE],
|
||||
q->sample_offset / q->fft[j].symbol_sz);
|
||||
}
|
||||
}
|
||||
}
|
||||
return srslte_ue_dl_decode_estimate_mbsfn(q, sf_idx, cfi, SRSLTE_SF_NORM);
|
||||
} else {
|
||||
return SRSLTE_ERROR_INVALID_INPUTS;
|
||||
}
|
||||
}
|
||||
|
||||
int srslte_ue_dl_decode_estimate(srslte_ue_dl_t *q, uint32_t sf_idx, uint32_t *cfi) {
|
||||
|
||||
return srslte_ue_dl_decode_estimate_mbsfn(q, sf_idx, cfi, SRSLTE_SF_NORM);
|
||||
|
@ -468,7 +494,7 @@ int srslte_ue_dl_cfg_grant(srslte_ue_dl_t *q, srslte_ra_dl_grant_t *grant, uint3
|
|||
}
|
||||
}
|
||||
|
||||
int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS],
|
||||
int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q,
|
||||
uint8_t *data[SRSLTE_MAX_CODEWORDS], uint32_t tm, uint32_t tti, uint16_t rnti,
|
||||
bool acks[SRSLTE_MAX_CODEWORDS]) {
|
||||
srslte_mimo_type_t mimo_type;
|
||||
|
@ -479,7 +505,7 @@ int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS],
|
|||
uint32_t cfi;
|
||||
uint32_t sf_idx = tti%10;
|
||||
|
||||
if ((ret = srslte_ue_dl_decode_fft_estimate_mbsfn(q, input, sf_idx, &cfi, SRSLTE_SF_NORM)) < 0) {
|
||||
if ((ret = srslte_ue_dl_decode_fft_estimate_mbsfn(q, sf_idx, &cfi, SRSLTE_SF_NORM)) < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -621,7 +647,6 @@ int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q, cf_t *input[SRSLTE_MAX_PORTS],
|
|||
|
||||
|
||||
int srslte_ue_dl_decode_mbsfn(srslte_ue_dl_t * q,
|
||||
cf_t *input[SRSLTE_MAX_PORTS],
|
||||
uint8_t *data,
|
||||
uint32_t tti)
|
||||
{
|
||||
|
@ -630,7 +655,7 @@ int srslte_ue_dl_decode_mbsfn(srslte_ue_dl_t * q,
|
|||
uint32_t cfi;
|
||||
uint32_t sf_idx = tti%10;
|
||||
|
||||
if ((ret = srslte_ue_dl_decode_fft_estimate_mbsfn(q, input, sf_idx, &cfi, SRSLTE_SF_MBSFN)) < 0) {
|
||||
if ((ret = srslte_ue_dl_decode_fft_estimate_mbsfn(q, sf_idx, &cfi, SRSLTE_SF_MBSFN)) < 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1054,7 +1054,7 @@ phch_recv::measure::ret_code phch_recv::measure::run_multiple_subframes(cf_t *in
|
|||
phch_recv::measure::ret_code phch_recv::measure::run_subframe(uint32_t sf_idx)
|
||||
{
|
||||
uint32_t cfi = 0;
|
||||
if (srslte_ue_dl_decode_fft_estimate(&ue_dl, buffer, sf_idx, &cfi)) {
|
||||
if (srslte_ue_dl_decode_fft_estimate(&ue_dl, sf_idx, &cfi)) {
|
||||
log_h->error("SYNC: Measuring RSRP: Estimating channel\n");
|
||||
return ERROR;
|
||||
}
|
||||
|
|
|
@ -420,7 +420,7 @@ bool phch_worker::extract_fft_and_pdcch_llr() {
|
|||
srslte_chest_dl_set_noise_alg(&ue_dl.chest, SRSLTE_NOISE_ALG_PSS);
|
||||
}
|
||||
|
||||
if (srslte_ue_dl_decode_fft_estimate(&ue_dl, signal_buffer, tti%10, &cfi) < 0) {
|
||||
if (srslte_ue_dl_decode_fft_estimate(&ue_dl, tti%10, &cfi) < 0) {
|
||||
Error("Getting PDCCH FFT estimate\n");
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue