diff --git a/lib/examples/CMakeLists.txt b/lib/examples/CMakeLists.txt index 965f2706c..fb44f0fce 100644 --- a/lib/examples/CMakeLists.txt +++ b/lib/examples/CMakeLists.txt @@ -31,10 +31,10 @@ target_link_libraries(synch_file srslte_phy) ################################################################# add_executable(pdsch_ue pdsch_ue.c) -target_link_libraries(pdsch_ue srslte_phy pthread) +target_link_libraries(pdsch_ue srslte_phy srslte_rf pthread) add_executable(pdsch_enodeb pdsch_enodeb.c) -target_link_libraries(pdsch_enodeb srslte_phy pthread) +target_link_libraries(pdsch_enodeb srslte_phy srslte_rf pthread) if(RF_FOUND) @@ -59,19 +59,19 @@ endif(SRSGUI_FOUND) if(RF_FOUND) add_executable(cell_search cell_search.c) - target_link_libraries(cell_search srslte_phy) + target_link_libraries(cell_search srslte_phy srslte_rf) add_executable(cell_measurement cell_measurement.c) - target_link_libraries(cell_measurement srslte_phy) + target_link_libraries(cell_measurement srslte_phy srslte_rf) add_executable(usrp_capture usrp_capture.c) - target_link_libraries(usrp_capture srslte_phy) + target_link_libraries(usrp_capture srslte_phy srslte_rf) add_executable(usrp_capture_sync usrp_capture_sync.c) - target_link_libraries(usrp_capture_sync srslte_phy) + target_link_libraries(usrp_capture_sync srslte_phy srslte_rf) add_executable(usrp_txrx usrp_txrx.c) - target_link_libraries(usrp_txrx srslte_phy) + target_link_libraries(usrp_txrx srslte_phy srslte_rf) message(STATUS " examples will be installed.") @@ -79,6 +79,4 @@ else(RF_FOUND) message(STATUS " examples will NOT BE INSTALLED.") endif(RF_FOUND) -# Add subdirectories -add_subdirectory(tutorial_examples) diff --git a/lib/examples/tutorial_examples/CMakeLists.txt b/lib/examples/tutorial_examples/CMakeLists.txt deleted file mode 100644 index 95c1f1cb7..000000000 --- a/lib/examples/tutorial_examples/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# -# Copyright 2013-2017 Software Radio Systems Limited -# -# This file is part of srsLTE -# -# srsLTE is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# srsLTE 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 Affero General Public License for more details. -# -# A copy of the GNU Affero General Public License can be found in -# the LICENSE file in the top-level directory of this distribution -# and at http://www.gnu.org/licenses/. -# - - -################################################################# -# EXAMPLES shown in WinnForum 2015 Tutorial -################################################################# - -if(SRSGUI_FOUND AND UHD_FOUND) - - add_executable(pss pss.c) - target_link_libraries(pss srslte_phy ${SRSGUI_LIBRARIES}) - - add_executable(simple_tx simple_tx.c) - target_link_libraries(simple_tx srslte_phy) - -endif(SRSGUI_FOUND AND UHD_FOUND) - diff --git a/lib/examples/tutorial_examples/pss.c b/lib/examples/tutorial_examples/pss.c deleted file mode 100644 index da487895c..000000000 --- a/lib/examples/tutorial_examples/pss.c +++ /dev/null @@ -1,399 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2015 Software Radio Systems Limited - * - * \section LICENSE - * - * This file is part of the srsLTE library. - * - * srsLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * srsLTE 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 Affero General Public License for more details. - * - * A copy of the GNU Affero General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "srslte/srslte.h" -#include "srslte/phy/rf/rf.h" - - -#ifndef DISABLE_GRAPHICS -void init_plots(); -void do_plots(float *corr, float energy, uint32_t size, cf_t ce[SRSLTE_PSS_LEN]); -void do_plots_sss(float *corr_m0, float *corr_m1); -#endif - - -bool disable_plots = false; -int cell_id = -1; -char *rf_args=""; -float rf_gain=40.0, rf_freq=-1.0; -int nof_frames = -1; -uint32_t fft_size=128; -float threshold = 0.4; -int N_id_2_sync = -1; -srslte_cp_t cp=SRSLTE_CP_NORM; - -void usage(char *prog) { - printf("Usage: %s [aedgtvnp] -f rx_frequency_hz -i cell_id\n", prog); - printf("\t-a RF args [Default %s]\n", rf_args); - printf("\t-g RF Gain [Default %.2f dB]\n", rf_gain); - printf("\t-n nof_frames [Default %d]\n", nof_frames); - printf("\t-l N_id_2 to sync [Default use cell_id]\n"); - printf("\t-e Extended CP [Default Normal]\n", fft_size); - printf("\t-s symbol_sz [Default %d]\n", fft_size); - printf("\t-t threshold [Default %.2f]\n", threshold); -#ifndef DISABLE_GRAPHICS - printf("\t-d disable plots [Default enabled]\n"); -#else - printf("\t plots are disabled. Graphics library not available\n"); -#endif - printf("\t-v srslte_verbose\n"); -} - -void parse_args(int argc, char **argv) { - int opt; - while ((opt = getopt(argc, argv, "adgetvsfil")) != -1) { - switch (opt) { - case 'a': - rf_args = argv[optind]; - break; - case 'g': - rf_gain = atof(argv[optind]); - break; - case 'f': - rf_freq = atof(argv[optind]); - break; - case 't': - threshold = atof(argv[optind]); - break; - case 'e': - cp = SRSLTE_CP_EXT; - break; - case 'i': - cell_id = atoi(argv[optind]); - break; - case 'l': - N_id_2_sync = atoi(argv[optind]); - break; - case 's': - fft_size = atoi(argv[optind]); - break; - case 'n': - nof_frames = atoi(argv[optind]); - break; - case 'd': - disable_plots = true; - break; - case 'v': - srslte_verbose++; - break; - default: - usage(argv[0]); - exit(-1); - } - } - if (cell_id < 0 || rf_freq < 0) { - usage(argv[0]); - exit(-1); - } -} - float m0_value, m1_value; - -int main(int argc, char **argv) { - cf_t *buffer; - int frame_cnt, n; - srslte_rf_t rf; - srslte_pss_synch_t pss; - srslte_cfo_t cfocorr, cfocorr64; - srslte_sss_synch_t sss; - int32_t flen; - int peak_idx, last_peak; - float peak_value; - float mean_peak; - uint32_t nof_det, nof_nodet, nof_nopeak, nof_nopeakdet; - cf_t ce[SRSLTE_PSS_LEN]; - - parse_args(argc, argv); - - if (N_id_2_sync == -1) { - N_id_2_sync = cell_id%3; - } - uint32_t N_id_2 = cell_id%3; - uint32_t N_id_1 = cell_id/3; - -#ifndef DISABLE_GRAPHICS - if (!disable_plots) - init_plots(); -#endif - - flen = 4800*(fft_size/64); - - buffer = malloc(sizeof(cf_t) * flen * 2); - if (!buffer) { - perror("malloc"); - exit(-1); - } - - if (srslte_pss_synch_init_fft(&pss, flen, fft_size)) { - fprintf(stderr, "Error initiating PSS\n"); - exit(-1); - } - - if (srslte_pss_synch_set_N_id_2(&pss, N_id_2_sync)) { - fprintf(stderr, "Error setting N_id_2=%d\n",N_id_2_sync); - exit(-1); - } - - srslte_cfo_init(&cfocorr, flen); - srslte_cfo_init(&cfocorr64, flen); - - if (srslte_sss_synch_init(&sss, fft_size)) { - fprintf(stderr, "Error initializing SSS object\n"); - return SRSLTE_ERROR; - } - - srslte_sss_synch_set_N_id_2(&sss, N_id_2); - - printf("Opening RF device...\n"); - if (srslte_rf_open(&rf, rf_args)) { - fprintf(stderr, "Error opening rf\n"); - exit(-1); - } - printf("N_id_2: %d\n", N_id_2); - printf("Set RX rate: %.2f MHz\n", srslte_rf_set_rx_srate(&rf, flen*2*100) / 1000000); - printf("Set RX gain: %.1f dB\n", srslte_rf_set_rx_gain(&rf, rf_gain)); - printf("Set RX freq: %.2f MHz\n", srslte_rf_set_rx_freq(&rf, rf_freq) / 1000000); - srslte_rf_rx_wait_lo_locked(&rf); - srslte_rf_start_rx_stream(&rf); - - printf("Frame length %d samples\n", flen); - printf("PSS detection threshold: %.2f\n", threshold); - - nof_det = nof_nodet = nof_nopeak = nof_nopeakdet = 0; - frame_cnt = 0; - last_peak = 0; - mean_peak = 0; - int peak_offset = 0; - float cfo; - float mean_cfo = 0; - uint32_t m0, m1; - uint32_t sss_error1 = 0, sss_error2 = 0, sss_error3 = 0; - uint32_t cp_is_norm = 0; - - srslte_sync_t ssync; - bzero(&ssync, sizeof(srslte_sync_t)); - ssync.fft_size = fft_size; - - while(frame_cnt < nof_frames || nof_frames == -1) { - peak_offset = 0; - n = srslte_rf_recv(&rf, buffer, flen - peak_offset, 1); - if (n < 0) { - fprintf(stderr, "Error receiving samples\n"); - exit(-1); - } - - peak_idx = srslte_pss_synch_find_pss(&pss, buffer, &peak_value); - if (peak_idx < 0) { - fprintf(stderr, "Error finding PSS peak\n"); - exit(-1); - } - - mean_peak = SRSLTE_VEC_CMA(peak_value, mean_peak, frame_cnt); - - if (peak_value >= threshold) { - nof_det++; - - if (peak_idx >= fft_size) { - - // Estimate CFO - cfo = srslte_pss_synch_cfo_compute(&pss, &buffer[peak_idx-fft_size]); - mean_cfo = SRSLTE_VEC_CMA(cfo, mean_cfo, frame_cnt); - - // Correct CFO - srslte_cfo_correct(&cfocorr, buffer, buffer, -mean_cfo / fft_size); - - // Estimate channel - if (srslte_pss_synch_chest(&pss, &buffer[peak_idx-fft_size], ce)) { - fprintf(stderr, "Error computing channel estimation\n"); - exit(-1); - } - - // Find SSS - int sss_idx = peak_idx-2*fft_size-(SRSLTE_CP_ISNORM(cp)?SRSLTE_CP_LEN(fft_size, SRSLTE_CP_NORM_LEN):SRSLTE_CP_LEN(fft_size, SRSLTE_CP_EXT_LEN)); - if (sss_idx >= 0 && sss_idx < flen-fft_size) { - srslte_sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 3, NULL, &m0, &m0_value, &m1, &m1_value); - if (srslte_sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error2++; - } - INFO("Partial N_id_1: %d\n", srslte_sss_synch_N_id_1(&sss, m0, m1)); - srslte_sss_synch_m0m1_diff(&sss, &buffer[sss_idx], &m0, &m0_value, &m1, &m1_value); - if (srslte_sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error3++; - } - INFO("Diff N_id_1: %d\n", srslte_sss_synch_N_id_1(&sss, m0, m1)); - srslte_sss_synch_m0m1_partial(&sss, &buffer[sss_idx], 1, NULL, &m0, &m0_value, &m1, &m1_value); - if (srslte_sss_synch_N_id_1(&sss, m0, m1) != N_id_1) { - sss_error1++; - } - INFO("Full N_id_1: %d\n", srslte_sss_synch_N_id_1(&sss, m0, m1)); - } - - // Estimate CP - if (peak_idx > 2*(fft_size + SRSLTE_CP_LEN_EXT(fft_size))) { - srslte_cp_t cp = srslte_sync_detect_cp(&ssync, buffer, peak_idx); - if (SRSLTE_CP_ISNORM(cp)) { - cp_is_norm++; - } - } - - } else { - INFO("No space for CFO computation. Frame starts at \n",peak_idx); - } - - if(srslte_sss_synch_subframe(m0,m1) == 0) - { -#ifndef DISABLE_GRAPHICS - if (!disable_plots) - do_plots_sss(sss.corr_output_m0, sss.corr_output_m1); -#endif - } - - } else { - nof_nodet++; - } - - if (frame_cnt > 100) { - if (abs(last_peak-peak_idx) > 4) { - if (peak_value >= threshold) { - nof_nopeakdet++; - } - nof_nopeak++; - } - } - - frame_cnt++; - - printf("[%5d]: Pos: %5d, PSR: %4.1f (~%4.1f) Pdet: %4.2f, " - "FA: %4.2f, CFO: %+4.1f kHz SSSmiss: %4.2f/%4.2f/%4.2f CPNorm: %.0f\%\r", - frame_cnt, - peak_idx, - peak_value, mean_peak, - (float) nof_det/frame_cnt, - (float) nof_nopeakdet/frame_cnt, mean_cfo*15, - (float) sss_error1/nof_det,(float) sss_error2/nof_det,(float) sss_error3/nof_det, - (float) cp_is_norm/nof_det * 100); - - if (SRSLTE_VERBOSE_ISINFO()) { - printf("\n"); - } - -#ifndef DISABLE_GRAPHICS - if (!disable_plots) - do_plots(pss.conv_output_avg, pss.conv_output_avg[peak_idx], pss.fft_size+pss.frame_size-1, ce); -#endif - - last_peak = peak_idx; - - } - - srslte_pss_synch_free(&pss); - free(buffer); - srslte_rf_close(&rf); - - printf("Ok\n"); - exit(0); -} - -extern cf_t *tmp2; - - -/********************************************************************** - * Plotting Functions - ***********************************************************************/ -#ifndef DISABLE_GRAPHICS - - -#include "srsgui/srsgui.h" -plot_real_t pssout; -//plot_complex_t pce; - -plot_real_t psss1;//, psss2; - -float tmp[100000]; -cf_t tmpce[SRSLTE_PSS_LEN]; - - -void init_plots() { - sdrgui_init(); - plot_real_init(&pssout); - plot_real_setTitle(&pssout, "PSS xCorr"); - plot_real_setLabels(&pssout, "Index", "Absolute value"); - plot_real_setYAxisScale(&pssout, 0, 1); - - /* - plot_complex_init(&pce); - plot_complex_setTitle(&pce, "Channel Estimates"); - plot_complex_setYAxisScale(&pce, Ip, -2, 2); - plot_complex_setYAxisScale(&pce, Q, -2, 2); - plot_complex_setYAxisScale(&pce, Magnitude, 0, 2); - plot_complex_setYAxisScale(&pce, Phase, -M_PI, M_PI); - */ - - plot_real_init(&psss1); - plot_real_setTitle(&psss1, "SSS xCorr m0"); - plot_real_setLabels(&psss1, "Index", "Absolute value"); - plot_real_setYAxisScale(&psss1, 0, 1); - - /* - plot_real_init(&psss2); - plot_real_setTitle(&psss2, "SSS xCorr m1"); - plot_real_setLabels(&psss2, "Index", "Absolute value"); - plot_real_setYAxisScale(&psss2, 0, 1); - */ - - -} - -void do_plots(float *corr, float energy, uint32_t size, cf_t ce[SRSLTE_PSS_LEN]) { - srslte_vec_sc_prod_fff(corr,1./energy,tmp, size); - plot_real_setNewData(&pssout, tmp, size); - -// float norm = srslte_vec_avg_power_cf(ce, SRSLTE_PSS_LEN); - // srslte_vec_sc_prod_cfc(ce, 1.0/sqrt(norm), tmpce, SRSLTE_PSS_LEN); - - //plot_complex_setNewData(&pce, tmpce, SRSLTE_PSS_LEN); -} - -void do_plots_sss(float *corr_m0, float *corr_m1) { - if (m0_value > 0) - srslte_vec_sc_prod_fff(corr_m0,1./m0_value,corr_m0, SRSLTE_SSS_N); - plot_real_setNewData(&psss1, corr_m0, SRSLTE_SSS_N); - -// if (m1_value > 0) -// srslte_vec_sc_prod_fff(corr_m1,1./m1_value,corr_m1, SRSLTE_SSS_N); -// plot_real_setNewData(&psss2, corr_m1, SRSLTE_SSS_N); -} - -#endif diff --git a/lib/examples/tutorial_examples/simple_tx.c b/lib/examples/tutorial_examples/simple_tx.c deleted file mode 100644 index b56ccb281..000000000 --- a/lib/examples/tutorial_examples/simple_tx.c +++ /dev/null @@ -1,262 +0,0 @@ -/** - * - * \section COPYRIGHT - * - * Copyright 2013-2015 Software Radio Systems Limited - * - * \section LICENSE - * - * This file is part of the srsLTE library. - * - * srsLTE is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of - * the License, or (at your option) any later version. - * - * srsLTE 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 Affero General Public License for more details. - * - * A copy of the GNU Affero General Public License can be found in - * the LICENSE file in the top-level directory of this distribution - * and at http://www.gnu.org/licenses/. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "srslte/srslte.h" - -#include "srslte/phy/rf/rf.h" -srslte_rf_t rf; - -char *output_file_name = NULL; - -srslte_cell_t cell = { - 6, // nof_prb - 1, // nof_ports - 1, // cell_id - SRSLTE_CP_NORM, // cyclic prefix - SRSLTE_PHICH_R_1, // PHICH resources - SRSLTE_PHICH_NORM // PHICH length -}; - - -char *rf_args = ""; -float rf_amp = 0.5, rf_gain = 30.0, rf_freq = 2400000000; - -bool null_file_sink=false; -srslte_filesink_t fsink; -srslte_ofdm_t ifft; -srslte_mod_t modulation; - -uint32_t sf_n_re, sf_n_samples; - -cf_t *sf_buffer = NULL, *output_buffer = NULL; - -void usage(char *prog) { - printf("Usage: %s [algfmv]\n", prog); - printf("\t-a RF args [Default %s]\n", rf_args); - printf("\t-l RF amplitude [Default %.2f]\n", rf_amp); - printf("\t-g RF TX gain [Default %.2f dB]\n", rf_gain); - printf("\t-f RF TX frequency [Default %.1f MHz]\n", rf_freq / 1000000); - printf("\t-m modulation (1: BPSK, 2: QPSK, 3: QAM16, 4: QAM64) [Default BPSK]\n"); - printf("\t-v [set srslte_verbose to debug, default none]\n"); -} - -void parse_args(int argc, char **argv) { - int opt; - while ((opt = getopt(argc, argv, "algfmv")) != -1) { - switch (opt) { - case 'a': - rf_args = argv[optind]; - break; - case 'g': - rf_gain = atof(argv[optind]); - break; - case 'l': - rf_amp = atof(argv[optind]); - break; - case 'f': - rf_freq = atof(argv[optind]); - break; - case 'm': - switch(atoi(argv[optind])) { - case 1: - modulation = SRSLTE_MOD_BPSK; - break; - case 2: - modulation = SRSLTE_MOD_QPSK; - break; - case 4: - modulation = SRSLTE_MOD_16QAM; - break; - case 6: - modulation = SRSLTE_MOD_64QAM; - break; - default: - fprintf(stderr, "Invalid modulation %d. Possible values: " - "(1: BPSK, 2: QPSK, 3: QAM16, 4: QAM64)\n", atoi(argv[optind])); - break; - } - break; - case 'v': - srslte_verbose++; - break; - default: - usage(argv[0]); - exit(-1); - } - } -#ifdef DISABLE_RF - if (!output_file_name) { - usage(argv[0]); - exit(-1); - } -#endif -} - -void base_init() { - - /* init memory */ - sf_buffer = malloc(sizeof(cf_t) * sf_n_re); - if (!sf_buffer) { - perror("malloc"); - exit(-1); - } - output_buffer = malloc(sizeof(cf_t) * sf_n_samples); - if (!output_buffer) { - perror("malloc"); - exit(-1); - } - printf("Opening RF device...\n"); - if (srslte_rf_open(&rf, rf_args)) { - fprintf(stderr, "Error opening rf\n"); - exit(-1); - } - - /* create ifft object */ - if (srslte_ofdm_tx_init(&ifft, SRSLTE_CP_NORM, cell.nof_prb)) { - fprintf(stderr, "Error creating iFFT object\n"); - exit(-1); - } - srslte_ofdm_set_normalize(&ifft, true); -} - -void base_free() { - - srslte_ofdm_tx_free(&ifft); - - if (sf_buffer) { - free(sf_buffer); - } - if (output_buffer) { - free(output_buffer); - } - srslte_rf_close(&rf); -} - - -int main(int argc, char **argv) { - int sf_idx=0, N_id_2=0; - cf_t pss_signal[SRSLTE_PSS_LEN]; - float sss_signal0[SRSLTE_SSS_LEN]; // for subframe 0 - float sss_signal5[SRSLTE_SSS_LEN]; // for subframe 5 - int i; - -#ifdef DISABLE_RF - if (argc < 3) { - usage(argv[0]); - exit(-1); - } -#endif - - parse_args(argc, argv); - - N_id_2 = cell.id % 3; - sf_n_re = 2 * SRSLTE_CP_NORM_NSYMB * cell.nof_prb * SRSLTE_NRE; - sf_n_samples = 2 * SRSLTE_SLOT_LEN(srslte_symbol_sz(cell.nof_prb)); - - cell.phich_length = SRSLTE_PHICH_NORM; - cell.phich_resources = SRSLTE_PHICH_R_1; - - /* this *must* be called after setting slot_len_* */ - base_init(); - - /* Generate PSS/SSS signals */ - srslte_pss_generate(pss_signal, N_id_2); - srslte_sss_generate(sss_signal0, sss_signal5, cell.id); - - printf("Set TX rate: %.2f MHz\n", - srslte_rf_set_tx_srate(&rf, srslte_sampling_freq_hz(cell.nof_prb)) / 1000000); - printf("Set TX gain: %.1f dB\n", srslte_rf_set_tx_gain(&rf, rf_gain)); - printf("Set TX freq: %.2f MHz\n", - srslte_rf_set_tx_freq(&rf, rf_freq) / 1000000); - - uint32_t nbits; - - srslte_modem_table_t modulator; - srslte_modem_table_init(&modulator); - srslte_modem_table_lte(&modulator, modulation); - - srslte_tcod_t turbocoder; - srslte_tcod_init(&turbocoder, SRSLTE_TCOD_MAX_LEN_CB); - - srslte_dft_precoding_t dft_precod; - srslte_dft_precoding_init(&dft_precod, 12); - - nbits = srslte_cbsegm_cbindex(sf_n_samples/8/srslte_mod_bits_x_symbol(modulation)/3 - 12); - uint32_t ncoded_bits = sf_n_samples/8/srslte_mod_bits_x_symbol(modulation); - - uint8_t *data = malloc(sizeof(uint8_t)*nbits); - uint8_t *data_enc = malloc(sizeof(uint8_t)*ncoded_bits); - cf_t *symbols = malloc(sizeof(cf_t)*sf_n_samples); - - bzero(data_enc, sizeof(uint8_t)*ncoded_bits); - while (1) { - for (sf_idx = 0; sf_idx < SRSLTE_NSUBFRAMES_X_FRAME; sf_idx++) { - bzero(sf_buffer, sizeof(cf_t) * sf_n_re); - -#ifdef kk - if (sf_idx == 0 || sf_idx == 5) { - srslte_pss_put_slot(pss_signal, sf_buffer, cell.nof_prb, SRSLTE_CP_NORM); - srslte_sss_put_slot(sf_idx ? sss_signal5 : sss_signal0, sf_buffer, cell.nof_prb, - SRSLTE_CP_NORM); - /* Transform to OFDM symbols */ - srslte_ofdm_tx_sf(&ifft, sf_buffer, output_buffer); - - float norm_factor = (float) sqrtf(cell.nof_prb)/15; - srslte_vec_sc_prod_cfc(output_buffer, rf_amp*norm_factor, output_buffer, SRSLTE_SF_LEN_PRB(cell.nof_prb)); - - } else { -#endif - /* Generate random data */ - for (i=0;i $ ) -add_library(srslte_phy SHARED ${srslte_srcs}) +add_library(srslte_phy STATIC ${srslte_srcs}) target_link_libraries(srslte_phy pthread m) set_target_properties(srslte_phy PROPERTIES VERSION ${SRSLTE_VERSION_MAJOR}.${SRSLTE_VERSION_MINOR}) -if(NOT DisableMEX) - add_library(srslte_phy_static STATIC ${srslte_srcs}) -endif(NOT DisableMEX) - find_package(MKL) if(MKL_FOUND) include_directories(${MKL_INCLUDE_DIRS}) @@ -79,26 +75,17 @@ endif(MKL_FOUND) if(MKL_FOUND) if(STATIC_MKL) target_link_libraries(srslte_phy ${MKL_STATIC_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${MKL_STATIC_LIBRARIES}) - endif(NOT DisableMEX) else(STATIC_MKL) target_link_libraries(srslte_phy ${MKL_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${MKL_LIBRARIES}) - endif(NOT DisableMEX) endif(STATIC_MKL) else(MKL_FOUND) target_link_libraries(srslte_phy ${FFTW3F_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${FFTW3F_LIBRARIES}) - endif(NOT DisableMEX) endif(MKL_FOUND) ## This linkage is required for the examples and tests only if(RF_FOUND) - target_link_libraries(srslte_phy srslte_rf) + target_link_libraries(srslte_phy) if(UHD_FOUND) target_link_libraries(srslte_phy ${UHD_LIBRARIES}) @@ -120,9 +107,6 @@ endif(RF_FOUND) if(VOLK_FOUND) target_link_libraries(srslte_phy ${VOLK_LIBRARIES}) - if(NOT DisableMEX) - target_link_libraries(srslte_phy_static ${VOLK_LIBRARIES}) - endif(NOT DisableMEX) endif(VOLK_FOUND) install(TARGETS srslte_phy DESTINATION ${LIBRARY_DIR}) diff --git a/lib/src/phy/phch/test/CMakeLists.txt b/lib/src/phy/phch/test/CMakeLists.txt index d86302f68..6170f82fe 100644 --- a/lib/src/phy/phch/test/CMakeLists.txt +++ b/lib/src/phy/phch/test/CMakeLists.txt @@ -171,5 +171,5 @@ add_test(prach_test_multi_n4 prach_test_multi -n 4) if(UHD_FOUND) add_executable(prach_test_usrp prach_test_usrp.c) - target_link_libraries(prach_test_usrp srslte_phy pthread) + target_link_libraries(prach_test_usrp srslte_rf srslte_phy pthread) endif(UHD_FOUND) diff --git a/lib/src/phy/rf/CMakeLists.txt b/lib/src/phy/rf/CMakeLists.txt index 16b0404ce..6cec5a6df 100644 --- a/lib/src/phy/rf/CMakeLists.txt +++ b/lib/src/phy/rf/CMakeLists.txt @@ -19,9 +19,14 @@ # if(RF_FOUND) + + # This library is only used by the examples + add_library(srslte_rf_utils STATIC rf_utils.c) + target_link_libraries(srslte_rf_utils srslte_phy) + # Include common RF files set(SOURCES_RF "") - list(APPEND SOURCES_RF rf_imp.c rf_utils.c) + list(APPEND SOURCES_RF rf_imp.c) if (UHD_FOUND) add_definitions(-DENABLE_UHD) @@ -40,7 +45,7 @@ if(RF_FOUND) add_library(srslte_rf SHARED ${SOURCES_RF}) - + target_link_libraries(srslte_rf srslte_rf_utils srslte_phy) if (UHD_FOUND) target_link_libraries(srslte_rf ${UHD_LIBRARIES}) diff --git a/lib/src/phy/sync/test/CMakeLists.txt b/lib/src/phy/sync/test/CMakeLists.txt index fd5c628b4..35407ca94 100644 --- a/lib/src/phy/sync/test/CMakeLists.txt +++ b/lib/src/phy/sync/test/CMakeLists.txt @@ -29,7 +29,7 @@ target_link_libraries(pss_file srslte_phy) if(UHD_FOUND) add_executable(pss_usrp pss_usrp.c) - target_link_libraries(pss_usrp srslte_phy) + target_link_libraries(pss_usrp srslte_phy srslte_rf) endif(UHD_FOUND) diff --git a/lib/src/radio/CMakeLists.txt b/lib/src/radio/CMakeLists.txt index dc972bb79..1e7829e87 100644 --- a/lib/src/radio/CMakeLists.txt +++ b/lib/src/radio/CMakeLists.txt @@ -19,7 +19,7 @@ # if(RF_FOUND) - add_library(srslte_radio SHARED radio.cc radio_multi.cc) + add_library(srslte_radio STATIC radio.cc radio_multi.cc) target_link_libraries(srslte_radio srslte_rf) install(TARGETS srslte_radio DESTINATION ${LIBRARY_DIR}) endif(RF_FOUND)