From 792e2f7f8f65bcf9a7ee70d773533e406a6a3110 Mon Sep 17 00:00:00 2001 From: Andre Puschmann Date: Thu, 24 Oct 2019 17:49:10 +0200 Subject: [PATCH] add NB-IoT scrambling sequences --- lib/include/srslte/phy/common/sequence.h | 25 +++++++++ lib/src/phy/phch/sequences.c | 65 ++++++++++++++++++++++-- 2 files changed, 86 insertions(+), 4 deletions(-) diff --git a/lib/include/srslte/phy/common/sequence.h b/lib/include/srslte/phy/common/sequence.h index 29fa7109c..f909fbae9 100644 --- a/lib/include/srslte/phy/common/sequence.h +++ b/lib/include/srslte/phy/common/sequence.h @@ -96,4 +96,29 @@ SRSLTE_API int srslte_sequence_pmch(srslte_sequence_t *seq, uint32_t mbsfn_id, uint32_t len); +SRSLTE_API int srslte_sequence_npbch(srslte_sequence_t* seq, srslte_cp_t cp, uint32_t cell_id); + +SRSLTE_API int srslte_sequence_npbch_r14(srslte_sequence_t* seq, uint32_t n_id_ncell, uint32_t nf); + +SRSLTE_API int srslte_sequence_npdsch(srslte_sequence_t* seq, + uint16_t rnti, + int q, + uint32_t nf, + uint32_t nslot, + uint32_t cell_id, + uint32_t len); + +SRSLTE_API int srslte_sequence_npdsch_bcch_r14(srslte_sequence_t* seq, uint32_t nf, uint32_t n_id_ncell, uint32_t len); + +SRSLTE_API int srslte_sequence_npdcch(srslte_sequence_t* seq, uint32_t nslot, uint32_t cell_id, uint32_t len); + +SRSLTE_API int srslte_sequence_npusch(srslte_sequence_t* seq, + uint16_t rnti, + uint32_t nf, + uint32_t nslot, + uint32_t cell_id, + uint32_t len); + +SRSLTE_API int srslte_sequence_nprach(srslte_sequence_t* seq, uint32_t cell_id); + #endif // SRSLTE_SEQUENCE_H diff --git a/lib/src/phy/phch/sequences.c b/lib/src/phy/phch/sequences.c index ba9299558..f9b78ca79 100644 --- a/lib/src/phy/phch/sequences.c +++ b/lib/src/phy/phch/sequences.c @@ -73,8 +73,65 @@ int srslte_sequence_pucch(srslte_sequence_t *seq, uint16_t rnti, uint32_t nslot, return srslte_sequence_LTE_pr(seq, 12 * 4, ((((nslot / 2) + 1) * (2 * cell_id + 1)) << 16) + rnti); } -int srslte_sequence_pmch(srslte_sequence_t *seq, uint32_t nslot, uint32_t mbsfn_id , uint32_t len){ - bzero(seq,sizeof(srslte_sequence_t)); - return srslte_sequence_LTE_pr(seq, len, (((nslot/2)<<9) + mbsfn_id)); - +int srslte_sequence_pmch(srslte_sequence_t* seq, uint32_t nslot, uint32_t mbsfn_id, uint32_t len) +{ + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, len, (((nslot / 2) << 9) + mbsfn_id)); +} + +/** + * 36.211 6.6.1 and 10.2.4.1 (13.2.0) + */ +int srslte_sequence_npbch(srslte_sequence_t *seq, srslte_cp_t cp, uint32_t cell_id) { + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, 1600, cell_id); +} + +/** + * 36.211 6.6.1 and 10.2.4.4 (14.2.0) + */ +int srslte_sequence_npbch_r14(srslte_sequence_t *seq, uint32_t n_id_ncell, uint32_t nf) +{ + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, 200, (n_id_ncell + 1) * (((nf % 8) + 1) * ((nf % 8) + 1) * ((nf % 8) + 1)) * 512 + n_id_ncell); +} + +/** + * 36.211 6.3.1 and 10.2.3.1 (13.2.0) + */ +int srslte_sequence_npdsch(srslte_sequence_t *seq, uint16_t rnti, int q, uint32_t nf, uint32_t nslot, uint32_t cell_id, uint32_t len) { + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, len, (rnti<<14) + ((nf % 2)<<13) + ((nslot/2)<<9) + cell_id); +} + +/** + * 36.211 6.3.1 and 10.2.3.1 (14.2.0) + */ +int srslte_sequence_npdsch_bcch_r14(srslte_sequence_t *seq, uint32_t nf, uint32_t n_id_ncell, uint32_t len) { + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, len, (0xffff<<15) + (n_id_ncell + 1) * ((nf % 61)+1)); +} + +/** + * 36.211 6.6.1 and 10.2.5.2 (13.2.0) + */ +int srslte_sequence_npdcch(srslte_sequence_t *seq, uint32_t nslot, uint32_t cell_id, uint32_t len) { + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, len, (nslot/2) * 512 + cell_id); +} + +/** + * 36.211 5.3.1 and 10.1.3.1 (13.2.0) + */ +int srslte_sequence_npusch(srslte_sequence_t *seq, uint16_t rnti, uint32_t nf, uint32_t nslot, uint32_t cell_id, uint32_t len) { + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, len, (rnti<<14) + ((nf % 2)<<13) + ((nslot/2)<<9) + cell_id); +} + +/** + * 36.211 7.2.0 and 10.1.6.1 (13.2.0) + */ +int srslte_sequence_nprach(srslte_sequence_t *seq, uint32_t cell_id) { + bzero(seq, sizeof(srslte_sequence_t)); + return srslte_sequence_LTE_pr(seq, 1600, cell_id); } \ No newline at end of file