From cab3d8823ffbb01aa08bf1bc8e1a0d7e68d7b10d Mon Sep 17 00:00:00 2001 From: Raymond Knopp <raymond.knopp@eurecom.fr> Date: Mon, 26 Jan 2015 10:25:19 +0000 Subject: [PATCH] new code for UE band scanning, more cleanup of warnings in openair1 git-svn-id: http://svn.eurecom.fr/openair4G/trunk@6424 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- .../CODING/3gpplte_turbo_decoder_sse_8bit.c | 10 +- openair1/PHY/LTE_ESTIMATION/defs.h | 9 +- openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c | 10 +- .../PHY/LTE_ESTIMATION/lte_sync_timefreq.c | 191 ++++++++++++++++++ .../PHY/LTE_ESTIMATION/lte_sync_timefreq.m | 47 +++++ .../lte_ul_channel_estimation.c | 18 -- openair1/PHY/LTE_REFSIG/lte_ul_ref.c | 62 ------ openair1/PHY/LTE_TRANSPORT/dci.c | 10 +- openair1/PHY/LTE_TRANSPORT/dci_tools.c | 15 +- openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c | 26 +-- openair1/PHY/LTE_TRANSPORT/pucch.c | 21 +- openair1/PHY/LTE_TRANSPORT/rar_tools.c | 7 - openair1/PHY/LTE_TRANSPORT/sss.c | 22 -- openair1/PHY/LTE_TRANSPORT/ulsch_coding.c | 8 - openair1/PHY/MODULATION/ofdm_mod.c | 19 -- openair1/PHY/MODULATION/slot_fep_ul.c | 44 +--- openair1/PHY/Makefile.inc | 1 + openair1/PHY/TOOLS/cmult_vv.c | 15 +- openair1/PHY/TOOLS/signal_energy.c | 15 +- openair1/PHY/defs.h | 10 + openair1/SCHED/phy_procedures_lte_common.c | 2 +- openair1/SCHED/phy_procedures_lte_ue.c | 29 ++- openair1/SIMULATION/LTE_PHY/Makefile | 1 - 23 files changed, 328 insertions(+), 264 deletions(-) create mode 100644 openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c create mode 100644 openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.m diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c index 5c61a8ed80..ef4d25156b 100644 --- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c +++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c @@ -283,13 +283,16 @@ void compute_beta8(llr_t* alpha,llr_t* beta,llr_t *m_11,llr_t* m_10,unsigned sho __m128i *beta128,*alpha128,*beta_ptr; __m128i beta_max; - int16_t m11,m10,beta0_16,beta1_16,beta2_16,beta3_16,beta4_16,beta5_16,beta6_16,beta7_16,beta0_2,beta1_2,beta2_2,beta3_2,beta_m; + llr_t beta0,beta1; llr_t beta2,beta3,beta4,beta5,beta6,beta7; - __m128i beta_16; + #if 0 + int16_t m11,m10; + int16_t beta0_16,beta1_16,beta2_16,beta3_16,beta4_16,beta5_16,beta6_16,beta7_16,beta0_2,beta1_2,beta2_2,beta3_2,beta_m; + __m128i beta_16; // termination for beta initialization m11=(int16_t)m_11[2+frame_length]; @@ -626,7 +629,8 @@ unsigned char phy_threegpplte_turbo_decoder8(short *y, llr_t m10[n+16] __attribute__ ((aligned(16))); - int *pi2_p,*pi4_p,*pi5_p,*pi6_p; + // int *pi2_p,*pi4_p,*pi5_p,*pi6_p; + int *pi4_p,*pi5_p,*pi6_p; llr_t *s,*s1,*s2,*yp1,*yp2,*yp; __m128i *yp128; unsigned int i,j,iind;//,pi; diff --git a/openair1/PHY/LTE_ESTIMATION/defs.h b/openair1/PHY/LTE_ESTIMATION/defs.h index 96735ed7dd..6da65b0c27 100644 --- a/openair1/PHY/LTE_ESTIMATION/defs.h +++ b/openair1/PHY/LTE_ESTIMATION/defs.h @@ -43,10 +43,17 @@ /*!\brief Timing drift hysterisis in samples*/ #define SYNCH_HYST 1 - +/*! +\brief This function is used for time-frequency scanning prior to complete cell search. It scans +over the entire LTE band for maximum correlation and keeps the 10 best scores and the correspoding frequency offset (5 kHz granularity) for each of the 3 PSS sequences. +\param ue Pointer to UE variables +\param band index of lte band +\param DL_freq Central RF Frequency in Hz +*/ /*! \brief This function allocates memory needed for the synchronization. \param frame_parms LTE DL frame parameter structure + */ int lte_sync_time_init(LTE_DL_FRAME_PARMS *frame_parms); //LTE_UE_COMMON *common_vars diff --git a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c index 7a3ceb2da2..4283c245b6 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_adjust_sync.c @@ -190,15 +190,7 @@ int lte_est_timing_advance_pusch(PHY_VARS_eNB* phy_vars_eNB,uint8_t UE_id,uint8_ LTE_DL_FRAME_PARMS *frame_parms = &phy_vars_eNB->lte_frame_parms; LTE_eNB_PUSCH *eNB_pusch_vars = phy_vars_eNB->lte_eNB_pusch_vars[UE_id]; int32_t **ul_ch_estimates_time= eNB_pusch_vars->drs_ch_estimates_time[0]; - int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx; - uint8_t harq_pid; - uint8_t Ns = 1; //we take the estimate from the second slot - uint8_t cyclic_shift = 0;//(frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift + - //phy_vars_eNB->ulsch_eNB[UE_id]->harq_processes[harq_pid]->n_DMRS2 + - //frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.nPRS[(subframe<<1)+Ns]) % 12; - - harq_pid = subframe2harq_pid(frame_parms,phy_vars_eNB->proc[sched_subframe].frame_rx,subframe); - + uint8_t cyclic_shift = 0; int sync_pos = (frame_parms->ofdm_symbol_size-cyclic_shift*frame_parms->ofdm_symbol_size/12)%(frame_parms->ofdm_symbol_size); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c new file mode 100644 index 0000000000..e7587ce697 --- /dev/null +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.c @@ -0,0 +1,191 @@ +/******************************************************************************* + OpenAirInterface + Copyright(c) 1999 - 2014 Eurecom + + OpenAirInterface is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + + OpenAirInterface is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OpenAirInterface.The full GNU General Public License is + included in this distribution in the file called "COPYING". If not, + see <http://www.gnu.org/licenses/>. + + Contact Information + OpenAirInterface Admin: openair_admin@eurecom.fr + OpenAirInterface Tech : openair_tech@eurecom.fr + OpenAirInterface Dev : openair4g-devel@eurecom.fr + + Address : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE + + *******************************************************************************/ + +/*! \file PHY/LTE_ESTIMATION/lte_sync_timefreq.c +* \brief Initial time frequency scan of entire LTE band +* \author R. Knopp +* \date 2014 +* \version 0.1 +* \company Eurecom +* \email: raymond.knopp@eurecom.fr +* \note +* \warning +*/ +/* file: lte_sync_timefreq.c + purpose: scan for likely cells over entire LTE band using PSS. Provides coarse frequency offset in addtition to 10 top likelihoods per PSS sequence + author: raymond.knopp@eurecom.fr + date: 23.01.2015 +*/ + +//#include "defs.h" +#include "PHY/defs.h" +#include "PHY/extern.h" + +int16_t pss6144_0[512]__attribute__((aligned(16))) ={-1,0,220,902,897,257,0,0,234,912,911,249,-1,-1,250,918,925,237,0,-1,270,920,934,218,-1,-1,295,913,939,189,0,0,327,892,933,145,-1,0,370,847,908,75,-1,0,431,758,845,-41,-1,0,523,578,700,-251,-1,-1,684,186,346,-688,-1,-1,1042,-842,-727,-1906,0,-1,2570,-5411,-8606,-11078,-18707,2819,-6900,13704,-2921,4880,-13868,12867,3212,31675,29080,13411,14492,-12161,-4346,380,9189,12659,18918,-1,13137,-8312,9729,-13278,-4210,-18444,-17822,-503,-308,18095,18542,3748,8014,-10063,3677,-477,18077,-5577,9518,-28369,-18568,-23434,-18707,2819,1866,3765,402,-13074,-15081,-11423,-17312,158,-15211,6289,-9460,16383,10422,15058,14327,-9459,-9460,-16384,-14800,2480,-1627,222,-15081,-11423,-30899,10197,-9093,31103,11795,14790,298,-1071,-10964,8476,-4210,18443,4468,18297,12087,15225,18542,3748,9032,-11975,-12015,-8164,-13868,12867,2703,16345,1145,4949,-9460,16383,10290,32065,32121,10735,14492,-12161,-3895,1841,8412,14854,18077,5576,15706,-414,17019,-6205,6911,-17611,-12957,-9364,-10719,13397,8630,16834,13163,4191,4947,4300,11795,14790,30157,4933,23119,-20716,-4210,-18444,-3763,5826,16581,4209,14492,-12161,5021,-11782,4494,-13565,-9460,-16384,-19234,4948,1759,20734,18077,5576,8599,-5126,5405,3659,18542,3748,22881,-14000,5014,-26653,-13868,-12868,-4043,7370,14695,-1146,6911,-17611,-4867,-12748,-3775,-10738,-15081,-11423,-20274,10778,5370,21891,18918,0,3825,-11116,-2642,-2520,-1,-1,-734,3537,7768,8755,18918,-1,16401,-15607,857,-23063,-15081,-11423,-7284,8627,13528,2043,6911,-17611,-8213,-12164,-4307,-7302,-13868,-12868,-25462,8974,738,26700,18542,3748,593,-6522,194,9894,18077,5576,17204,-11901,5387,-19247,-9460,-16384,-13867,2880,7748,10123,14492,-12161,-4518,-16475,-3109,-6287,-4210,-18444,-29373,-9674,-19296,23535,11795,14790,1378,-6445,-10157,9188,8630,16834,17089,2574,14642,-6655,6911,-17611,-13757,-11647,-7440,13694,18077,5576,8785,-14723,408,-4409,14492,-12161,-6636,-32768,-32768,-7236,-9460,16383,3840,-3477,-15453,-5947,-13868,12867,-936,14477,5909,13694,18542,3748,7269,-18091,-18025,-5395,-4210,18443,12950,5246,833,678,11795,14790,31610,-7688,6673,-31973,-15081,-11423,1133,1287,5307,-14173,-9460,-16384,-15227,-7689,-18198,1381,-9460,16383,13180,10017,8574,-15187,-15081,-11423,-11396,6178,-4139,-382,-18707,2819,-10883,27787,19864,22312,18077,-5577,-2124,-2956,4762,11856,18542,3748,15952,-8792,9401,-15298,-4210,-18444,-16236,-1797,684,15418,18918,-1,6496,-14298,1898,-4069,14492,-12161,-2799,-31900,-28984,-13171,-13868,12867,5814,79,-8363,-12943,-18707,2819,-5164,12981,3456,4816,-1,0,-1159,1572,263,1207,-1,-1,-642,33,-449,384,0,-1,-440,-492,-708,49,-1,-1,-330,-722,-817,-121,0,-1,-261,-834,-864,-218,-1,-1,-214,-891,-882,-278,-1,0,-178,-918,-884,-316,-1,-1,-151,-929,-877,-341,0,-1,-130,-930,-866,-358,0,0,-112,-925,-852,-369,-1,0}; + +int16_t pss6144_1[512]__attribute__((aligned(16))) = {0,0,-75,-703,-641,-284,-1,-1,-77,-682,-622,-269,0,0,-81,-650,-592,-247,0,0,-87,-604,-550,-216,0,0,-94,-536,-488,-170,0,-1,-105,-438,-398,-103,0,0,-121,-291,-260,-3,0,-1,-146,-64,-44,154,-1,0,-183,308,320,416,-1,-1,-248,979,1012,908,0,0,-385,2438,2687,2103,-1,0,-1029,7780,12580,10062,18077,-5577,6808,-12074,5571,-9136,1413,-18866,-20051,-12000,-14063,16643,14492,12160,9180,-9248,-739,1189,18918,0,11581,-29398,-22453,-21889,-17045,8208,2659,1930,-9344,-7587,-15081,11422,6001,20595,20667,5444,15630,-10657,2688,-12056,2550,-1019,18077,-5577,12734,-29346,-15053,-28505,-18334,-4669,-1915,-1922,-1177,-13323,-9460,-16384,-19264,-13938,-26108,1564,-9460,16383,8111,1321,-5134,-14849,-18334,-4669,-14428,3684,-14417,7858,-4210,18443,15161,6283,4109,-16836,-17045,-8209,-11025,5771,-8448,1046,-15081,11422,5322,23247,22499,-674,1413,-18866,-10967,-3156,1594,-2038,-9460,-16384,-29439,2511,-9786,27468,14492,12160,2879,-4565,-3994,8819,15630,10656,20286,-13171,-171,-24168,-13868,-12868,-9897,-1934,-1535,-5328,-7781,-17244,-27765,-11606,-27629,13566,-4210,18443,848,317,-13296,-2621,-17045,8208,-12988,16121,-1931,22720,14492,12160,6065,-9110,-15296,-1993,-9460,16383,2388,13523,3104,12712,15630,10656,15155,-12654,-12784,-14450,-15081,11422,3202,11354,-2572,4187,1413,18865,25769,7933,13949,-22090,-13868,-12868,-5746,5444,754,-6292,-18334,-4669,-15498,21223,12113,22762,18918,0,4780,-8566,-1382,-2244,-1,0,-1380,2321,4966,8534,18918,0,13528,-21869,-10693,-23921,-18334,-4669,-5954,2495,-1904,-7586,-13868,-12868,-26234,-1033,-19817,18462,1413,18865,4783,136,-11497,-2792,-15081,11422,-6250,18298,3319,19564,15630,10656,9329,-9042,-12967,-4581,-9460,16383,5794,14245,4795,9919,14492,12160,20513,-9686,-7530,-19197,-17045,8208,4250,12828,-761,688,-4210,18443,25435,17146,23871,-18131,-7781,-17244,-3975,3996,6561,-7492,-13868,-12868,-20972,12234,1201,24266,15630,10656,9506,-948,2451,4888,14492,12160,28553,-5257,12482,-26639,-9460,-16384,-2690,-359,8155,-7807,1413,-18866,-11961,-19146,-22855,-6903,-15081,11422,5002,6796,453,-12322,-17045,-8209,-16763,4862,-13084,10100,-4210,18443,13885,8559,3961,-14225,-18334,-4669,-10421,11873,-5262,6476,-9460,16383,14280,21830,21641,-9602,-9460,-16384,-11078,7683,2560,-585,-18334,-4669,-17288,27291,18985,25813,18077,-5577,-2285,-1696,9035,8468,15630,-10657,-5747,-20618,-20899,-4988,-15081,11422,-2027,11888,-3063,1450,-17045,8208,-7859,30392,19607,24841,18918,-1,1271,47,3357,12686,14492,12160,21317,3859,20355,-11253,1413,-18866,-10826,-254,6990,12044,18077,-5577,2296,-15923,-6286,-4669,0,-1,349,-3376,-1982,-1440,0,0,151,-1328,-786,-592,-1,0,72,-483,-237,-200,-1,-1,27,-37,66,18,0,0,-1,229,251,153,0,-1,-19,398,370,240,-1,-1,-31,510,449,299,-1,0,-40,586,504,339,-1,-1,-46,639,541,367,0,0,-50,675,567,386,0,0}; + +int16_t pss6144_2[512]__attribute__((aligned(16))) = {0,0,584,-400,-53,-700,-1,0,567,-387,-50,-676,-1,-1,541,-368,-46,-640,-1,0,504,-340,-40,-587,-1,-1,449,-300,-31,-511,0,-1,370,-241,-19,-399,0,-1,251,-154,-1,-230,-1,0,66,-19,27,36,0,0,-237,199,72,482,0,0,-786,591,151,1327,0,0,-1982,1439,349,3375,-1,0,-6286,4668,2296,15922,18077,5576,6990,-12045,-10826,253,1413,18865,20355,11252,21317,-3860,14492,-12161,3357,-12687,1271,-48,18918,0,19607,-24842,-7859,-30393,-17045,-8209,-3063,-1451,-2027,-11889,-15081,-11423,-20899,4987,-5747,20617,15630,10656,9035,-8469,-2285,1695,18077,5576,18985,-25814,-17288,-27292,-18334,4668,2560,584,-11078,-7684,-9460,16383,21641,9601,14280,-21831,-9460,-16384,-5262,-6477,-10421,-11874,-18334,4668,3961,14224,13885,-8560,-4210,-18444,-13084,-10101,-16763,-4863,-17045,8208,453,12321,5002,-6797,-15081,-11423,-22855,6902,-11961,19145,1413,18865,8155,7806,-2690,358,-9460,16383,12482,26638,28553,5256,14492,-12161,2451,-4889,9506,947,15630,-10657,1201,-24267,-20972,-12235,-13868,12867,6561,7491,-3975,-3997,-7781,17243,23871,18130,25435,-17147,-4210,-18444,-761,-689,4250,-12829,-17045,-8209,-7530,19196,20513,9685,14492,-12161,4795,-9920,5794,-14246,-9460,-16384,-12967,4580,9329,9041,15630,-10657,3319,-19565,-6250,-18299,-15081,-11423,-11497,2791,4783,-137,1413,-18866,-19817,-18463,-26234,1032,-13868,12867,-1904,7585,-5954,-2496,-18334,4668,-10693,23920,13528,21868,18918,-1,4966,-8535,-1380,-2322,-1,0,-1382,2243,4780,8565,18918,-1,12113,-22763,-15498,-21224,-18334,4668,754,6291,-5746,-5445,-13868,12867,13949,22089,25769,-7934,1413,-18866,-2572,-4188,3202,-11355,-15081,-11423,-12784,14449,15155,12653,15630,-10657,3104,-12713,2388,-13524,-9460,-16384,-15296,1992,6065,9109,14492,-12161,-1931,-22721,-12988,-16122,-17045,-8209,-13296,2620,848,-318,-4210,-18444,-27629,-13567,-27765,11605,-7781,17243,-1535,5327,-9897,1933,-13868,12867,-171,24167,20286,13170,15630,-10657,-3994,-8820,2879,4564,14492,-12161,-9786,-27469,-29439,-2512,-9460,16383,1594,2037,-10967,3155,1413,18865,22499,673,5322,-23248,-15081,-11423,-8448,-1047,-11025,-5772,-17045,8208,4109,16835,15161,-6284,-4210,-18444,-14417,-7859,-14428,-3685,-18334,4668,-5134,14848,8111,-1322,-9460,-16384,-26108,-1565,-19264,13937,-9460,16383,-1177,13322,-1915,1921,-18334,4668,-15053,28504,12734,29345,18077,5576,2550,1018,2688,12055,15630,10656,20667,-5445,6001,-20596,-15081,-11423,-9344,7586,2659,-1931,-17045,-8209,-22453,21888,11581,29397,18918,0,-739,-1190,9180,9247,14492,-12161,-14063,-16644,-20051,11999,1413,18865,5571,9135,6808,12073,18077,5576,12580,-10063,-1029,-7781,-1,-1,2687,-2104,-385,-2439,0,-1,1012,-909,-248,-980,-1,-1,320,-417,-183,-309,-1,0,-44,-155,-146,63,-1,0,-260,2,-121,290,-1,0,-398,102,-105,437,-1,0,-488,169,-94,535,0,0,-550,215,-87,603,-1,-1,-592,246,-81,649,0,0,-622,268,-77,681,0,0}; + +void lte_sync_timefreq(PHY_VARS_UE *ue,int band,int DL_freq) { + + UE_SCAN_INFO_t *scan_info = &ue->scan_info[band]; + int16_t spectrum[12288] __attribute__((aligned(16))); + int16_t spectrum_p5ms[12288] __attribute__((aligned(16))); + int i,f,f2; + __m128i autocorr0[256/4],autocorr1[256/4],autocorr2[256/4]; + __m128i autocorr0_t[256/4],autocorr1_t[256/4],autocorr2_t[256/4]; + __m128i tmp_t[256/4]; + int32_t *rxp; + int16_t *sp; + __m128i *sp2; + __m128i s; + int re; + __m128i mmtmp00,mmtmp01,mmtmp02,mmtmp10,mmtmp11,mmtmp12; + int maxcorr[3],minamp,pos,pssind; + + for (f = -2000;f<1999;f++){ // this is -10MHz to 10 MHz in 5 kHz steps + + for (i=0;i<38400*4;i+=3072) { // steps of 200 us with 100 us overlap, 0 to 5s + //compute frequency-domain representation of 6144-sample chunk + + + for (rxp = &ue->lte_ue_common_vars.rxdata[0][i],sp=spectrum;;rxp = &ue->lte_ue_common_vars.rxdata[0][i+38400*4],sp=spectrum_p5ms) { + //compute frequency-domain representation of 6144-sample chunk + fft6144((int16_t *)rxp, + sp); + + + + + if ((f<-256)||(f>=0)) { // no split around DC + sp2 = (f<0) ? (__m128i*)&sp[6144] : (__m128i*)sp; + for (re = 0; re<256/4; re++) { // loop over 256 points of upsampled PSS + f2 = f>>2; + s = sp2[f2]; + mmtmp00 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_0)[re],s),15); + mmtmp01 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_1)[re],s),15); + mmtmp02 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_2)[re],s),15); + + s = _mm_shufflelo_epi16(s,_MM_SHUFFLE(2,3,0,1)); + s = _mm_shufflehi_epi16(s,_MM_SHUFFLE(2,3,0,1)); + s = _mm_sign_epi16(s,*(__m128i*)&conjugate[0]); + mmtmp10 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_0)[re],s),15); + mmtmp11 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_1)[re],s),15); + mmtmp12 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_2)[re],s),15); + + autocorr0[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp00,mmtmp10),_mm_unpackhi_epi32(mmtmp00,mmtmp10)); + autocorr1[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp01,mmtmp11),_mm_unpackhi_epi32(mmtmp01,mmtmp11)); + autocorr2[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp02,mmtmp12),_mm_unpackhi_epi32(mmtmp02,mmtmp12)); + + } + } + else { + sp2 = (__m128i*)&sp[6144]; + for (re = 0; re<(256+f)/4; re++) { // loop over 256 points of upsampled PSS + f2 = f>>2; + s = sp2[f2]; + mmtmp00 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_0)[re],s),15); + mmtmp01 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_1)[re],s),15); + mmtmp02 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_2)[re],s),15); + + s = _mm_shufflelo_epi16(s,_MM_SHUFFLE(2,3,0,1)); + s = _mm_shufflehi_epi16(s,_MM_SHUFFLE(2,3,0,1)); + s = _mm_sign_epi16(s,*(__m128i*)&conjugate[0]); + mmtmp10 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_0)[re],s),15); + mmtmp11 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_1)[re],s),15); + mmtmp12 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_2)[re],s),15); + + autocorr0[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp00,mmtmp10),_mm_unpackhi_epi32(mmtmp00,mmtmp10)); + autocorr1[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp01,mmtmp11),_mm_unpackhi_epi32(mmtmp01,mmtmp11)); + autocorr2[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp02,mmtmp12),_mm_unpackhi_epi32(mmtmp02,mmtmp12)); + + + } + sp2 = (__m128i*)sp; + for (re = (256+f)/4; re<256/4; re++) { // loop over 256 points of upsampled PSS + f2 = f>>2; + s = sp2[f2]; + mmtmp00 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_0)[re],s),15); + mmtmp01 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_1)[re],s),15); + mmtmp02 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_2)[re],s),15); + + s = _mm_shufflelo_epi16(s,_MM_SHUFFLE(2,3,0,1)); + s = _mm_shufflehi_epi16(s,_MM_SHUFFLE(2,3,0,1)); + s = _mm_sign_epi16(s,*(__m128i*)&conjugate[0]); + mmtmp10 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_0)[re],s),15); + mmtmp11 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_1)[re],s),15); + mmtmp12 = _mm_srai_epi32(_mm_madd_epi16(((__m128i*)pss6144_2)[re],s),15); + + autocorr0[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp00,mmtmp10),_mm_unpackhi_epi32(mmtmp00,mmtmp10)); + autocorr1[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp01,mmtmp11),_mm_unpackhi_epi32(mmtmp01,mmtmp11)); + autocorr2[re] = _mm_packs_epi32(_mm_unpacklo_epi32(mmtmp02,mmtmp12),_mm_unpackhi_epi32(mmtmp02,mmtmp12)); + + } + + } + // ifft, accumulate energy over two half-frames + idft256((int16_t*)autocorr0,(int16_t*)tmp_t,1); + for (re=0;re<(256/4);re++) + autocorr0_t[re] = _mm_adds_epi16(autocorr0_t[re],_mm_madd_epi16(tmp_t[re],tmp_t[re])); + idft256((int16_t*)autocorr1,(int16_t*)autocorr1_t,1); + for (re=0;re<(256/4);re++) + autocorr1_t[re] = _mm_adds_epi16(autocorr1_t[re],_mm_madd_epi16(tmp_t[re],tmp_t[re])); + idft256((int16_t*)autocorr2,(int16_t*)autocorr2_t,1); + for (re=0;re<(256/4);re++) + autocorr2_t[re] = _mm_adds_epi16(autocorr2_t[re],_mm_madd_epi16(tmp_t[re],tmp_t[re])); + } + //compute max correlation over time window + maxcorr[0] = 0; + maxcorr[1] = 0; + maxcorr[2] = 0; + for (re=0;re<256;re++) { + if (((int32_t*)autocorr0_t)[re] > maxcorr[0]) + maxcorr[0]=((int32_t*)autocorr0_t)[re]; + if (((int32_t*)autocorr1_t)[re] > maxcorr[1]) + maxcorr[1]=((int32_t*)autocorr1_t)[re]; + if (((int32_t*)autocorr2_t)[re] > maxcorr[2]) + maxcorr[2]=((int32_t*)autocorr2_t)[re]; + } + for (pssind=0;pssind<3;pssind++) { + minamp=(int)((1<<30)-1); + for (i=0;i<10;i++) + if (minamp < scan_info->amp[pssind][i]) { + minamp = scan_info->amp[pssind][i]; + pos = i; + } + if (maxcorr[pssind]>minamp) { + scan_info->amp[pssind][pos]=maxcorr[pssind]; + scan_info->freq_offset_Hz[pssind][pos]=(f*5000)+DL_freq; + } + } // loop on pss index + } // loop on time index i + } // loop on frequency shift f +} + diff --git a/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.m b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.m new file mode 100644 index 0000000000..06962b3e99 --- /dev/null +++ b/openair1/PHY/LTE_ESTIMATION/lte_sync_timefreq.m @@ -0,0 +1,47 @@ +% OCTAVE Code to generate upsampled pss0-2 + +n=0:61; +d0 = zeros(1,62); +d1 = zeros(1,62); +d2 = zeros(1,62); +d0(1+(0:30)) = exp(-sqrt(-1)*pi*25*(0:30).*(1:31)/63); +d1(1+(0:30)) = exp(-sqrt(-1)*pi*29*(0:30).*(1:31)/63); +d2(1+(0:30)) = exp(-sqrt(-1)*pi*34*(0:30).*(1:31)/63); +d0(1+(31:61)) = exp(-sqrt(-1)*pi*25*(32:62).*(33:63)/63); +d1(1+(31:61)) = exp(-sqrt(-1)*pi*29*(32:62).*(33:63)/63); +d2(1+(31:61)) = exp(-sqrt(-1)*pi*34*(32:62).*(33:63)/63); + +pss0f = zeros(1,2048); +pss0f(2:32) = d0(1:31); +pss0f(2048+(-30:0)) = d0(32:62); +pss1f = zeros(1,2048); +pss1f(2:32) = d1(1:31); +pss1f(2048+(-30:0)) = d1(32:62); +pss2f = zeros(1,2048); +pss2f(2:32) = d2(1:31); +pss2f(2048+(-30:0)) = d2(32:62); + + +pss0_6144f = fftshift(fft(ifft(pss0f)*sqrt(2048),6144)/sqrt(6144)); +pss1_6144f = fftshift(fft(ifft(pss1f)*sqrt(2048),6144)/sqrt(6144)); +pss2_6144f = fftshift(fft(ifft(pss2f)*sqrt(2048),6144)/sqrt(6144)); + +pss0_6144_fp = zeros(1,512); +pss0_6144_fp(1:2:512) = (floor(32767*real(pss0_6144f(3072+(-128:127))))); +pss0_6144_fp(2:2:512) = (floor(32767*imag(pss0_6144f(3072+(-128:127))))); +pss1_6144_fp = zeros(1,512); +pss1_6144_fp(1:2:512) = (floor(32767*real(pss1_6144f(3072+(-128:127))))); +pss1_6144_fp(2:2:512) = (floor(32767*imag(pss1_6144f(3072+(-128:127))))); +pss2_6144_fp = zeros(1,512); +pss2_6144_fp(1:2:512) = (floor(32767*real(pss2_6144f(3072+(-128:127))))); +pss2_6144_fp(2:2:512) = (floor(32767*imag(pss2_6144f(3072+(-128:127))))); + +fprintf("int16_t pss6144_0[512]={"); +fprintf("%d,",pss0_6144_fp(1:511)); +fprintf("%d};\n",pss0_6144_fp(512)); +fprintf("int16_t pss6144_1[512]={"); +fprintf("%d,",pss1_6144_fp(1:511)); +fprintf("%d};\n",pss1_6144_fp(512)); +fprintf("int16_t pss6144_2[512]={"); +fprintf("%d,",pss2_6144_fp(1:511)); +fprintf("%d};\n",pss2_6144_fp(512)); diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c index 24b275bdb5..9e796cb72f 100644 --- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c +++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c @@ -105,10 +105,8 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, *temp_out_fft_1_ptr = (int32_t*)0,*out_fft_ptr_1 = (int32_t*)0, *temp_in_ifft_ptr = (int32_t*)0; -#ifdef NEW_FFT __m128i *rxdataF128,*ul_ref128,*ul_ch128; __m128i mmtmpU0,mmtmpU1,mmtmpU2,mmtmpU3; - #endif Msc_RS = N_rb_alloc*12; @@ -142,15 +140,7 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, #endif #endif -#ifndef NEW_FFT - if ( (frame_parms->ofdm_symbol_size == 128) || - (frame_parms->ofdm_symbol_size == 512) ) - rx_power_correction = 2; - else - rx_power_correction = 1; -#else rx_power_correction = 1; -#endif if (l == (3 - frame_parms->Ncp)) { @@ -159,13 +149,6 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, for (aa=0; aa<nb_antennas_rx; aa++){ // msg("Componentwise prod aa %d, symbol_offset %d,ul_ch_estimates %p,ul_ch_estimates[aa] %p,ul_ref_sigs_rx[0][0][Msc_RS_idx] %p\n",aa,symbol_offset,ul_ch_estimates,ul_ch_estimates[aa],ul_ref_sigs_rx[0][0][Msc_RS_idx]); -#ifndef NEW_FFT - mult_cpx_vector_norep2((int16_t*) &rxdataF_ext[aa][symbol_offset<<1], - (int16_t*) ul_ref_sigs_rx[u][v][Msc_RS_idx], - (int16_t*) &ul_ch_estimates[aa][symbol_offset], - Msc_RS, - 15); -#else rxdataF128 = (__m128i *)&rxdataF_ext[aa][symbol_offset]; ul_ch128 = (__m128i *)&ul_ch_estimates[aa][symbol_offset]; ul_ref128 = (__m128i *)ul_ref_sigs_rx[u][v][Msc_RS_idx]; @@ -219,7 +202,6 @@ int32_t lte_ul_channel_estimation(PHY_VARS_eNB *phy_vars_eNB, ul_ref128+=3; rxdataF128+=3; } -#endif alpha_ind = 0; if((cyclic_shift != 0)){ diff --git a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c index d78102a5ad..c7c08c45f6 100644 --- a/openair1/PHY/LTE_REFSIG/lte_ul_ref.c +++ b/openair1/PHY/LTE_REFSIG/lte_ul_ref.c @@ -125,29 +125,8 @@ void generate_ul_ref_sigs_rx(void) { for (n=0;n<dftsizes[Msc_RS];n++) { m=n%ref_primes[Msc_RS]; phase = (double)q*m*(m+1)/ref_primes[Msc_RS]; -#ifndef IFFT_FPGA -#ifndef NEW_FFT - ul_ref_sigs_rx[u][v][Msc_RS][n<<2] =(int16_t)(floor(32767*cos(M_PI*phase))); - ul_ref_sigs_rx[u][v][Msc_RS][1+(n<<2)] =-(int16_t)(floor(32767*sin(M_PI*phase))); - ul_ref_sigs_rx[u][v][Msc_RS][2+(n<<2)] =(int16_t)(floor(32767*sin(M_PI*phase))); - ul_ref_sigs_rx[u][v][Msc_RS][3+(n<<2)] =(int16_t)(floor(32767*cos(M_PI*phase))); -#else ul_ref_sigs_rx[u][v][Msc_RS][n<<1] =(int16_t)(floor(32767*cos(M_PI*phase))); ul_ref_sigs_rx[u][v][Msc_RS][1+(n<<1)] =-(int16_t)(floor(32767*sin(M_PI*phase))); -#endif -#else -#ifndef OFDMA_ULSCH - ul_ref_sigs_rx[u][v][Msc_RS][n<<2] =(int16_t)(floor(32767*cos(M_PI*phase))); - ul_ref_sigs_rx[u][v][Msc_RS][1+(n<<2)] =-(int16_t)(floor(32767*sin(M_PI*phase))); - ul_ref_sigs_rx[u][v][Msc_RS][2+(n<<2)] =(int16_t)(floor(32767*sin(M_PI*phase))); - ul_ref_sigs_rx[u][v][Msc_RS][3+(n<<2)] =(int16_t)(floor(32767*cos(M_PI*phase))); -#else - ul_ref_sigs_rx[u][v][Msc_RS][n<<2] =(int16_t) ((cos(M_PI*phase)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][v][Msc_RS][1+(n<<2)] =(int16_t)((-sin(M_PI*phase)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][v][Msc_RS][2+(n<<2)] =(int16_t)((-sin(M_PI*phase)>=0) ? -ONE_OVER_SQRT2_Q15 : ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][v][Msc_RS][3+(n<<2)] =(int16_t) ((cos(M_PI*phase)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); -#endif -#endif #ifdef MAIN if (Msc_RS<5) printf("(%d,%d) ",ul_ref_sigs_rx[u][v][Msc_RS][n<<2],ul_ref_sigs_rx[u][v][Msc_RS][1+(n<<2)]); @@ -165,60 +144,19 @@ void generate_ul_ref_sigs_rx(void) { for (u=0;u<30;u++) { ul_ref_sigs_rx[u][0][0] = (int16_t*)malloc16(4*sizeof(int16_t)*dftsizes[0]); for (n=0;n<dftsizes[0];n++) { -#ifndef IFFT_FPGA -#ifndef NEW_FFT - ul_ref_sigs_rx[u][0][0][n<<2] = (int16_t)(floor(32767*cos(M_PI*ref12[(u*12) + n]/4))); - ul_ref_sigs_rx[u][0][0][1+(n<<2)]= (int16_t)(floor(32767*sin(M_PI*ref12[(u*12) + n]/4))); - ul_ref_sigs_rx[u][0][0][2+(n<<2)]=-(int16_t)(floor(32767*sin(M_PI*ref12[(u*12) + n]/4))); - ul_ref_sigs_rx[u][0][0][3+(n<<2)]= (int16_t)(floor(32767*cos(M_PI*ref12[(u*12) + n]/4))); -#else ul_ref_sigs_rx[u][0][0][n<<1] = (int16_t)(floor(32767*cos(M_PI*ref12[(u*12) + n]/4))); ul_ref_sigs_rx[u][0][0][1+(n<<1)]= (int16_t)(floor(32767*sin(M_PI*ref12[(u*12) + n]/4))); -#endif -#else -#ifndef OFDMA_ULSCH - ul_ref_sigs_rx[u][0][0][n<<2] = (int16_t)(floor(32767*cos(M_PI*ref12[(u*12) + n]/4))); - ul_ref_sigs_rx[u][0][0][1+(n<<2)]= (int16_t)(floor(32767*sin(M_PI*ref12[(u*12) + n]/4))); - ul_ref_sigs_rx[u][0][0][2+(n<<2)]=-(int16_t)(floor(32767*sin(M_PI*ref12[(u*12) + n]/4))); - ul_ref_sigs_rx[u][0][0][3+(n<<2)]= (int16_t)(floor(32767*cos(M_PI*ref12[(u*12) + n]/4))); -#else - ul_ref_sigs_rx[u][0][0][n<<2] = (int16_t)((cos(M_PI*ref12[(u*12) + n]/4)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][0][0][1+(n<<2)]= (int16_t)((sin(M_PI*ref12[(u*12) + n]/4)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][0][0][2+(n<<2)]= (int16_t)((sin(M_PI*ref12[(u*12) + n]/4)>=0) ? -ONE_OVER_SQRT2_Q15 : ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][0][0][3+(n<<2)]= (int16_t)((cos(M_PI*ref12[(u*12) + n]/4)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); -#endif -#endif } - } // These are the sequences for RB 2 for (u=0;u<30;u++) { ul_ref_sigs_rx[u][0][1] = (int16_t*)malloc16(4*sizeof(int16_t)*dftsizes[1]); for (n=0;n<dftsizes[1];n++) { -#ifndef IFFT_FPGA -#ifndef NEW_FFT - ul_ref_sigs_rx[u][0][1][n<<2] = (int16_t)(floor(32767*cos(M_PI*ref24[(u*24) + n]/4))); - ul_ref_sigs_rx[u][0][1][1+(n<<2)]= (int16_t)(floor(32767*sin(M_PI*ref24[(u*24) + n]/4))); -#else ul_ref_sigs_rx[u][0][1][n<<1] = (int16_t)(floor(32767*cos(M_PI*ref24[(u*24) + n]/4))); ul_ref_sigs_rx[u][0][1][1+(n<<1)]= (int16_t)(floor(32767*sin(M_PI*ref24[(u*24) + n]/4))); -#endif - ul_ref_sigs_rx[u][0][1][2+(n<<2)]=-(int16_t)(floor(32767*sin(M_PI*ref24[(u*24) + n]/4))); - ul_ref_sigs_rx[u][0][1][3+(n<<2)]= (int16_t)(floor(32767*cos(M_PI*ref24[(u*24) + n]/4))); -#else -#ifndef OFDMA_ULSCH - ul_ref_sigs_rx[u][0][1][n<<2] = (int16_t)(floor(32767*cos(M_PI*ref24[(u*24) + n]/4))); - ul_ref_sigs_rx[u][0][1][1+(n<<2)]= (int16_t)(floor(32767*sin(M_PI*ref24[(u*24) + n]/4))); ul_ref_sigs_rx[u][0][1][2+(n<<2)]=-(int16_t)(floor(32767*sin(M_PI*ref24[(u*24) + n]/4))); ul_ref_sigs_rx[u][0][1][3+(n<<2)]= (int16_t)(floor(32767*cos(M_PI*ref24[(u*24) + n]/4))); -#else - ul_ref_sigs_rx[u][0][1][n<<2] = (int16_t)((cos(M_PI*ref24[(u*24) + n]/4)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][0][1][1+(n<<2)]= (int16_t)((sin(M_PI*ref24[(u*24) + n]/4)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][0][1][2+(n<<2)]= (int16_t)((sin(M_PI*ref24[(u*24) + n]/4)>=0) ? -ONE_OVER_SQRT2_Q15 : ONE_OVER_SQRT2_Q15); - ul_ref_sigs_rx[u][0][1][3+(n<<2)]= (int16_t)((cos(M_PI*ref24[(u*24) + n]/4)>=0) ? ONE_OVER_SQRT2_Q15 : -ONE_OVER_SQRT2_Q15); -#endif -#endif } } diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c index 767a683c80..54fb8c03af 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci.c +++ b/openair1/PHY/LTE_TRANSPORT/dci.c @@ -2550,11 +2550,11 @@ uint16_t dci_decoding_procedure(PHY_VARS_UE *phy_vars_ue, uint8_t format0_found=0,format_c_found=0; uint8_t tmode = phy_vars_ue->transmission_mode[eNB_id]; uint8_t frame_type = frame_parms->frame_type; - uint8_t format1A_size_bits,format1A_size_bytes; - uint8_t format0_size_bits,format0_size_bytes; - uint8_t format1_size_bits,format1_size_bytes; - uint8_t format2_size_bits,format2_size_bytes; - uint8_t format2A_size_bits,format2A_size_bytes; + uint8_t format1A_size_bits=0,format1A_size_bytes=0; + uint8_t format0_size_bits=0,format0_size_bytes=0; + uint8_t format1_size_bits=0,format1_size_bytes=0; + uint8_t format2_size_bits=0,format2_size_bytes=0; + uint8_t format2A_size_bits=0,format2A_size_bytes=0; switch (frame_parms->N_RB_DL) { case 6: diff --git a/openair1/PHY/LTE_TRANSPORT/dci_tools.c b/openair1/PHY/LTE_TRANSPORT/dci_tools.c index 8c29ce3650..2a5e2c0735 100644 --- a/openair1/PHY/LTE_TRANSPORT/dci_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/dci_tools.c @@ -5371,7 +5371,7 @@ int generate_ue_ulsch_params_from_dci(void *dci_pdu, // uint32_t current_dlsch_cqi = phy_vars_ue->current_dlsch_cqi[eNB_id]; uint32_t cqi_req; - uint32_t dai; + uint32_t dai=0; uint32_t cshift; uint32_t TPC; uint32_t ndi; @@ -6141,7 +6141,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, uint32_t dai = 0; uint32_t cshift = 0; uint32_t TPC = 0; - uint32_t ndi = 0; uint32_t mcs = 0; uint32_t rballoc = UINT32_MAX; uint32_t RIV_max = 0; @@ -6170,7 +6169,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, dai = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->dai; cshift = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->cshift; TPC = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->TPC; - ndi = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->ndi; mcs = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->mcs; rballoc = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->rballoc; // hopping = ((DCI0_1_5MHz_TDD_1_6_t *)dci_pdu)->hopping; @@ -6180,7 +6178,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, cqi_req = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->cqi_req; cshift = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->cshift; TPC = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->TPC; - ndi = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->ndi; mcs = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->mcs; rballoc = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->rballoc; // hopping = ((DCI0_1_5MHz_FDD_t *)dci_pdu)->hopping; @@ -6197,7 +6194,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, dai = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->dai; cshift = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->cshift; TPC = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->TPC; - ndi = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->ndi; mcs = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->mcs; rballoc = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->rballoc; // hopping = ((DCI0_5MHz_TDD_1_6_t *)dci_pdu)->hopping; @@ -6207,7 +6203,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, cqi_req = ((DCI0_5MHz_FDD_t *)dci_pdu)->cqi_req; cshift = ((DCI0_5MHz_FDD_t *)dci_pdu)->cshift; TPC = ((DCI0_5MHz_FDD_t *)dci_pdu)->TPC; - ndi = ((DCI0_5MHz_FDD_t *)dci_pdu)->ndi; mcs = ((DCI0_5MHz_FDD_t *)dci_pdu)->mcs; rballoc = ((DCI0_5MHz_FDD_t *)dci_pdu)->rballoc; // hopping = ((DCI0_5MHz_FDD_t *)dci_pdu)->hopping; @@ -6224,7 +6219,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, dai = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->dai; cshift = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->cshift; TPC = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->TPC; - ndi = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->ndi; mcs = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->mcs; rballoc = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->rballoc; // hopping = ((DCI0_10MHz_TDD_1_6_t *)dci_pdu)->hopping; @@ -6234,7 +6228,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, cqi_req = ((DCI0_10MHz_FDD_t *)dci_pdu)->cqi_req; cshift = ((DCI0_10MHz_FDD_t *)dci_pdu)->cshift; TPC = ((DCI0_10MHz_FDD_t *)dci_pdu)->TPC; - ndi = ((DCI0_10MHz_FDD_t *)dci_pdu)->ndi; mcs = ((DCI0_10MHz_FDD_t *)dci_pdu)->mcs; rballoc = ((DCI0_10MHz_FDD_t *)dci_pdu)->rballoc; // hopping = ((DCI0_10MHz_FDD_t *)dci_pdu)->hopping; @@ -6251,7 +6244,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, dai = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->dai; cshift = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->cshift; TPC = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->TPC; - ndi = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->ndi; mcs = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->mcs; rballoc = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->rballoc; // hopping = ((DCI0_20MHz_TDD_1_6_t *)dci_pdu)->hopping; @@ -6261,7 +6253,6 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, cqi_req = ((DCI0_20MHz_FDD_t *)dci_pdu)->cqi_req; cshift = ((DCI0_20MHz_FDD_t *)dci_pdu)->cshift; TPC = ((DCI0_20MHz_FDD_t *)dci_pdu)->TPC; - ndi = ((DCI0_20MHz_FDD_t *)dci_pdu)->ndi; mcs = ((DCI0_20MHz_FDD_t *)dci_pdu)->mcs; rballoc = ((DCI0_20MHz_FDD_t *)dci_pdu)->rballoc; // hopping = ((DCI0_20MHz_FDD_t *)dci_pdu)->hopping; @@ -6288,14 +6279,12 @@ int generate_eNB_ulsch_params_from_dci(void *dci_pdu, } #ifdef DEBUG_DCI - LOG_D(PHY,"generate_eNB_ulsch_params_from_dci: subframe %d, rnti %x,harq_pid %d,ndi %d,cqi_req %d\n",subframe,rnti,harq_pid,ndi,cqi_req); + LOG_D(PHY,"generate_eNB_ulsch_params_from_dci: subframe %d, rnti %x,harq_pid %d,cqi_req %d\n",subframe,rnti,harq_pid,cqi_req); #endif ulsch->harq_processes[harq_pid]->dci_alloc = 1; ulsch->harq_processes[harq_pid]->rar_alloc = 0; ulsch->harq_processes[harq_pid]->TPC = TPC; - // ulsch->harq_processes[harq_pid]->Ndi = ndi; - ulsch->harq_processes[harq_pid]->n_DMRS = cshift; diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c index 63e91fbc80..5ef35ee07b 100644 --- a/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c +++ b/openair1/PHY/LTE_TRANSPORT/dlsch_decoding.c @@ -474,19 +474,19 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, #include "LAYER2/MAC/defs.h" #endif - int dlsch_abstraction_EESM(double* sinr_dB, uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs, uint8_t dl_power_off) { - - int index,ii; +int dlsch_abstraction_EESM(double* sinr_dB, uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs, uint8_t dl_power_off) { + + int ii; double sinr_eff = 0; int rb_count = 0; int offset; double bler = 0; if(TM==5 && dl_power_off==1) { //do nothing -- means there is no second UE and TM 5 is behaving like TM 6 for a singal user -} + } else - TM = TM-1; - + TM = TM-1; + for (offset = 0; offset <= 24; offset++) { if (rb_alloc[0] & (1<<offset)) { rb_count++; @@ -505,12 +505,12 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, LOG_D(OCM,"sinr_eff (lin, weighted) = %f\n",sinr_eff); sinr_eff = 10 * log10(sinr_eff); LOG_D(OCM,"sinr_eff (dB) = %f\n",sinr_eff); - + bler = interp(sinr_eff,&sinr_bler_map[mcs][0][0],&sinr_bler_map[mcs][1][0],table_length[mcs]); - + #ifdef USER_MODE // need to be adapted for the emulation in the kernel space - if (uniformrandom() < bler) { - LOG_I(OCM,"abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f, TM %d)\n",mcs,sinr_eff,bler, TM); + if (uniformrandom() < bler) { + LOG_I(OCM,"abstraction_decoding failed (mcs=%d, sinr_eff=%f, bler=%f, TM %d)\n",mcs,sinr_eff,bler, TM); return(1); } else { @@ -520,11 +520,11 @@ uint32_t dlsch_decoding(PHY_VARS_UE *phy_vars_ue, #endif } - int dlsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs,uint8_t dl_power_off) { - int index,ii; +int dlsch_abstraction_MIESM(double* sinr_dB,uint8_t TM, uint32_t rb_alloc[4], uint8_t mcs,uint8_t dl_power_off) { + int ii; double sinr_eff = 0; double x = 0; - double I =0; + double I =0; double qpsk_max=12.2; double qam16_max=19.2; double qam64_max=25.2; diff --git a/openair1/PHY/LTE_TRANSPORT/pucch.c b/openair1/PHY/LTE_TRANSPORT/pucch.c index 9b808efc7f..9783181fc4 100644 --- a/openair1/PHY/LTE_TRANSPORT/pucch.c +++ b/openair1/PHY/LTE_TRANSPORT/pucch.c @@ -658,19 +658,10 @@ int32_t rx_pucch(PHY_VARS_eNB *phy_vars_eNB, re_offset -= (frame_parms->ofdm_symbol_size); symbol_offset = (unsigned int)frame_parms->ofdm_symbol_size*l; -#ifndef NEW_FFT - rxptr = (int16_t *)&eNB_common_vars->rxdataF[0][aa][2*symbol_offset]; -#else rxptr = (int16_t *)&eNB_common_vars->rxdataF[0][aa][symbol_offset]; -#endif for (i=0;i<12;i++,j+=2,re_offset++) { -#ifndef NEW_FFT rxcomp[aa][j] = (int16_t)((rxptr[re_offset<<2]*(int32_t)zptr[j])>>15) - ((rxptr[1+(re_offset<<2)]*(int32_t)zptr[1+j])>>15); rxcomp[aa][1+j] = (int16_t)((rxptr[re_offset<<2]*(int32_t)zptr[1+j])>>15) + ((rxptr[1+(re_offset<<2)]*(int32_t)zptr[j])>>15); -#else - rxcomp[aa][j] = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[j])>>15) - ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[1+j])>>15); - rxcomp[aa][1+j] = (int16_t)((rxptr[re_offset<<1]*(int32_t)zptr[1+j])>>15) + ((rxptr[1+(re_offset<<1)]*(int32_t)zptr[j])>>15); -#endif if (re_offset==frame_parms->ofdm_symbol_size) re_offset = 0; #ifdef DEBUG_PUCCH_RX @@ -956,7 +947,7 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB, rnti = phy_vars_eNB->ulsch_eNB[UE_index]->rnti; for (UE_id=0;UE_id<NB_UE_INST;UE_id++) { - if (rnti == PHY_vars_UE_g[UE_id][phy_vars_eNB->CC_id]->lte_ue_pdcch_vars[0]->crnti) + if (rnti == PHY_vars_UE_g[UE_id][CC_id]->lte_ue_pdcch_vars[0]->crnti) break; } if (UE_id==NB_UE_INST) { @@ -965,19 +956,19 @@ int32_t rx_pucch_emul(PHY_VARS_eNB *phy_vars_eNB, } if (fmt == pucch_format1) { - payload[0] = PHY_vars_UE_g[UE_id][phy_vars_eNB->CC_id]->sr[subframe]; + payload[0] = PHY_vars_UE_g[UE_id][CC_id]->sr[subframe]; } else if (fmt == pucch_format1a) { - payload[0] = PHY_vars_UE_g[UE_id][phy_vars_eNB->CC_id]->pucch_payload[0]; + payload[0] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[0]; } else if (fmt == pucch_format1b) { - payload[0] = PHY_vars_UE_g[UE_id][phy_vars_eNB->CC_id]->pucch_payload[0]; - payload[1] = PHY_vars_UE_g[UE_id][phy_vars_eNB->CC_id]->pucch_payload[1]; + payload[0] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[0]; + payload[1] = PHY_vars_UE_g[UE_id][CC_id]->pucch_payload[1]; } else LOG_E(PHY,"[eNB] Frame %d: Can't handle formats 2/2a/2b\n",phy_vars_eNB->proc[sched_subframe].frame_rx); - if (PHY_vars_UE_g[UE_id][phy_vars_eNB->CC_id]->pucch_sel[subframe] == n1_pucch_sel) + if (PHY_vars_UE_g[UE_id][CC_id]->pucch_sel[subframe] == n1_pucch_sel) return(99); else return(0); diff --git a/openair1/PHY/LTE_TRANSPORT/rar_tools.c b/openair1/PHY/LTE_TRANSPORT/rar_tools.c index 8baf11497a..3799ab37af 100644 --- a/openair1/PHY/LTE_TRANSPORT/rar_tools.c +++ b/openair1/PHY/LTE_TRANSPORT/rar_tools.c @@ -184,7 +184,6 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue, uint8_t harq_pid = subframe2harq_pid(frame_parms,phy_vars_ue->frame_tx,subframe); uint16_t rballoc; uint8_t cqireq; - double sinr_eff; uint16_t *RIV2nb_rb_LUT, *RIV2first_rb_LUT; uint16_t RIV_max = 0; @@ -258,12 +257,6 @@ int generate_ue_ulsch_params_from_rar(PHY_VARS_UE *phy_vars_ue, } ulsch->uci_format = HLC_subband_cqi_nopmi; - /* - if(flag_LA==1) - sinr_eff = sinr_eff_cqi_calc(phy_vars_ue, eNB_id); - else - sinr_eff = meas->wideband_cqi_avg[eNB_id]; - */ fill_CQI(ulsch,meas,eNB_id,0,phy_vars_ue->lte_frame_parms.N_RB_DL,0, transmission_mode,phy_vars_ue->sinr_eff); if (((phy_vars_ue->frame_tx % 100) == 0) || (phy_vars_ue->frame_tx < 10)) diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c index efe6784cd3..9e5eb3933b 100644 --- a/openair1/PHY/LTE_TRANSPORT/sss.c +++ b/openair1/PHY/LTE_TRANSPORT/sss.c @@ -175,46 +175,24 @@ int pss_sss_extract(PHY_VARS_UE *phy_vars_ue, // (rx_offset + (symbol*(frame_parms->ofdm_symbol_size)))*2, // LTE_CE_OFFSET+ch_offset+(symbol_mod*(frame_parms->ofdm_symbol_size))); -#ifndef NEW_FFT - pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))*2]; - sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))*2]; -#else pss_rxF = &rxdataF[aarx][(rx_offset + (pss_symb*(frame_parms->ofdm_symbol_size)))]; sss_rxF = &rxdataF[aarx][(rx_offset + (sss_symb*(frame_parms->ofdm_symbol_size)))]; -#endif pss_rxF_ext = &pss_ext[aarx][0]; - sss_rxF_ext = &sss_ext[aarx][0]; for (rb=0; rb<nb_rb; rb++) { // skip DC carrier if (rb==3) { -#ifndef NEW_FFT - sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))*2]; - pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))*2]; -#else sss_rxF = &rxdataF[aarx][(1 + (sss_symb*(frame_parms->ofdm_symbol_size)))]; pss_rxF = &rxdataF[aarx][(1 + (pss_symb*(frame_parms->ofdm_symbol_size)))]; -#endif } for (i=0;i<12;i++) { -#ifndef NEW_FFT - pss_rxF_ext[i]=pss_rxF[i<<1]; - sss_rxF_ext[i]=sss_rxF[i<<1]; -#else pss_rxF_ext[i]=pss_rxF[i]; sss_rxF_ext[i]=sss_rxF[i]; -#endif } -#ifndef NEW_FFT - pss_rxF+=24; - sss_rxF+=24; -#else pss_rxF+=12; sss_rxF+=12; -#endif pss_rxF_ext+=12; - sss_rxF_ext+=12; } diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c index 824d8b9714..b3c6a6d5d7 100644 --- a/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c +++ b/openair1/PHY/LTE_TRANSPORT/ulsch_coding.c @@ -220,7 +220,6 @@ uint32_t ulsch_encoding(uint8_t *a, PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements; LTE_UE_ULSCH_t *ulsch=phy_vars_ue->ulsch_ue[eNB_id]; LTE_UE_DLSCH_t **dlsch = phy_vars_ue->dlsch_ue[eNB_id]; - double sinr_eff; uint16_t rnti; if (!ulsch) { @@ -249,12 +248,6 @@ uint32_t ulsch_encoding(uint8_t *a, // fill CQI/PMI information if (ulsch->O>0) { - /* //not correctly done - if (flag_LA==1) - sinr_eff = sinr_eff_cqi_calc(phy_vars_ue, 0); //eNB_id is missing here - else - sinr_eff = 0; - */ rnti = phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti; fill_CQI(ulsch,meas,0,harq_pid,phy_vars_ue->lte_frame_parms.N_RB_DL,rnti, tmode,phy_vars_ue->sinr_eff); @@ -888,7 +881,6 @@ int ulsch_encoding_emul(uint8_t *ulsch_buffer, LTE_UE_DLSCH_t **dlsch = phy_vars_ue->dlsch_ue[eNB_id]; PHY_MEASUREMENTS *meas = &phy_vars_ue->PHY_measurements; uint8_t tmode = phy_vars_ue->transmission_mode[eNB_id]; - double sinr_eff; uint16_t rnti=phy_vars_ue->lte_ue_pdcch_vars[eNB_id]->crnti; LOG_D(PHY,"EMUL UE ulsch_encoding for eNB %d,mod_id %d, harq_pid %d rnti %x, ACK(%d,%d) \n", eNB_id,phy_vars_ue->Mod_id, harq_pid, rnti,ulsch->o_ACK[0],ulsch->o_ACK[1]); diff --git a/openair1/PHY/MODULATION/ofdm_mod.c b/openair1/PHY/MODULATION/ofdm_mod.c index 0b0416da17..0352cc42b7 100755 --- a/openair1/PHY/MODULATION/ofdm_mod.c +++ b/openair1/PHY/MODULATION/ofdm_mod.c @@ -138,19 +138,9 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input msg("[PHY] symbol %d/%d (%p,%p -> %p)\n",i,nb_symbols,input,&input[i<<log2fftsize],&output[(i<<log2fftsize) + ((i)*nb_prefix_samples)]); #endif -#ifndef NEW_FFT - fft((short *)&input[i<<log2fftsize], - temp, - twiddle_ifft, - rev, - log2fftsize, - log2fftsize/2, // normalized FFT (i.e. 1/sqrt(N) multiplicative factor) - 0); -#else idft((int16_t *)&input[i<<log2fftsize], (log2fftsize==7) ? (int16_t *)temp : (int16_t *)&output[(i<<log2fftsize) + ((1+i)*nb_prefix_samples)], 1); -#endif // write_output("fft_out.m","fftout",temp,(1<<log2fftsize)*2,1,1); //memset(temp,0,1<<log2fftsize); @@ -167,21 +157,12 @@ void PHY_ofdm_mod(int *input, /// pointer to complex input // msg("Doing cyclic prefix method\n"); -#ifndef NEW_FFT - for (j=0;j<((1<<log2fftsize)) ; j++) { - - output_ptr[j] = temp_ptr[j]; - output_ptr[j] = temp_ptr[2*j]; - - } -#else if (log2fftsize==7) { for (j=0;j<((1<<log2fftsize)) ; j++) { output_ptr[j] = temp_ptr[j]; } } j=(1<<log2fftsize); -#endif for (k=-1;k>=-nb_prefix_samples;k--) { output_ptr[k] = output_ptr[--j]; diff --git a/openair1/PHY/MODULATION/slot_fep_ul.c b/openair1/PHY/MODULATION/slot_fep_ul.c index dca92b6063..af2d690c5c 100644 --- a/openair1/PHY/MODULATION/slot_fep_ul.c +++ b/openair1/PHY/MODULATION/slot_fep_ul.c @@ -27,6 +27,7 @@ *******************************************************************************/ #include "PHY/defs.h" +#include "PHY/extern.h" #include "defs.h" //#define DEBUG_FEP @@ -79,38 +80,22 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms, } if (l<0 || l>=7-frame_parms->Ncp) { - msg("slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp); + LOG_E(PHY,"slot_fep: l must be between 0 and %d\n",7-frame_parms->Ncp); return(-1); } if (Ns<0 || Ns>=20) { - msg("slot_fep: Ns must be between 0 and 19\n"); + LOG_E(PHY,"slot_fep: Ns must be between 0 and 19\n"); return(-1); } #ifdef DEBUG_FEP - msg("slot_fep: Ns %d offset %d, symbol %d, nb_prefix_samples %d\n",Ns,slot_offset,symbol, nb_prefix_samples); + LOG_D(PHY,"slot_fep: Ns %d offset %d, symbol %d, nb_prefix_samples %d\n",Ns,slot_offset,symbol, nb_prefix_samples); #endif for (aa=0;aa<frame_parms->nb_antennas_rx;aa++) { if (l==0) { -#ifndef NEW_FFT - fft( -#ifndef OFDMA_ULSCH - (short *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][slot_offset + - nb_prefix_samples0], -#else - (short *)&eNB_common_vars->rxdata[eNB_id][aa][((frame_parms->samples_per_tti>>1)*Ns) + - nb_prefix_samples0], -#endif - (short*)&eNB_common_vars->rxdataF[eNB_id][aa][2*frame_parms->ofdm_symbol_size*symbol], - frame_parms->twiddle_fft, - frame_parms->rev, - frame_parms->log2_symbol_size, - frame_parms->log2_symbol_size>>1, - 0); -#else dft( #ifndef OFDMA_ULSCH (int16_t *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][slot_offset + @@ -120,26 +105,8 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms, nb_prefix_samples0], #endif (int16_t *)&eNB_common_vars->rxdataF[eNB_id][aa][frame_parms->ofdm_symbol_size*symbol],1); - -#endif } else { -#ifndef NEW_FFT - fft( -#ifndef OFDMA_ULSCH - (short *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][slot_offset + -#else - (short *)&eNB_common_vars->rxdata[eNB_id][aa][((frame_parms->samples_per_tti>>1)*Ns) + -#endif - (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + - (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1)], - (short*)&eNB_common_vars->rxdataF[eNB_id][aa][2*frame_parms->ofdm_symbol_size*symbol], - frame_parms->twiddle_fft, - frame_parms->rev, - frame_parms->log2_symbol_size, - frame_parms->log2_symbol_size>>1, - 0); -#else dft( #ifndef OFDMA_ULSCH (short *)&eNB_common_vars->rxdata_7_5kHz[eNB_id][aa][slot_offset + @@ -149,12 +116,11 @@ int slot_fep_ul(LTE_DL_FRAME_PARMS *frame_parms, (frame_parms->ofdm_symbol_size+nb_prefix_samples0+nb_prefix_samples) + (frame_parms->ofdm_symbol_size+nb_prefix_samples)*(l-1)], (short*)&eNB_common_vars->rxdataF[eNB_id][aa][frame_parms->ofdm_symbol_size*symbol],1); -#endif } } #ifdef DEBUG_FEP - msg("slot_fep: done\n"); + LOG_D(PHY,"slot_fep: done\n"); #endif return(0); } diff --git a/openair1/PHY/Makefile.inc b/openair1/PHY/Makefile.inc index e16c244688..2105e1209d 100644 --- a/openair1/PHY/Makefile.inc +++ b/openair1/PHY/Makefile.inc @@ -37,6 +37,7 @@ PHY_OBJS += $(TOP_DIR)/PHY/MODULATION/slot_fep_ul.o PHY_OBJS += $(TOP_DIR)/PHY/MODULATION/ul_7_5_kHz.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/freq_equalization.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_sync_time.o +PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_sync_timefreq.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_adjust_sync.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_dl_channel_estimation.o PHY_OBJS += $(TOP_DIR)/PHY/LTE_ESTIMATION/lte_dl_mbsfn_channel_estimation.o diff --git a/openair1/PHY/TOOLS/cmult_vv.c b/openair1/PHY/TOOLS/cmult_vv.c index 065a0781cf..f815e5459f 100755 --- a/openair1/PHY/TOOLS/cmult_vv.c +++ b/openair1/PHY/TOOLS/cmult_vv.c @@ -1048,8 +1048,7 @@ int mult_cpx_vector_norep_conj2(int16_t *x1, -// int16_t *temps; - int *tempw; + @@ -1089,20 +1088,10 @@ int mult_cpx_vector_norep_conj2(int16_t *x1, printf("x2 : %d,%d,%d,%d,%d,%d,%d,%d\n",temps[0],temps[1],temps[2],temps[3],temps[4],temps[5],temps[6],temps[7]); */ m0 = _mm_madd_epi16(m4,x2_128[0]); //pmaddwd_r2r(mm1,mm0); // 1- compute x1[0]*x2[0] - /* - temp = m0; - - tempd = &temp; - printf("m0 : %d,%d,%d,%d\n",tempd[0],tempd[1],tempd[2],tempd[3]); - - tempw = (int *)&m0; - printf("m0[0] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); - - */ m0 = _mm_sra_epi32(m0,shift); // 1- shift right by shift in order to compensate for the input amplitude - tempw = (int *)&m0; + // tempw = (int *)&m0; // printf("m0[1] : %d,%d,%d,%d\n",tempw[0],tempw[1],tempw[2],tempw[3]); diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c index 7402c61a83..b017621d33 100755 --- a/openair1/PHY/TOOLS/signal_energy.c +++ b/openair1/PHY/TOOLS/signal_energy.c @@ -46,14 +46,14 @@ int32_t subcarrier_energy(int32_t *input,uint32_t length, int32_t *subcarrier_en int32_t i, subcarrier_pwr; register __m64 mm0,mm1, subcarrier; - subcarrier = _m_pxor(subcarrier,subcarrier); + subcarrier = _mm_setzero_si64();//_m_pxor(subcarrier,subcarrier); __m64 *in = (__m64 *)input; #ifdef MAIN int16_t *printb; #endif - mm0 = _m_pxor(mm0,mm0); + mm0 = _mm_setzero_si64();//pxor(mm0,mm0); for (i=0;i<length>>1;i++) { @@ -82,8 +82,8 @@ int32_t signal_energy(int32_t *input,uint32_t length) { int16_t *printb; #endif - mm0 = _m_pxor(mm0,mm0); - mm3 = _m_pxor(mm3,mm3); + mm0 = _mm_setzero_si64();//pxor(mm0,mm0); + mm3 = _mm_setzero_si64();//pxor(mm3,mm3); for (i=0;i<length>>1;i++) { @@ -156,20 +156,19 @@ int32_t signal_energy_nodc(int32_t *input,uint32_t length) { int32_t i; int32_t temp; - register __m64 mm0,mm1,mm2,mm3; + register __m64 mm0,mm1;//,mm2,mm3; __m64 *in = (__m64 *)input; #ifdef MAIN int16_t *printb; #endif - mm0 = _m_pxor(mm0,mm0); - mm3 = _m_pxor(mm3,mm3); + mm0 = _mm_setzero_si64();//_pxor(mm0,mm0); + // mm3 = _mm_setzero_si64();//pxor(mm3,mm3); for (i=0;i<length>>1;i++) { mm1 = in[i]; - mm2 = mm1; mm1 = _m_pmaddwd(mm1,mm1);// SIMD complex multiplication mm1 = _m_psradi(mm1,shift); mm0 = _m_paddd(mm0,mm1); diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h index 993417e0fc..f9b12ee8ac 100755 --- a/openair1/PHY/defs.h +++ b/openair1/PHY/defs.h @@ -120,6 +120,8 @@ #define NUMBER_OF_eNB_SECTORS_MAX 3 +#define NB_BANDS_MAX 8 + typedef enum {normal_txrx=0,rx_calib_ue=1,rx_calib_ue_med=2,rx_calib_ue_byp=3,debug_prach=4,no_L2_connect=5} runmode_t; enum transmission_access_mode{ @@ -131,6 +133,13 @@ enum transmission_access_mode{ CBA_ACCESS }; +typedef struct UE_SCAN_INFO_s { + /// 10 best amplitudes (linear) for each pss signals + int32_t amp[2][10]; + /// 10 frequency offsets (kHz) corresponding to best amplitudes, with respect do minimum DL frequency in the band + int32_t freq_offset_Hz[2][10]; +} UE_SCAN_INFO_t; + #if defined(ENABLE_RAL) typedef struct ral_threshold_phy_s { SLIST_ENTRY(ral_threshold_phy_s) ral_thresholds; @@ -439,6 +448,7 @@ typedef struct uint32_t high_speed_flag; uint32_t perfect_ce; int16_t ch_est_alpha; + UE_SCAN_INFO_t scan_info[NB_BANDS_MAX]; char ulsch_no_allocation_counter[NUMBER_OF_CONNECTED_eNB_MAX]; diff --git a/openair1/SCHED/phy_procedures_lte_common.c b/openair1/SCHED/phy_procedures_lte_common.c index d603f06bdb..d98b614cbd 100755 --- a/openair1/SCHED/phy_procedures_lte_common.c +++ b/openair1/SCHED/phy_procedures_lte_common.c @@ -152,7 +152,7 @@ uint8_t get_Msg3_harq_pid(LTE_DL_FRAME_PARMS *frame_parms, unsigned char current_subframe) { uint8_t ul_subframe=0; - uint32_t ul_frame; + uint32_t ul_frame=0; if (frame_parms->frame_type ==FDD) { ul_subframe = (current_subframe>3) ? (current_subframe-4) : (current_subframe+6); diff --git a/openair1/SCHED/phy_procedures_lte_ue.c b/openair1/SCHED/phy_procedures_lte_ue.c index 08c066b96a..3259b8910d 100755 --- a/openair1/SCHED/phy_procedures_lte_ue.c +++ b/openair1/SCHED/phy_procedures_lte_ue.c @@ -609,7 +609,7 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra uint16_t first_rb, nb_rb; uint8_t harq_pid; unsigned int input_buffer_length; - unsigned int i,aa; + unsigned int aa; uint8_t Msg3_flag=0; uint8_t pucch_ack_payload[2]; uint8_t n1_pucch; @@ -632,6 +632,9 @@ void phy_procedures_UE_TX(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint8_t abstra int frame_tx = phy_vars_ue->frame_tx; int Mod_id = phy_vars_ue->Mod_id; int CC_id = phy_vars_ue->CC_id; +#ifndef OPENAIR2 + int i; +#endif vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_TX,VCD_FUNCTION_IN); start_meas(&phy_vars_ue->phy_proc_tx); @@ -1395,7 +1398,6 @@ void lte_ue_measurement_procedures(uint16_t l, PHY_VARS_UE *phy_vars_ue,uint8_t int aa; #endif int Mod_id=phy_vars_ue->Mod_id; - int frame_rx = phy_vars_ue->frame_rx; int slot_rx = phy_vars_ue->slot_rx; int subframe_rx = slot_rx>>1; @@ -1871,14 +1873,19 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst unsigned int dci_cnt=0, i; //DCI_PDU *DCI_pdu; //uint16_t ra_RNTI; - uint8_t harq_pid; - int UE_id; - int CC_id; + + int frame_rx = phy_vars_ue->frame_rx; int slot_rx = phy_vars_ue->slot_rx; int subframe_rx = slot_rx>>1; +#ifdef PHY_ABSTRACTION + int CC_id; + int UE_id; + uint8_t harq_pid; +#endif + vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_PDCCH_PROCEDURES, VCD_FUNCTION_IN); /* @@ -2299,13 +2306,15 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst uint16_t l,m,n_symb; // int eNB_id = 0, - int eNB_id_i = 1; - uint8_t dual_stream_UE = 0; int ret=0; uint8_t harq_pid = -1; int timing_advance; uint8_t pilot1,pilot2,pilot3; +#ifndef DLSCH_THREAD uint8_t i_mod = 0; + int eNB_id_i = 1; + uint8_t dual_stream_UE = 0; +#endif int i; #ifndef OPENAIR2 uint8_t *rar; @@ -2318,7 +2327,9 @@ int lte_ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *phy_vars_ue,uint8_t abst int slot_rx = phy_vars_ue->slot_rx; int subframe_rx = slot_rx>>1; int subframe_prev = (subframe_rx+9)%10; +#ifdef OPENAIR2 int CC_id = phy_vars_ue->CC_id; +#endif vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_PROCEDURES_UE_RX, VCD_FUNCTION_IN); vcd_signal_dumper_dump_variable_by_name(VCD_SIGNAL_DUMPER_VARIABLES_SLOT_NUMBER_UE, (slot_rx + 1) % 20); @@ -3413,9 +3424,13 @@ void phy_UE_lte_check_measurement_thresholds(instance_t instanceP, ral_threshold unsigned int Mod_id; int result; #endif +# if defined(ENABLE_RAL) int CC_id =0; +#endif int frame_rx = phy_vars_ue->frame_rx; +#ifdef OPENAIR2 int frame_tx = phy_vars_ue->frame_tx; +#endif int slot_rx = phy_vars_ue->slot_rx; int slot_tx = phy_vars_ue->slot_tx; int subframe_tx = slot_tx>>1; diff --git a/openair1/SIMULATION/LTE_PHY/Makefile b/openair1/SIMULATION/LTE_PHY/Makefile index 99c6c8cb56..b8ef97a98a 100644 --- a/openair1/SIMULATION/LTE_PHY/Makefile +++ b/openair1/SIMULATION/LTE_PHY/Makefile @@ -133,7 +133,6 @@ test: $(SIMULATION_OBJS) $(TOOLS_OBJS) $(TOP_DIR)/PHY/INIT/lte_init.o test.c OBJ += $(LIST_OBJ) OBJ += $(MEM_OBJ) $(OBJ) : %.o : %.c - @echo @echo Compiling $< ... @$(CC) -c $(CFLAGS) -o $@ $< -- GitLab