diff --git a/openair1/PHY/INIT/init_top.c b/openair1/PHY/INIT/init_top.c index e64eda740ca0a9bd8b73335392373e5728c62da4..8946b0765e295d53220b32602bf31561deec590a 100644 --- a/openair1/PHY/INIT/init_top.c +++ b/openair1/PHY/INIT/init_top.c @@ -1,23 +1,23 @@ /* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ + Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The OpenAirInterface Software Alliance licenses this file to You under + the OAI Public License, Version 1.1 (the "License"); you may not use this file + except in compliance with the License. + You may obtain a copy of the License at + + http://www.openairinterface.org/?page_id=698 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ------------------------------------------------------------------------------- + For more information about the OpenAirInterface (OAI) Software Alliance: + contact@openairinterface.org +*/ /*!\brief Initilization and reconfiguration routines for LTE PHY */ #include "phy_init.h" @@ -27,12 +27,9 @@ #include "PHY/LTE_REFSIG/lte_refsig.h" #include "PHY/LTE_TRANSPORT/transport_common_proto.h" -void generate_64qam_table(void) -{ - +void generate_64qam_table(void) { int a,b,c,index; - for (a=-1; a<=1; a+=2) for (b=-1; b<=1; b+=2) for (c=-1; c<=1; c+=2) { @@ -41,9 +38,7 @@ void generate_64qam_table(void) } } -void generate_16qam_table(void) -{ - +void generate_16qam_table(void) { int a,b,index; for (a=-1; a<=1; a+=2) @@ -53,54 +48,41 @@ void generate_16qam_table(void) } } -void generate_qpsk_table(void) -{ - +void generate_qpsk_table(void) { int a,index; for (a=-1; a<=1; a+=2) { index = (1+a)/2; - qpsk_table[index] = -a*QPSK; + qpsk_table[index] = -a*QPSK; } } -void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms) -{ - +void init_7_5KHz(void); +void init_lte_top(LTE_DL_FRAME_PARMS *frame_parms) { ccodelte_init(); ccodelte_init_inv(); - init_dfts(); - - phy_generate_viterbi_tables_lte(); - load_codinglib(); lte_sync_time_init(frame_parms); - generate_ul_ref_sigs(); generate_ul_ref_sigs_rx(); - generate_64qam_table(); generate_16qam_table(); generate_qpsk_table(); generate_RIV_tables(); - init_unscrambling_lut(); init_scrambling_lut(); //set_taus_seed(1328); - - + init_7_5KHz(); } -void free_lte_top(void) -{ +void free_lte_top(void) { free_codinglib(); lte_sync_time_free(); - /* free_ul_ref_sigs() is called in phy_free_lte_eNB() */ } /* - * @}*/ + @}*/ diff --git a/openair1/PHY/MODULATION/gen_75KHz.cpp b/openair1/PHY/MODULATION/gen_75KHz.cpp index 31c6af2a1fd47dcaf563ff694caf26e066e735e1..6efa3ddf2f5b713caf362f11fa9ed31ab2bb6a2c 100644 --- a/openair1/PHY/MODULATION/gen_75KHz.cpp +++ b/openair1/PHY/MODULATION/gen_75KHz.cpp @@ -8,71 +8,77 @@ #include <map> #include <PHY/MODULATION/modulation_extern.h> using namespace std; +extern "C" { + void gen_sig(int RB, int len, double ratio, int16_t *table_n, int16_t *table_e ) { + double samplerate = 30.72e6*ratio; + double ofdm_size = 2048*ratio; + double PI = std::acos(-1); + std::complex<int> tt; + complex<double> t[len]; + int index=0; + double cp0 = 160*ratio; + double cp = 144*ratio; -void gen_sig(int RB, int len, double ratio, int16_t *table_n, int16_t *table_e ) { - double samplerate = 30.72e6*ratio; - double ofdm_size = 2048*ratio; - double PI = std::acos(-1); - std::complex<int> tt; - complex<double> t[len]; - int index=0; - - double cp0 = 160*ratio; - double cp = 144*ratio; - for (int i=-cp0; i<ofdm_size; i++) - t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate); - for(int x=0 ; x <6 ; x++) - for (int i=-cp; i<ofdm_size; i++) - t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate); - for (int i=0; i < len ; i++) { - table_n[i*2] = floor(real(t[i])); - table_n[i*2+1] = floor(imag(t[i])); - } - - index=0; - double cpe = 512*ratio; - for(int x=0 ; x <6 ; x++) - for (int i=-cpe; i<ofdm_size; i++) + for (int i=-cp0; i<ofdm_size; i++) t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate); - for (int i=0; i < len ; i++) { - table_e[i*2] = floor(real(t[i])); - table_e[i*2+1] = floor(imag(t[i])); + + for(int x=0 ; x <6 ; x++) + for (int i=-cp; i<ofdm_size; i++) + t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate); + + for (int i=0; i < len ; i++) { + table_n[i*2] = floor(real(t[i])); + table_n[i*2+1] = floor(imag(t[i])); + } + + index=0; + double cpe = 512*ratio; + + for(int x=0 ; x <6 ; x++) + for (int i=-cpe; i<ofdm_size; i++) + t[index++] = polar( 32767.0, -2*PI*i*7.5e3/samplerate); + + for (int i=0; i < len ; i++) { + table_e[i*2] = floor(real(t[i])); + table_e[i*2+1] = floor(imag(t[i])); + } } -} -int16_t *s6n_kHz_7_5; -int16_t *s6e_kHz_7_5; -int16_t *s15n_kHz_7_5; -int16_t *s15e_kHz_7_5; -int16_t *s25n_kHz_7_5; -int16_t *s25e_kHz_7_5; -int16_t *s50n_kHz_7_5; -int16_t *s50e_kHz_7_5; -int16_t *s75n_kHz_7_5; -int16_t *s75e_kHz_7_5; -int16_t *s100n_kHz_7_5; -int16_t *s100e_kHz_7_5; -int16_t ** tables[12]={&s6n_kHz_7_5,&s6e_kHz_7_5, - &s15n_kHz_7_5,&s15e_kHz_7_5, - &s25n_kHz_7_5,&s25e_kHz_7_5, - &s50n_kHz_7_5,&s50e_kHz_7_5, - &s75n_kHz_7_5,&s75e_kHz_7_5, - &s100n_kHz_7_5,&s100e_kHz_7_5,}; -int tables_size_bytes[12]; + int16_t *s6n_kHz_7_5; + int16_t *s6e_kHz_7_5; + int16_t *s15n_kHz_7_5; + int16_t *s15e_kHz_7_5; + int16_t *s25n_kHz_7_5; + int16_t *s25e_kHz_7_5; + int16_t *s50n_kHz_7_5; + int16_t *s50e_kHz_7_5; + int16_t *s75n_kHz_7_5; + int16_t *s75e_kHz_7_5; + int16_t *s100n_kHz_7_5; + int16_t *s100e_kHz_7_5; + int16_t **tables[12]= {&s6n_kHz_7_5,&s6e_kHz_7_5, + &s15n_kHz_7_5,&s15e_kHz_7_5, + &s25n_kHz_7_5,&s25e_kHz_7_5, + &s50n_kHz_7_5,&s50e_kHz_7_5, + &s75n_kHz_7_5,&s75e_kHz_7_5, + &s100n_kHz_7_5,&s100e_kHz_7_5, + }; + int tables_size_bytes[12]; #define MyAssert(x) { if(!(x)) { printf("Error in table intialization: %s:%d\n",__FILE__,__LINE__); exit(1);}} -__attribute__((constructor)) static void init_7_5KHz(void) { - const map<int,double> tables_7_5KHz={{6,1.0/16},{15,1.0/8},{25,1.0/4},{50,1.0/2},{75,3.0/4},{100,1.0}}; + void init_7_5KHz(void) { + const map<int,double> tables_7_5KHz= {{6,1.0/16},{15,1.0/8},{25,1.0/4},{50,1.0/2},{75,3.0/4},{100,1.0}}; + int tables_idx=0; - int tables_idx=0; - for (auto it=tables_7_5KHz.begin(); it!=tables_7_5KHz.end(); ++it) { - int len=15360*it->second; - tables_size_bytes[tables_idx]=sizeof(int16_t)*2*len; - tables_size_bytes[tables_idx+1]=sizeof(int16_t)*2*len; - MyAssert(0==posix_memalign((void**)tables[tables_idx], - 16,tables_size_bytes[tables_idx])); - MyAssert(0==posix_memalign((void**)tables[tables_idx+1], - 16,tables_size_bytes[tables_idx+1])); - gen_sig(it->first, len, it->second, *tables[tables_idx], *tables[tables_idx+1]); - tables_idx+=2; + for (auto it=tables_7_5KHz.begin(); it!=tables_7_5KHz.end(); ++it) { + int len=15360*it->second; + tables_size_bytes[tables_idx]=sizeof(int16_t)*2*len; + tables_size_bytes[tables_idx+1]=sizeof(int16_t)*2*len; + MyAssert(0==posix_memalign((void **)tables[tables_idx], + 16,tables_size_bytes[tables_idx])); + MyAssert(0==posix_memalign((void **)tables[tables_idx+1], + 16,tables_size_bytes[tables_idx+1])); + gen_sig(it->first, len, it->second, *tables[tables_idx], *tables[tables_idx+1]); + tables_idx+=2; + } } } diff --git a/openair1/PHY/MODULATION/modulation_extern.h b/openair1/PHY/MODULATION/modulation_extern.h index 5dfa73857ecdf3f02f75b0f71db22063347727fc..417ae5781be75e02c4ab71a1d35a9bc1284568f6 100644 --- a/openair1/PHY/MODULATION/modulation_extern.h +++ b/openair1/PHY/MODULATION/modulation_extern.h @@ -1,23 +1,26 @@ /* - * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The OpenAirInterface Software Alliance licenses this file to You under - * the OAI Public License, Version 1.1 (the "License"); you may not use this file - * except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.openairinterface.org/?page_id=698 - * - * Unless required by applicable law or agreed to in writing, software -; * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - *------------------------------------------------------------------------------- - * For more information about the OpenAirInterface (OAI) Software Alliance: - * contact@openairinterface.org - */ + Licensed to the OpenAirInterface (OAI) Software Alliance under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The OpenAirInterface Software Alliance licenses this file to You under + the OAI Public License, Version 1.1 (the "License"); you may not use this file + except in compliance with the License. + You may obtain a copy of the License at + + http://www.openairinterface.org/?page_id=698 + + Unless required by applicable law or agreed to in writing, software + ; * distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + ------------------------------------------------------------------------------- + For more information about the OpenAirInterface (OAI) Software Alliance: + contact@openairinterface.org +*/ +#ifdef __cplusplus +extern "C" { +#endif extern int16_t *s6n_kHz_7_5; extern int16_t *s6e_kHz_7_5; @@ -36,3 +39,6 @@ extern int16_t *s100e_kHz_7_5; extern short conjugate75[8]; extern short conjugate75_2[8]; extern short negate[8]; +#ifdef __cplusplus +} +#endif