From 8ef4ab12dd71c6fd1d3a2e8c64e2599f725b7580 Mon Sep 17 00:00:00 2001 From: Florian Kaltenberger Date: Tue, 21 Apr 2015 12:09:23 +0000 Subject: [PATCH] removing rest of USERSPACE_TOOLS (unused or depricated) git-svn-id: http://svn.eurecom.fr/openair4G/trunk@7224 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair1/USERSPACE_TOOLS/OAI_FW_INIT/COPYING | 674 ----------- openair1/USERSPACE_TOOLS/OAI_FW_INIT/Makefile | 6 - openair1/USERSPACE_TOOLS/OAI_FW_INIT/elf.h | 605 ---------- .../USERSPACE_TOOLS/OAI_FW_INIT/elftypes.h | 80 -- openair1/USERSPACE_TOOLS/OAI_FW_INIT/main | Bin 261437 -> 0 bytes .../USERSPACE_TOOLS/OAI_FW_INIT/updatefw.c | 657 ----------- .../USERSPACE_TOOLS/OAI_FW_INIT/updatefw.h | 72 -- .../OCTAVE/AGILE_RF_TOOLS/IQ_estimation.m | 100 -- .../OCTAVE/AGILE_RF_TOOLS/phasenoise.m | 42 - .../OCTAVE/AGILE_RF_TOOLS/plots.m | 48 - .../OCTAVE/AGILE_RF_TOOLS/plots2.m | 68 -- .../AGILE_RF_TOOLS/rx_calibrate_agileRF.m | 109 -- .../OCTAVE/AGILE_RF_TOOLS/rx_calibration.m | 91 -- .../AGILE_RF_TOOLS/rx_calibration_quick.m | 155 --- .../OCTAVE/AGILE_RF_TOOLS/rx_open_correct.m | 51 - .../OCTAVE/AGILE_RF_TOOLS/rx_post.m | 43 - .../OCTAVE/AGILE_RF_TOOLS/rx_post_iq.m | 96 -- .../OCTAVE/AGILE_RF_TOOLS/rx_spec.m | 8 - .../OCTAVE/AGILE_RF_TOOLS/rx_spec2.m | 11 - .../OCTAVE/AGILE_RF_TOOLS/rx_store.m | 18 - .../OCTAVE/AGILE_RF_TOOLS/rx_store2.m | 42 - .../OCTAVE/AGILE_RF_TOOLS/rx_store_ref.m | 18 - .../OCTAVE/AGILE_RF_TOOLS/s_mxa.m | 93 -- .../OCTAVE/AGILE_RF_TOOLS/script.m | 111 -- .../OCTAVE/AGILE_RF_TOOLS/toto.m | 112 -- .../AGILE_RF_TOOLS/tx_calibrate_FlexRF.m | 94 -- .../OCTAVE/AGILE_RF_TOOLS/variouspowers.m | 33 - .../OCTAVE/AGILE_RF_TOOLS/write_table.m | 33 - .../CBMIMO1_TOOLS/MAX2391Gain_v2_3_800.png | Bin 4075 -> 0 bytes .../CBMIMO1_TOOLS/MAX2391NF_v2_3_800.png | Bin 4003 -> 0 bytes .../OCTAVE/CBMIMO1_TOOLS/Makefile | 54 - .../OCTAVE/CBMIMO1_TOOLS/OFDM_TX.m | 19 - .../OCTAVE/CBMIMO1_TOOLS/OFDM_TX_FRAME.m | 22 - .../OCTAVE/CBMIMO1_TOOLS/QAM_MOD.m | 29 - .../OCTAVE/CBMIMO1_TOOLS/bitplots.m | 18 - .../OCTAVE/CBMIMO1_TOOLS/freq_calibration.m | 89 -- .../OCTAVE/CBMIMO1_TOOLS/gain_table_10.h | 66 -- .../OCTAVE/CBMIMO1_TOOLS/gain_table_11.h | 9 - .../OCTAVE/CBMIMO1_TOOLS/gain_table_12.h | 66 -- .../OCTAVE/CBMIMO1_TOOLS/gain_table_2.h | 66 -- .../OCTAVE/CBMIMO1_TOOLS/gain_table_7.h | 66 -- .../CBMIMO1_TOOLS/gain_table_v2_13_800_s3.h | 32 - .../CBMIMO1_TOOLS/gain_table_v2_13_800_s3.mat | Bin 4448 -> 0 bytes .../CBMIMO1_TOOLS/gain_table_v2_3_800_ue.h | 32 - .../CBMIMO1_TOOLS/gain_table_v2_3_800_ue.mat | Bin 3360 -> 0 bytes .../CBMIMO1_TOOLS/gain_table_v2_7_800_s1.h | 32 - .../CBMIMO1_TOOLS/gain_table_v2_7_800_s1.mat | Bin 4448 -> 0 bytes .../CBMIMO1_TOOLS/gain_table_v2_8_800_s2.h | 32 - .../CBMIMO1_TOOLS/gain_table_v2_8_800_s2.mat | Bin 4448 -> 0 bytes .../OCTAVE/CBMIMO1_TOOLS/gpib_send.cc | 101 -- .../OCTAVE/CBMIMO1_TOOLS/launch_gpib.sh | 4 - .../OCTAVE/CBMIMO1_TOOLS/limeparms.m | 75 -- .../OCTAVE/CBMIMO1_TOOLS/oarf_common.c | 655 ----------- .../OCTAVE/CBMIMO1_TOOLS/oarf_config.cc | 154 --- .../OCTAVE/CBMIMO1_TOOLS/oarf_get_frame.cc | 206 ---- .../OCTAVE/CBMIMO1_TOOLS/oarf_get_rtframe.cc | 157 --- .../OCTAVE/CBMIMO1_TOOLS/oarf_send_frame.cc | 184 --- .../oarf_set_calibrated_rx_gain.cc | 74 -- .../OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_gain.cc | 100 -- .../CBMIMO1_TOOLS/oarf_set_rx_rfmode.cc | 75 -- .../OCTAVE/CBMIMO1_TOOLS/oarf_set_tcxo_dac.cc | 73 -- .../OCTAVE/CBMIMO1_TOOLS/oarf_set_tx_gain.cc | 103 -- .../OCTAVE/CBMIMO1_TOOLS/oarf_stop.cc | 78 -- .../OCTAVE/CBMIMO1_TOOLS/openair_init.m | 2 - .../OCTAVE/CBMIMO1_TOOLS/phasenoise.m | 42 - .../OCTAVE/CBMIMO1_TOOLS/plot_png.m | 69 -- .../OCTAVE/CBMIMO1_TOOLS/plots.m | 48 - .../OCTAVE/CBMIMO1_TOOLS/plots2.m | 68 -- .../OCTAVE/CBMIMO1_TOOLS/rx_calibration.m | 91 -- .../CBMIMO1_TOOLS/rx_calibration_quick.m | 183 --- .../rx_calibration_quick800_ue.m | 183 --- .../OCTAVE/CBMIMO1_TOOLS/rx_post.m | 42 - .../OCTAVE/CBMIMO1_TOOLS/rx_pss.m | 10 - .../OCTAVE/CBMIMO1_TOOLS/rx_spec.m | 26 - .../OCTAVE/CBMIMO1_TOOLS/rx_store.m | 13 - .../OCTAVE/CBMIMO1_TOOLS/txsig.m | 83 -- .../OCTAVE/CBMIMO1_TOOLS/txsig_ofdm.m | 27 - .../OCTAVE/CBMIMO1_TOOLS/variouspowers.m | 33 - .../OCTAVE/CBMIMO1_TOOLS/write_table.m | 33 - .../OCTAVE/CBMIMO1_TOOLS/write_tcxo.m | 15 - openair1/USERSPACE_TOOLS/OCTAVE/GPIB/Makefile | 13 - .../USERSPACE_TOOLS/OCTAVE/GPIB/gpibcmd.c | 56 - .../USERSPACE_TOOLS/OCTAVE/GPIB/querygpib | Bin 8023 -> 0 bytes .../USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.c | 57 - .../USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.m | 7 - .../USERSPACE_TOOLS/OCTAVE/GPIB/sendgpib.m | 12 - .../OCTAVE/PHY_SIM/CHSCH0_sync_4xf0.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH0_sync_4xf1.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH1_sync_4xf0.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH1_sync_4xf1.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH2_sync_4xf0.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH2_sync_4xf1.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH3_sync_4xf0.m | 1025 ----------------- .../OCTAVE/PHY_SIM/CHSCH3_sync_4xf1.m | 1025 ----------------- .../OCTAVE/PHY_SIM/chsch0_syncf.m | 257 ----- .../OCTAVE/PHY_SIM/chsch0_syncf_tx.m | 257 ----- .../OCTAVE/PHY_SIM/chsch1_syncf.m | 257 ----- .../OCTAVE/PHY_SIM/chsch1_syncf_tx.m | 257 ----- .../OCTAVE/PHY_SIM/chsch2_syncf.m | 257 ----- .../OCTAVE/PHY_SIM/chsch2_syncf_tx.m | 257 ----- .../OCTAVE/PHY_SIM/chsch3_syncf.m | 257 ----- .../OCTAVE/PHY_SIM/chsch3_syncf_tx.m | 257 ----- .../OCTAVE/PHY_SIM/rx_frame.dat | Bin 163840 -> 0 bytes .../OCTAVE/PHY_SIM/rx_frame_2streams.dat | Bin 163840 -> 0 bytes .../OCTAVE/PHY_SIM/sync_user.m | 87 -- openair1/USERSPACE_TOOLS/OCTAVE/modify_path.m | 3 - openair1/USERSPACE_TOOLS/OPENAIR_RF/COPYING | 674 ----------- openair1/USERSPACE_TOOLS/OPENAIR_RF/Makefile | 62 - openair1/USERSPACE_TOOLS/OPENAIR_RF/affich.m | 47 - .../USERSPACE_TOOLS/OPENAIR_RF/fft_test.c | 413 ------- .../USERSPACE_TOOLS/OPENAIR_RF/fix_fft2.c | 449 -------- openair1/USERSPACE_TOOLS/OPENAIR_RF/load.c | 165 --- .../OPENAIR_RF/load_calibration_data.c | 163 --- .../OPENAIR_RF/openair_generate_ofdm.c | 210 ---- .../USERSPACE_TOOLS/OPENAIR_RF/openair_rf.c | 732 ------------ openair1/USERSPACE_TOOLS/OPENAIR_RF/test_rx.m | 41 - .../USERSPACE_TOOLS/OPENAIR_RF/txgains.sh | 11 - openair1/USERSPACE_TOOLS/SCOPE/COPYING | 674 ----------- openair1/USERSPACE_TOOLS/SCOPE/Makefile | 34 - openair1/USERSPACE_TOOLS/SCOPE/chbch.c | 456 -------- .../USERSPACE_TOOLS/SCOPE/chbch_2streams.c | 447 ------- .../USERSPACE_TOOLS/SCOPE/chbch_2streams_ml.c | 446 ------- .../SCOPE/chbch_2streams_scope.c | 77 -- .../SCOPE/chbch_2streams_scope.fd | 196 ---- .../SCOPE/chbch_2streams_scope.h | 56 - openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.c | 71 -- openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.fd | 160 --- openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.h | 54 - openair1/USERSPACE_TOOLS/SCOPE/lte.c | 479 -------- openair1/USERSPACE_TOOLS/SCOPE/lte_scope.c | 107 -- openair1/USERSPACE_TOOLS/SCOPE/lte_scope.fd | 178 --- openair1/USERSPACE_TOOLS/SCOPE/lte_scope.h | 59 - openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.c | 92 -- .../USERSPACE_TOOLS/SCOPE/lte_scope_ul.fd | 214 ---- openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.h | 57 - openair1/USERSPACE_TOOLS/SCOPE/lte_ul.c | 462 -------- openair1/USERSPACE_TOOLS/SCOPE/sach.c | 403 ------- openair1/USERSPACE_TOOLS/SCOPE/sach_scope.c | 129 --- openair1/USERSPACE_TOOLS/SCOPE/sach_scope.fd | 754 ------------ openair1/USERSPACE_TOOLS/SCOPE/sach_scope.h | 87 -- openair1/USERSPACE_TOOLS/SENSING/COPYING | 674 ----------- openair1/USERSPACE_TOOLS/SENSING/Makefile | 49 - .../USERSPACE_TOOLS/SENSING/main_sensing.c | 199 ---- .../USERSPACE_TOOLS/SENSING/sensing_matlab.m | 15 - 144 files changed, 27196 deletions(-) delete mode 100644 openair1/USERSPACE_TOOLS/OAI_FW_INIT/COPYING delete mode 100644 openair1/USERSPACE_TOOLS/OAI_FW_INIT/Makefile delete mode 100644 openair1/USERSPACE_TOOLS/OAI_FW_INIT/elf.h delete mode 100644 openair1/USERSPACE_TOOLS/OAI_FW_INIT/elftypes.h delete mode 100755 openair1/USERSPACE_TOOLS/OAI_FW_INIT/main delete mode 100644 openair1/USERSPACE_TOOLS/OAI_FW_INIT/updatefw.c delete mode 100644 openair1/USERSPACE_TOOLS/OAI_FW_INIT/updatefw.h delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/IQ_estimation.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/phasenoise.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/plots.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/plots2.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibrate_agileRF.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration_quick.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_open_correct.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post_iq.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_spec.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_spec2.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store2.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store_ref.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/s_mxa.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/script.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/toto.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/tx_calibrate_FlexRF.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/variouspowers.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/write_table.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/MAX2391Gain_v2_3_800.png delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/MAX2391NF_v2_3_800.png delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/Makefile delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/OFDM_TX.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/OFDM_TX_FRAME.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/QAM_MOD.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/bitplots.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/freq_calibration.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_10.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_11.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_12.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_2.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_7.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.mat delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.mat delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.mat delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_8_800_s2.h delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_8_800_s2.mat delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gpib_send.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/launch_gpib.sh delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/limeparms.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_common.c delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_config.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_frame.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_rtframe.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_send_frame.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_calibrated_rx_gain.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_gain.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_rfmode.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tcxo_dac.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tx_gain.cc delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_stop.cc delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/openair_init.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/phasenoise.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plot_png.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots2.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick800_ue.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_post.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_pss.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_spec.m delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_store.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig_ofdm.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/variouspowers.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_table.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_tcxo.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/GPIB/Makefile delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/GPIB/gpibcmd.c delete mode 100755 openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.c delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/GPIB/sendgpib.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf0.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf1.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf0.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf1.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf0.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf1.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf0.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf1.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf_tx.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf_tx.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf_tx.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf_tx.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/rx_frame.dat delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/rx_frame_2streams.dat delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/sync_user.m delete mode 100644 openair1/USERSPACE_TOOLS/OCTAVE/modify_path.m delete mode 100644 openair1/USERSPACE_TOOLS/OPENAIR_RF/COPYING delete mode 100755 openair1/USERSPACE_TOOLS/OPENAIR_RF/Makefile delete mode 100644 openair1/USERSPACE_TOOLS/OPENAIR_RF/affich.m delete mode 100644 openair1/USERSPACE_TOOLS/OPENAIR_RF/fft_test.c delete mode 100755 openair1/USERSPACE_TOOLS/OPENAIR_RF/fix_fft2.c delete mode 100755 openair1/USERSPACE_TOOLS/OPENAIR_RF/load.c delete mode 100755 openair1/USERSPACE_TOOLS/OPENAIR_RF/load_calibration_data.c delete mode 100644 openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_generate_ofdm.c delete mode 100755 openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_rf.c delete mode 100644 openair1/USERSPACE_TOOLS/OPENAIR_RF/test_rx.m delete mode 100755 openair1/USERSPACE_TOOLS/OPENAIR_RF/txgains.sh delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/COPYING delete mode 100755 openair1/USERSPACE_TOOLS/SCOPE/Makefile delete mode 100755 openair1/USERSPACE_TOOLS/SCOPE/chbch.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_ml.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.fd delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.h delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.fd delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.h delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/lte.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/lte_scope.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/lte_scope.fd delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/lte_scope.h delete mode 100755 openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.c delete mode 100755 openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.fd delete mode 100755 openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.h delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/lte_ul.c delete mode 100755 openair1/USERSPACE_TOOLS/SCOPE/sach.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/sach_scope.c delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/sach_scope.fd delete mode 100644 openair1/USERSPACE_TOOLS/SCOPE/sach_scope.h delete mode 100644 openair1/USERSPACE_TOOLS/SENSING/COPYING delete mode 100644 openair1/USERSPACE_TOOLS/SENSING/Makefile delete mode 100644 openair1/USERSPACE_TOOLS/SENSING/main_sensing.c delete mode 100644 openair1/USERSPACE_TOOLS/SENSING/sensing_matlab.m diff --git a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/COPYING b/openair1/USERSPACE_TOOLS/OAI_FW_INIT/COPYING deleted file mode 100644 index 818433ecc0..0000000000 --- a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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. - - This program 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 this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/Makefile b/openair1/USERSPACE_TOOLS/OAI_FW_INIT/Makefile deleted file mode 100644 index adca6587b3..0000000000 --- a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -updatefw: updatefw.c - $(CC) updatefw.c -o updatefw -I../../../targets/ARCH/EXMIMO - -clean: - rm -f updatefw - diff --git a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/elf.h b/openair1/USERSPACE_TOOLS/OAI_FW_INIT/elf.h deleted file mode 100644 index 35084dcbc9..0000000000 --- a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/elf.h +++ /dev/null @@ -1,605 +0,0 @@ -/******************************************************************************* - 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 . - - 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: elf.h - Include file for ELF file. Defines both 32-/64-bit files. - Copyright Hewlett-Packard Co. 1996. All rights reserved. -============================================================================*/ - -#ifndef ELF_INCLUDED -#define ELF_INCLUDED - -#include "elftypes.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/*============================================================================ - Constant values for the sizes of fundamental types -============================================================================*/ - -#define ELF64_FSZ_ADDR 8 -#define ELF64_FSZ_HALF 2 -#define ELF64_FSZ_OFF 8 -#define ELF64_FSZ_SWORD 4 -#define ELF64_FSZ_WORD 4 -#define ELF64_FSZ_SXWORD 8 -#define ELF64_FSZ_XWORD 8 - -#define ELF32_FSZ_ADDR 4 -#define ELF32_FSZ_HALF 2 -#define ELF32_FSZ_OFF 4 -#define ELF32_FSZ_SWORD 4 -#define ELF32_FSZ_WORD 4 -#define ELF32_FSZ_XWORD 4 - -/*============================================================================ - The EI_* macros define indices into the e_ident[] array of the - ElfXX_Ehdr structure. -============================================================================*/ - -#define EI_MAG0 0 /* File identification */ -#define EI_MAG1 1 /* File identification */ -#define EI_MAG2 2 /* File identification */ -#define EI_MAG3 3 /* File identification */ -#define EI_CLASS 4 /* File class */ -#define EI_DATA 5 /* Data encoding */ -#define EI_VERSION 6 /* File version */ -#define EI_OSABI 7 /* OS/ABI identification */ -#define EI_ABIVERSION 8 /* ABI version */ -#define EI_PAD 9 /* Start of padding bytes */ - -#define EI_NIDENT 16 /* Size of e_ident[] */ - - -/*============================================================================ - ElfXX_Ehdr - ELF file header structure. -============================================================================*/ - -typedef struct { - unsigned char e_ident[EI_NIDENT]; /* ELF identification */ - Elf64_Half e_type; /* Object file type */ - Elf64_Half e_machine; /* Machine type */ - Elf64_Word e_version; /* Object file version */ - Elf64_Addr e_entry; /* Entry point address */ - Elf64_Off e_phoff; /* Program header offset */ - Elf64_Off e_shoff; /* Section header offset */ - Elf64_Word e_flags; /* Processor-specific flags */ - Elf64_Half e_ehsize; /* ELF header size */ - Elf64_Half e_phentsize; /* Size of program header entry */ - Elf64_Half e_phnum; /* Number of program header entries */ - Elf64_Half e_shentsize; /* Size of section header entry */ - Elf64_Half e_shnum; /* Number of section header entries */ - Elf64_Half e_shstrndx; /* Section name string table index */ -} Elf64_Ehdr; - -typedef struct { - unsigned char e_ident[EI_NIDENT]; /*16/ ELF "magic number" */ - Elf32_Half e_type; /* 2/ Identifies object file type */ - Elf32_Half e_machine; /* 2/ Specifies required architecture */ - Elf32_Word e_version; /* 4/ Identifies object file version */ - Elf32_Addr e_entry; /* 4/ Entry point virtual address */ - Elf32_Off e_phoff; /* 4/ Program header table file offset */ - Elf32_Off e_shoff; /* 4/ Section header table file offset */ - Elf32_Word e_flags; /* 4/ Processor-specific flags */ - Elf32_Half e_ehsize; /* 2/ ELF header size in bytes */ - Elf32_Half e_phentsize; /* 2/ Program header table entry size */ - Elf32_Half e_phnum; /* 2/ Program header table entry count */ - Elf32_Half e_shentsize; /* 2/ Section header table entry size */ - Elf32_Half e_shnum; /* 2/ Section header table entry count */ - Elf32_Half e_shstrndx; /* 2/ Section header string table index */ -} Elf32_Ehdr; - - -/*============================================================================ - The ELFCLASS* macros are the defined values of e_ident[EI_CLASS]. -============================================================================*/ - -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ - -#define ELFCLASS64_A 200 /* 64-bit objects (interim definition) */ - - -/*============================================================================ - The ELFDATA* macros are the allowed values of e_ident[EI_DATA]. -============================================================================*/ - -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* 2's complement, LSB at lowest byte address */ -#define ELFDATA2MSB 2 /* 2's complement, MSB at lowest byte address */ - - -/*============================================================================ - The ELFOSIABI* macros are the allowed values of e_ident[EI_OSABI]. -============================================================================*/ - -#define ELFOSABI_SYSV 0 /* System V ABI, third edition, no checking */ -#define ELFOSABI_HPUX 1 /* HP-UX operating system */ - -#define ELFOSABI_STANDALONE 255 /* STANDALONE operating system */ - - -/*============================================================================ - The ELFABIVERSION* macros are the allowed values of e_ident[EI_ABIVERSION]. -============================================================================*/ - -#define ELFABI_HPUX_NONE 0 /* None specified */ -#define ELFABI_HPUX_REL11 1 - - -/*============================================================================ - The ET_* macros define the values of the e_type field of the ElfXX_Ehdr - structure. -============================================================================*/ - -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ - -#define ET_LOOS 0xfe00 /* OS-specific lowest value */ -#define ET_HIOS 0xfeff /* OS-specific highest value */ - -#define ET_LOPROC 0xff00 /* Processor-specific lowest value */ -#define ET_HIPROC 0xffff /* Processor-specific highest value */ - - -/*============================================================================ - The EV_* macros are the allowed values of the e_version field of - ElfXX_Ehdr; -============================================================================*/ - -#define EV_NONE 0 /* Invalid version */ -#define EV_CURRENT 1 /* Current version */ - - -/*============================================================================ - The ELFMAG* macros are the values of e_ident[EI_MAG0-4] -============================================================================*/ - -#define ELFMAG0 0x7f /* magic number, byte 0 */ -#define ELFMAG1 'E' /* magic number, byte 1 */ -#define ELFMAG2 'L' /* magic number, byte 2 */ -#define ELFMAG3 'F' /* magic number, byte 3 */ -#define ELFMAG "\177ELF" /* magic string */ -#define SELFMAG 4 /* magic string length */ - - -/*============================================================================ - ElfXX_Phdr - program header structure. Element of the array of - program headers. -============================================================================*/ - -typedef struct { - Elf64_Word p_type; /* Type of segment */ - Elf64_Word p_flags; /* Segment attributes */ - Elf64_Off p_offset; /* Offset in file */ - Elf64_Addr p_vaddr; /* Virtual address in memory */ - Elf64_Addr p_paddr; /* Reserved */ - Elf64_Xword p_filesz; /* Size of segment in file */ - Elf64_Xword p_memsz; /* Size of segment in memory */ - Elf64_Xword p_align; /* Alignment of segment */ -} Elf64_Phdr; - -typedef struct { - Elf32_Word p_type; /* Type of segment */ - Elf32_Off p_offset; /* Offset in file */ - Elf32_Addr p_vaddr; /* Virtual address in memory */ - Elf32_Addr p_paddr; /* Reserved */ - Elf32_Xword p_filesz; /* Size of segment in file */ - Elf32_Xword p_memsz; /* Size of segment in memory */ - Elf32_Word p_flags; /* Segment attributes */ - Elf32_Xword p_align; /* Alignment of segment */ -} Elf32_Phdr; - - -/*============================================================================ - The PF_* macros are the segment flag bits in p_flags of ElfXX_Phdr. -============================================================================*/ - -#define PF_X 0x1 /* Execute */ -#define PF_W 0x2 /* Write */ -#define PF_R 0x4 /* Read */ - -#define PF_MASKOS 0x0ff00000 /* OS-specific */ - -#define PF_MASKPROC 0xf0000000 /* Processor-specific */ - - -/*============================================================================ - The PT_* macros are the values of p_type in ElfXX_Phdr. -============================================================================*/ - -#define PT_NULL 0 /* Array element is unused. Ignore. */ -#define PT_LOAD 1 /* Loadable segment. */ -#define PT_DYNAMIC 2 /* Dynamic Section */ -#define PT_INTERP 3 /* Section is a path to an interpreter */ -#define PT_NOTE 4 /* Note Section */ -#define PT_SHLIB 5 /* Currently unspecified semantics */ -#define PT_PHDR 6 /* Program header table. */ - -#define PT_LOOS 0x60000000 /* Lowest OS-specific type */ -#define PT_HIOS 0x6fffffff /* Highest OS-specific type */ - -#define PT_LOPROC 0x70000000 /* Lowest Processor-specific type */ -#define PT_HIPROC 0x7fffffff /* Highest Processor-specific type */ - - -/*============================================================================ - ElfXX_Shdr - structure for an ELF section header. Element of the array - of section headers. -============================================================================*/ - -typedef struct { - Elf64_Word sh_name; /* Section name */ - Elf64_Word sh_type; /* Section type */ - Elf64_Xword sh_flags; /* Section attributes */ - Elf64_Addr sh_addr; /* Virtual address in memory */ - Elf64_Off sh_offset; /* Offset in file */ - Elf64_Xword sh_size; /* Size of section */ - Elf64_Word sh_link; /* Link to other section */ - Elf64_Word sh_info; /* Miscellaneous information */ - Elf64_Xword sh_addralign; /* Address alignment boundary */ - Elf64_Xword sh_entsize; /* Entry size, if section has table */ -} Elf64_Shdr; - -typedef struct { - Elf32_Word sh_name; /* Section name */ - Elf32_Word sh_type; /* Section type */ - Elf32_Xword sh_flags; /* Section attributes */ - Elf32_Addr sh_addr; /* Virtual address in memory */ - Elf32_Off sh_offset; /* Offset in file */ - Elf32_Xword sh_size; /* Size of section */ - Elf32_Word sh_link; /* Link to other section */ - Elf32_Word sh_info; /* Miscellaneous information */ - Elf32_Xword sh_addralign; /* Address alignment boundary*/ - Elf32_Xword sh_entsize; /* Entry size, if section has table */ -} Elf32_Shdr; - - -/*============================================================================ - The ELF_STRING_xxx macros are names of common sections -============================================================================*/ - -#define ELF_STRING_bss ".bss" -#define ELF_STRING_hbss ".hbss" -#define ELF_STRING_sbss ".sbss" -#define ELF_STRING_tbss ".tbss" -#define ELF_STRING_data ".data" -#define ELF_STRING_hdata ".hdata" -#define ELF_STRING_sdata ".sdata" -#define ELF_STRING_fini ".fini" -#define ELF_STRING_init ".init" -#define ELF_STRING_interp ".interp" -#define ELF_STRING_rodata ".rodata" -#define ELF_STRING_text ".text" -#define ELF_STRING_comment ".comment" -#define ELF_STRING_dynamic ".dynamic" -#define ELF_STRING_dynstr ".dynstr" -#define ELF_STRING_dynsym ".dynsym" -#define ELF_STRING_dlt ".dlt" -#define ELF_STRING_note ".note" -#define ELF_STRING_opd ".opd" -#define ELF_STRING_plt ".plt" -#define ELF_STRING_bss_rela ".rela.bss" -#define ELF_STRING_hbss_rela ".rela.hbss" -#define ELF_STRING_data_rela ".rela.data" -#define ELF_STRING_dlt_rela ".rela.dlt" -#define ELF_STRING_plt_rela ".rela.plt" -#define ELF_STRING_sdata_rela ".rela.sdata" -#define ELF_STRING_strtab ".strtab" -#define ELF_STRING_symtab ".symtab" -#define ELF_STRING_hash ".hash" -#define ELF_STRING_shstrtab ".shstrtab" -#define ELF_STRING_shsymtab ".shsymtab" -#define ELF_STRING_rela ".rela" -#define ELF_STRING_rel ".rel" - - -/*============================================================================ - The SHF_* macros are the allowed values of the sh_flags field of - ElfXX_Shdr. These 1-bit flags define attributes of a section. -============================================================================*/ - -#define SHF_WRITE 0x1 /* Writable during execution */ -#define SHF_ALLOC 0x2 /* Occupies memory during execution */ -#define SHF_EXECINSTR 0x4 /* Contains executable instructions */ - -#define SHF_MASKPROC 0xf0000000 /* mask for processor-specific bits */ - - -/*============================================================================ - SHN_* macros are reserved section header indices. An object file will - not have sections for these special indices. -============================================================================*/ - -#define SHN_UNDEF 0 /* undefined, e.g. undefined symbol */ - -#define SHN_LORESERVE 0xff00 /* Lower bound of reserved indices */ - -#define SHN_LOPROC 0xff00 /* Lower bound processor-specific index */ -#define SHN_HIPROC 0xff1f/* Upper bound processor-specific index */ - -#define SHN_LOOS 0xff20 /* Lower bound OS-specific index */ -#define SHN_HIOS 0xff3f /* Upper bound OS-specific index */ - -#define SHN_ABS 0xfff1 /* Absolute value, not relocated */ -#define SHN_COMMON 0xfff2/* FORTRAN common or unallocated C */ - -#define SHN_HIRESERVE 0xffff /* Upper bound of reserved indices */ - - -/*============================================================================ - SHT_* macros are the values of sh_type in ElfXX_Shdr -============================================================================*/ - -#define SHT_NULL 0 /* Inactive section header */ -#define SHT_PROGBITS 1 /* Information defined by the program */ -#define SHT_SYMTAB 2 /* Symbol table - not DLL */ -#define SHT_STRTAB 3 /* String table */ -#define SHT_RELA 4 /* Explicit addend relocations, Elf64_Rela */ -#define SHT_HASH 5 /* Symbol hash table */ -#define SHT_DYNAMIC 6 /* Information for dynamic linking */ -#define SHT_NOTE 7 /* A Note section */ -#define SHT_NOBITS 8 /* Like SHT_PROGBITS with no data */ -#define SHT_REL 9 /* Implicit addend relocations, Elf64_Rel */ -#define SHT_SHLIB 10 /* Currently unspecified semantics */ -#define SHT_DYNSYM 11 /* Symbol table for a DLL */ - -#define SHT_LOOS 0x60000000 /* Lowest OS-specific section type */ -#define SHT_HIOS 0x6fffffff /* Highest OS-specific section type */ - -#define SHT_LOPROC 0x70000000 /* Lowest processor-specific section type */ -#define SHT_HIPROC 0x7fffffff /* Highest processor-specific section type */ - - -/*============================================================================ - ElfXX_Sym - ELF symbol structure. -============================================================================*/ - -typedef struct { - Elf64_Word st_name; /* Symbol name */ - unsigned char st_info; /* Type and Binding attributes */ - unsigned char st_other; /* Reserved */ - Elf64_Half st_shndx; /* Section table index */ - Elf64_Addr st_value; /* Symbol value */ - Elf64_Xword st_size; /* Size of object (e.g., common) */ -} Elf64_Sym; - -typedef struct { - Elf32_Word st_name; /* Symbol name */ - Elf32_Addr st_value; /* Symbol value */ - Elf32_Xword st_size; /* Size of object (e.g., common) */ - unsigned char st_info; /* Type and Binding attributes */ - unsigned char st_other; /* Reserved */ - Elf32_Half st_shndx; /* Section table index */ -} Elf32_Sym; - - -/*============================================================================ - The ELFXX_ST_* macros operate on the st_info field of ElfXX_Sym - to extract binding attributes, type information and how to build - an st_info value from binding and type information. -============================================================================*/ - -#define ELF64_ST_BIND(val) ((val) >> 4) -#define ELF64_ST_TYPE(val) ((val) & 0xf) -#define ELF64_ST_INFO(bind,type) (((bind) << 4) + ((type) & 0xf)) - -#define ELF32_ST_BIND(val) ((val) >> 4) -#define ELF32_ST_TYPE(val) ((val) & 0xf) -#define ELF32_ST_INFO(bind,type) (((bind) << 4) + ((type) & 0xf)) - - -/*============================================================================ - STN_UNDEF (zero) designeates the first entry in the symbol table and serves - as the undefined symbol index. -============================================================================*/ - -#define STN_UNDEF 0 - - -/*============================================================================ - The STB_* macros are the defined values of the binding information part - of st_info in ElfXX_Sym. -============================================================================*/ - -#define STB_LOCAL 0 /* Local symbols */ -#define STB_GLOBAL 1 /* Globally visible symbols */ -#define STB_WEAK 2 /* Global symbols with lower precedence */ - -#define STB_LOOS 10 /* Lowest OS-specific value */ -#define STB_HIOS 12 /* Highest OS-specific value */ - -#define STB_LOPROC 13 /* Lowest processor-specific value */ -#define STB_HIPROC 15 /* Highest processor-specific value */ - - -/*=========================================================================== - The STT_* macros are the allowed values of the type information part of - st_info in ElfXX_Sym. -============================================================================*/ - -#define STT_NOTYPE 0 /* Undefined symbol type */ -#define STT_OBJECT 1 /* A data object, variable, array, etc. */ -#define STT_FUNC 2 /* A function or other executable code */ -#define STT_SECTION 3 /* Symbol associated with a section */ -#define STT_FILE 4 /* Typically the name of the source file */ - -#define STT_LOOS 10 /* Lowest OS-specific symbol type */ -#define STT_HIOS 12 /* Highest OS-specific symbol type */ - -#define STT_LOPROC 13 /* Lowest processor-specific symbol type */ -#define STT_HIPROC 15 /* Highest processor-specific symbol type */ - - -/*============================================================================ - ElfXX_Rel - ELF relocation without an explicit addend. -============================================================================*/ - -typedef struct { - Elf64_Addr r_offset; /* Address of reference */ - Elf64_Xword r_info; /* Symbol index, relocation type */ -} Elf64_Rel; - -typedef struct { - Elf32_Addr r_offset; /* Address of reference */ - Elf32_Xword r_info; /* Symbol index, reloc. type */ -} Elf32_Rel; - -/*============================================================================ - ElfXX_Rela - ELF relocation with an explicit addend. -============================================================================*/ - -typedef struct { - Elf64_Addr r_offset; /* Address of reference */ - Elf64_Xword r_info; /* Symbol index, relocation type */ - Elf64_Sxword r_addend; /* Constant part of expression */ -} Elf64_Rela; - -typedef struct { - Elf32_Addr r_offset; /* Address of reference */ - Elf32_Xword r_info; /* Symbol index, reloc. type */ - Elf32_Sword r_addend; /* Constant part of expression */ -} Elf32_Rela; - - -/*============================================================================ - The ELFXX_R_* macros show how to extract the type and index parts - of r_info in ElfXX_Rel and ElfXX_Rela and how to build r_info - from a symbol index and type. -============================================================================*/ - -#define ELF64_R_INFO(sym,type) \ - ((((Elf64_Addr) (sym)) << 32) + ((Elf64_Addr) (type))) -#define ELF64_R_SYM(info) \ - ((Elf64_Sword) (((Elf64_Addr) (info)) >> 32)) -#define ELF64_R_TYPE(info) \ - ((Elf64_Word) (((Elf64_Addr) (info)) & 0xffffffffLL)) - -#define ELF32_R_INFO(sym,type) (((sym) << 8) + ((unsigned char) (type))) -#define ELF32_R_SYM(info) ((info) >> 8) -#define ELF32_R_TYPE(info) ((unsigned char) (info)) - - -/*============================================================================ - ElfXX_Dyn - dynamic array entry. -============================================================================*/ - -typedef struct { - Elf32_Sword d_tag; - union { - Elf32_Word d_val; /* unsigned word */ - Elf32_Addr d_ptr; /* address */ - } d_un; -} Elf32_Dyn; - -extern Elf32_Dyn _DYNAMIC32[]; - -typedef struct { - Elf64_Sxword d_tag; - union { - Elf64_Xword d_val; /* unsigned word */ - Elf64_Addr d_ptr; /* address */ - } d_un; -} Elf64_Dyn; - -extern Elf64_Dyn _DYNAMIC[]; - - -/*============================================================================ - The DT_* defines are the allowed values of d_tag in ElfXX_dyn. - These are the Dynamic Array types. -============================================================================*/ - -/* (i)gnore (m)andatory (o)ptional */ -/* d_un Exec DLL */ -/* ---- ---- --- */ -#define DT_NULL 0 /* ignored m m */ -#define DT_NEEDED 1 /* d_val o o */ -#define DT_PLTRELSZ 2 /* d_val o o */ -#define DT_PLTGOT 3 /* d_ptr o o */ -#define DT_HASH 4 /* d_ptr m m */ -#define DT_STRTAB 5 /* d_ptr m m */ -#define DT_SYMTAB 6 /* d_ptr m m */ -#define DT_RELA 7 /* d_ptr m o */ -#define DT_RELASZ 8 /* d_val m o */ -#define DT_RELAENT 9 /* d_val m o */ -#define DT_STRSZ 10 /* d_val m m */ -#define DT_SYMENT 11 /* d_val m m */ -#define DT_INIT 12 /* d_ptr o o */ -#define DT_FINI 13 /* d_ptr o o */ -#define DT_SONAME 14 /* d_val i o */ -#define DT_RPATH 15 /* d_val o i */ -#define DT_SYMBOLIC 16 /* ignored i o */ -#define DT_REL 17 /* d_ptr m o */ -#define DT_RELSZ 18 /* d_val m o */ -#define DT_RELENT 19 /* d_val m o */ -#define DT_PLTREL 20 /* d_val o o */ -#define DT_DEBUG 21 /* d_ptr o i */ -#define DT_TEXTREL 22 /* ignored o o */ -#define DT_JMPREL 23 /* d_ptr o o */ -#define DT_BIND_NOW 24 /* ignored */ -#define DT_INIT_ARRAY 25 /* d_ptr o o */ -#define DT_FINI_ARRAY 26 /* d_ptr o o */ -#define DT_INIT_ARRAYSZ 27 /* d_val o o */ -#define DT_FINI_ARRAYSZ 28 /* d_val o o */ - -#define DT_LOOS 0x60000000 /* unspecified - OS specific */ -#define DT_HIOS 0x6fffffff /* unspecified - OS specific */ - -#define DT_LOPROC 0x70000000 /* unspecified - processor specific */ -#define DT_HIPROC 0x7fffffff /* unspecified - processor specific */ - - -#ifndef _HP_NO_ELF_DEPRICATED - -/* These defines have been depricated and will be removed in a future release.*/ - -#define ELFOSABI_NONE 0 /* None specified */ -#define ELFOSABI_NT 2 /* NT operating system */ -#define ELFOSABI_SCOUNIX 3 /* SCO UNIX operating system */ -#define SHF_COMDAT 0x8 /* Is a member of a COMDAT group */ -#define SHT_COMDAT 12 /* COMDAT group directory -> SHT_HP_COMDAT */ - -#endif /* ifndef _HP_NO_ELF_DEPRICATED */ - -#ifdef __cplusplus -} -#endif /* ifndef _HP_NO_ELF_DEPRICATED */ - -#if defined(ELF_TARGET_ALL) || defined(ELF_TARGET_PARISC) -#include -#endif - -#endif /* ELF_INCLUDED */ diff --git a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/elftypes.h b/openair1/USERSPACE_TOOLS/OAI_FW_INIT/elftypes.h deleted file mode 100644 index 715435f9a1..0000000000 --- a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/elftypes.h +++ /dev/null @@ -1,80 +0,0 @@ -/******************************************************************************* - 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 . - - 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: elftypes.h - Include file for Elf types. Define elf types for Elf structures. - Copyright Hewlett-Packard Co. 1995. All rights reserved. -============================================================================*/ - -#ifndef ELFTYPES_INCLUDED -#define ELFTYPES_INCLUDED - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef __LP64__ -typedef unsigned int Elf32_Addr; /* Unsigned program address */ -typedef unsigned int Elf32_Off; /* Unsigned file offset */ -typedef int Elf32_Sword; /* Signed large integer */ -typedef unsigned int Elf32_Xword; /* Unsigned large integer */ -#else -typedef unsigned long Elf32_Addr; /* Unsigned program address */ -typedef unsigned long Elf32_Off; /* Unsigned file offset */ -typedef long Elf32_Sword; /* Signed large integer */ -typedef unsigned long Elf32_Xword; /* Unsigned large integer */ -#endif - -typedef unsigned int Elf32_Word; /* Unsigned large integer */ -typedef unsigned short Elf32_Half; /* Unsigned medium integer */ -typedef unsigned char Elf32_Char; /* Unsigned tiny integer */ -typedef unsigned char Elf32_Byte; /* Unsigned tiny integer */ - -#ifdef __LP64__ -typedef unsigned long Elf64_Addr; -typedef unsigned long Elf64_Off; -typedef unsigned long Elf64_Xword; -typedef long Elf64_Sxword; -#else -typedef unsigned long long Elf64_Addr; -typedef unsigned long long Elf64_Off; -typedef unsigned long long Elf64_Xword; -typedef long long Elf64_Sxword; -#endif - -typedef unsigned short Elf64_Half; -typedef int Elf64_Sword; -typedef unsigned int Elf64_Word; -typedef unsigned char Elf64_Byte; /* Unsigned tiny integer */ - -#ifdef __cplusplus -} -#endif - -#endif /* ELFTYPES_INCLUDED */ diff --git a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/main b/openair1/USERSPACE_TOOLS/OAI_FW_INIT/main deleted file mode 100755 index 974fb46a33b9410c8243c5c40090ecfc3f8924fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261437 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 z

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 z zBD4+!eK8naLUqf-mU`wbs(rHtV7N479>GJ@^P&7|UuEAIAHW~bMN5|!)*z1}7UPOF zMr^5zAR=L94j{Bh*vI$(>*IJePLmrN7#hL><>6?;x;ZdX7c-GqOXA4tA}irtEP%os zbEOltXM{B-QRsFb7#$6v8unTU0AjE0XN}I9rigo3|4>H#$3pa#y03RYH zB;j5vsR)gup+V|)h&h28h`yINIF=QGptBH<(FlVP6BbgU9TU3-4W`?Kx)}C^S`FPs zpCbMw1}{g_uw>#!Sm6j{y${%_XV#o&3p?8{2^@$-1fG}`TaB@xO%1@v0vQ`-ND`@8 zr0EkgW0Hvc7vc+>EV30dl6)D((0f@(vJgqDGS)XLF0ZmbxH1jgk;Pz?P}v&Nc-KhZ zSoL6KZ1*k;=Ny9G#t1$bf!GNl6CF`Gh$AP{Ta_rX65b>aTRg`+v#&@<&OGi$WzTN5 zH}OA&atncI_XOv#TcVqXa9R?>nn;1t%Pfymx0*8Tq9PqDafPu;hYLTrZY=WB+?@Pot$t=4TFdWT02k) zM|^OIAtk!hqZ9+J4#(|EV)=xaBVm8*+qYM@H(O8=(O%<;%+^d6V9;U?q8#F(uqb8A zm0?Ojmh>D=qkF2GLX{MHI~fLtqWbz?k%?L1>2YZ82{f%|!CS$TA^XYTsKj5wN24N~L>|J8GtZbFdI;>CdVM?d z#$&B;Z#-nFv9Y0q1;VmuoRxT|QEw?>OF1cp-G!;wut6*&iA%)MPd&aEX?hyZPVE(@ z)~0S?d|wTl-0d>KiSDQRZoDPiG0RRADvZu}8fp)#$}SeRlrtH}_8bhh8SQzK%eSa3 z&SzM@bFc|RtdB~>i79w#*(|u-i>YQ|?bwQE=~xd(vR2~yk|1w$5Z1eI&WFfXt%hsA z_$CWgrP0l@U8_RitNFq*CkKTvD{{sRt{gLiqiJ{7!Adx*%ZRu;g)qdRV|1!9Z5~x9 z$NW6N+3c(plYBrBbrxzIYANfh!u3h<@ zvFS*(U)BSwTi+LC3p2YN=OdH7uQpucwTWzfv<+t}4D>)%6fmZ9X@`X@rr|pX@kRiw z$}2ayuqDfY^8j7Z&2b#94eydAX9Fb?S>qAw5ti#yyQ&<^<4J~^s6E-NtZ8jjoVf^Y zvCkx&<%ouz7Rw=CX1cJsZf1dz2^?7)mCbA)uZKn@u%oWhT&*H*4E8tI2B&5hT_u+l zU5WHKz-22`MZFzr{Y#Q$JQFJcC-bq=8w0w-AUH9mb2H=(F$PemPZOaNO(|&KyFhc}C}+*-$XNf;Fd^ zzj;VrGFT|U#(2+jaft^EJxzp5qdBB`b`Tt?M6}jrm!ETE(CJEkb{)*muJL_|s8TLH zbur)@ZsQ>gu&e;YQ!ocb~ zo?TpS^(3AeZP-}Sn6Zhgj%ScCVdAjk>!-R{=DUY-TQ&EhoBLR{kmMEJEZLLSfu@hT z6)P_+#s-J0I22vxc6!NtwT2aBQESl1JTfkaT6U}oF9OFTAY}|%O!x6T$w6^IHro&w zJ#!w+jBdW!h9~C}U0~rhv9VA0U{2(-V-2$c>Z8OXWgd4^j1Mo8g$T?&S>Mx};(d`A zmn^_J)Ra$gjQ2VpQFJsot?B@wGUM$__OXXy%~6oxf!X-%4y?nR!?d#L(YI4ECcP;- zTqos?ki8JnAgYzuAFTYi9YkI$fj2eMp+#`49Nd%Lh4l!!cVNE+nH;D*IWW3^fV%>R zLfIwv@QOO@{K>H. - - 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 - - *******************************************************************************/ -/* - C Header file for updatefw tool. - - K. Khalfallah, Aug, 2007 - kkhalfallah@free.fr -*/ - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "elf.h" -#include "elftypes.h" -#define EM_SPARC 2 -#define MAX_SIZE_STRING_TABLE 1024 -#define MAX_SIZE_SECTION_NAME 32 - -#include "updatefw.h" - -/* Interface with OpenAirInterface driver */ -#define DEVICE_NAME "/dev/openair0" -#define ACCESS_MODE O_RDONLY - -#define SWITCH_IS_OFF 0 -#define SWITCH_IS_ON 1 -static unsigned int helpflag = SWITCH_IS_OFF; -static unsigned int pflag = SWITCH_IS_OFF; -static unsigned int fflag = SWITCH_IS_OFF; -static unsigned int sflag = SWITCH_IS_OFF; -static unsigned int rebootflag = SWITCH_IS_OFF; -static FILE* p_elfimage; -static Elf32_Ehdr elf_Ehdr; -static Elf32_Shdr elf_Shdr; -long Shdr_pos, StringSec_pos, StringSec_size; -//char section_name[MAX_SIZE_SECTION_NAME]; -char SecNameStnTable[MAX_SIZE_STRING_TABLE]; -unsigned int ioctl_params[4]; - -#define LONGOPTIONS_NB 5 -struct option updatefw_longopts[LONGOPTIONS_NB+1] = { - { .name = "help", .has_arg = no_argument, .flag = &helpflag, .val = SWITCH_IS_ON }, - { .name = "firmware", .has_arg = required_argument, .flag = NULL, .val = 'f' }, - { .name = "pretend", .has_arg = no_argument, .flag = &pflag, .val = SWITCH_IS_ON }, - { .name = "stackptr", .has_arg = required_argument, .flag = NULL, .val = 's' }, - { .name = "forcereboot", .has_arg = no_argument, .flag = &rebootflag, .val = SWITCH_IS_ON }, - {0, 0, 0, 0} -}; -#define TRUE 1 -#define FALSE 0 - -void show_usage(char* pgname) -{ - unsigned int i; - fprintf(stderr, " %s : Tool to update firmware of Cardbus-MIMO-1/Leon3 card through the PCI interface,\n", pgname); - fprintf(stderr, " "); - - for (i=0; ie_type); /* $$$$KMK: bad code !!! Endianess dependant ! */ - invert2(p_Elf32_hdr->e_machine); - invert4(p_Elf32_hdr->e_version); - invert4(p_Elf32_hdr->e_entry); - invert4(p_Elf32_hdr->e_phoff); - invert4(p_Elf32_hdr->e_shoff); - invert4(p_Elf32_hdr->e_flags); - invert2(p_Elf32_hdr->e_ehsize); - invert2(p_Elf32_hdr->e_phentsize); - invert2(p_Elf32_hdr->e_phnum); - invert2(p_Elf32_hdr->e_shentsize); - invert2(p_Elf32_hdr->e_shnum); - invert2(p_Elf32_hdr->e_shstrndx); - return (p_Elf32_hdr->e_type == ET_EXEC) - && (p_Elf32_hdr->e_machine == EM_SPARC) - && (p_Elf32_hdr->e_version == EV_CURRENT) - && (p_Elf32_hdr->e_ident[EI_CLASS] == ELFCLASS32) - && (p_Elf32_hdr->e_ident[EI_DATA] == ELFDATA2MSB) - && (p_Elf32_hdr->e_ident[EI_VERSION] == EV_CURRENT); -} - -int get_elf_section_header(Elf32_Shdr* p_Elf32_Shdr, FILE* p_file, unsigned int section_ndx) -{ - int nbread; - /* retrieve the position of the section header table */ - fseek(p_file, Shdr_pos + (section_ndx * elf_Ehdr.e_shentsize), 0); - /* set file pointer to the position of the section header section_ndx */ - // seekrst = fseek(p_file, (long), 0); - nbread = fread(p_Elf32_Shdr, sizeof(elf_Shdr), 1, p_file); - - if (nbread != 1) { - fprintf(stderr, "Error : while reading elf section header (fread() returned %d)\n", nbread); - exit(-1); - } - - invert4(p_Elf32_Shdr->sh_name); /* $$$$KMK: bad code !!! Endianess dependant ! */ - invert4(p_Elf32_Shdr->sh_type); - invert4(p_Elf32_Shdr->sh_flags); - invert4(p_Elf32_Shdr->sh_addr); - invert4(p_Elf32_Shdr->sh_offset); - invert4(p_Elf32_Shdr->sh_size); - invert4(p_Elf32_Shdr->sh_link); - invert4(p_Elf32_Shdr->sh_info); - invert4(p_Elf32_Shdr->sh_addralign); - invert4(p_Elf32_Shdr->sh_entsize); - //fseek(p_file, StringSec_pos + p_Elf32_Shdr->sh_name, 0); - //fread(); - //strcpy(sname, ); - return nbread; -} - -void find_and_transfer_section(char* section_name, unsigned int verboselevel) -{ - /* Interface with driver */ - int ioctlretval; - int ifile; - char* section_content; - int nbread; - unsigned int secnb = 0; - - for (secnb = 0 ; secnb < elf_Ehdr.e_shnum; secnb++) { - get_elf_section_header(&elf_Shdr, p_elfimage, secnb); - - if (!strcmp(SecNameStnTable + elf_Shdr.sh_name, section_name)) { - if (verboselevel >= VERBOSE_LEVEL_SECTION_DETAILS) - printf("Info: ok, found section %s (as section nb. %d)\n", SecNameStnTable + elf_Shdr.sh_name, secnb); - - /* Check that section size is a multiple of 4 bytes. */ - if (elf_Shdr.sh_size % 4) { - fprintf(stderr, "Error: section %s has a non-multiple-of-4-bytes size (%d).\n", - SecNameStnTable + elf_Shdr.sh_name, elf_Shdr.sh_size); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_SECTION_DETAILS) { - printf("Info: ok, section %s has size %d bytes (multiple of 4 bytes).\n", - SecNameStnTable + elf_Shdr.sh_name, elf_Shdr.sh_size); - } - - /* Dynamically allocate a chunk of memory to store the section into. */ - section_content = (char*)malloc(elf_Shdr.sh_size); - - if (!section_content) { - fprintf(stderr, "Error: could not dynamically allocate %d bytes for section %s.\n", - elf_Shdr.sh_size, SecNameStnTable + elf_Shdr.sh_name); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, dynamically allocated a %d bytes buffer for section %s.\n", - elf_Shdr.sh_size, SecNameStnTable + elf_Shdr.sh_name); - } - - /* Position the file cursor at the begining of proper section. */ - fseek(p_elfimage, (long)(elf_Shdr.sh_offset), 0); - /* Copy the section's content into this temporary buffer. */ - nbread = fread(section_content, elf_Shdr.sh_size, 1, p_elfimage); - - if (nbread != 1) { - fprintf(stderr, "Error: could not read %d bytes from ELF file into dynamic buffer.\n", elf_Shdr.sh_size); - free(section_content); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, copied content of section %s into dynamic buffer (%d bytes copied).\n", - SecNameStnTable + elf_Shdr.sh_name, elf_Shdr.sh_size); - } - - /* Open the special device file. */ - if (!pflag) { - ifile = open(DEVICE_NAME, ACCESS_MODE, 0); - - if (ifile<0) { - fprintf(stderr, "Error: could not open %s (open() returned %d, errno=%u)\n", DEVICE_NAME, ifile, errno); - free(section_content); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successfully opened %s.\n", DEVICE_NAME); - } - - /* Collect control data for ioctl. */ - ioctl_params[0] = UPDATE_FIRMWARE_TRANSFER_BLOCK; - ioctl_params[1] = elf_Shdr.sh_addr; - ioctl_params[2] = elf_Shdr.sh_size / 4; - ioctl_params[3] = (unsigned int)((unsigned int*)section_content); - //invert4(ioctl_params[1]); - //invert4(ioctl_params[2]); - /* Call ioctl driver */ - ioctlretval = ioctl(ifile, openair_UPDATE_FIRMWARE, ioctl_params); - - if (ioctlretval) { - fprintf(stderr, "Error: ioctl on %s failed.\n", DEVICE_NAME); - close(ifile); - free(section_content); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successful ioctl on %s for section %s.\n", - DEVICE_NAME, SecNameStnTable + elf_Shdr.sh_name); - } - - close(ifile); - } /* pflag */ - - free(section_content); - } /* section_name */ - } /* for secnb */ -} - -void find_and_clear_section_bss(unsigned int verboselevel) -{ - /* Interface with driver */ - int ioctlretval; - int ifile; - unsigned int secnb = 0; - - for (secnb = 0 ; secnb < elf_Ehdr.e_shnum; secnb++) { - get_elf_section_header(&elf_Shdr, p_elfimage, secnb); - - if (!strcmp(SecNameStnTable + elf_Shdr.sh_name, ".bss")) { - if (verboselevel >= VERBOSE_LEVEL_SECTION_DETAILS) - printf("Info: ok, found section %s (as section nb. %d)\n", SecNameStnTable + elf_Shdr.sh_name, secnb); - - /* Open the special device file. */ - if (!pflag) { - ifile = open(DEVICE_NAME, ACCESS_MODE, 0); - - if (ifile<0) { - fprintf(stderr, "Error: could not open %s (open() returned %d, errno=%u)\n", DEVICE_NAME, ifile, errno); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successfully opened %s.\n", DEVICE_NAME); - } - - /* Collect control data for ioctl. */ - ioctl_params[0] = UPDATE_FIRMWARE_CLEAR_BSS; - ioctl_params[1] = elf_Shdr.sh_addr; - ioctl_params[2] = elf_Shdr.sh_size; - //invert4(ioctl_params[1]); - //invert4(ioctl_params[2]); - /* Call ioctl driver */ - ioctlretval = ioctl(ifile, openair_UPDATE_FIRMWARE, ioctl_params); - - if (ioctlretval) { - fprintf(stderr, "Error: ioctl on %s failed.\n", DEVICE_NAME); - close(ifile); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successful ioctl on %s for section %s.\n", - DEVICE_NAME, SecNameStnTable + elf_Shdr.sh_name); - } - - close(ifile); - } /* pflag */ - } /* section_name */ - } /* for secnb */ -} - -int main(int argc, char** argv) -{ - /* Interface with driver */ - int ioctlretval; - int ifile; - /* Interface with getopt_long() libC function */ - int getoptret; - int indexptr; - int erroroption = FALSE; - char* p_str_fwn = NULL; - char* p_str_stkptr = NULL; - char* filename; - unsigned int verboselevel = 0; - unsigned int i; - char* c; - unsigned int stackpointer = 0; - unsigned int ioctl_test_gok = 0; - - /***************** - * Parse options * - *****************/ - while ((getoptret = getopt_long_only (argc, argv, "f:vhps:b", updatefw_longopts, &indexptr)) != -1) - switch (getoptret) { - /* Without-argument options */ - case 0: /* means that the option just sets a flag. Nothing has to be done, - since getopt_long already sets the flag. */ - break; - - /* With-argument options & equivalent short options */ - case 'v': - verboselevel++; - break; - - case 'h': /* short switch -h was used */ - helpflag = SWITCH_IS_ON; - break; - - case 'p': /* short switch -p was used */ - pflag = SWITCH_IS_ON; - break; - - case 'f': /* short switch -f was used */ - fflag = SWITCH_IS_ON; - p_str_fwn = optarg; - break; - - case 's': /* short switch -s was used */ - sflag = SWITCH_IS_ON; - p_str_stkptr = optarg; - break; - - case 'b': /* short switch -b was used */ - rebootflag = SWITCH_IS_ON; - break; - - default: - erroroption = TRUE; - break; - }; - - /* End of while */ - - /******************************** - * Check consistency of options * - ********************************/ - /* First, any irregularity in the use of the options ? Leave. */ - if (erroroption == TRUE) { - fprintf(stderr, "%s: Misuse (--help to show usage)\n", argv[0]); - exit(-1); - } - - /* Let print the help if it has been explicitly asked for */ - if (helpflag == SWITCH_IS_ON) { - show_usage(argv[0]); - exit(0); - } - - /* Check that mandatory firmware option was specified */ - if (fflag != SWITCH_IS_ON) { - fprintf(stderr, "%s: missing mandatory [-f|--firmware] option (--help to show usage).\n", argv[0]); - exit(-1); - } - - /* Check that mandatory stack pointer option was specified */ - if (sflag != SWITCH_IS_ON) { - fprintf(stderr, "%s: missing mandatory [-s|--stackptr] option (--help to show usage).\n", argv[0]); - exit(-1); - } - - /* Check consistency of stack pointer value. */ - /* 1/2 - The address must start with the 2 characters '0x' and be exactly 10 characters long. */ - if ((strncmp(p_str_stkptr, "0x", 2)) || (strlen(p_str_stkptr) != 10)) { /* 10 is for 0x + 8 hex digits. */ - fprintf(stderr, "%s: Invalid value to [s|--stackptr] option (--help to show usage).\n", argv[0]); - exit(-1); - } - - /* 2/2 - The address must only be made of hexadecimal digits. */ - for (i=0,c=p_str_stkptr+2; i < 8 ; i++,c++) { - if (! - ( ((*c >= '0') && (*c <= '9')) - || ((*c >= 'a') && (*c <= 'f')) - || ((*c >= 'A') && (*c <= 'F')) - ) - ) { - fprintf(stderr, "%s: Invalid value to [s|--stackptr] option (--help to show usage).\n", argv[0]); - exit(-1); - } - - /* Transcode string hexadecinmal value into binary value */ - if ((*c <= '9') && (*c >= '0')) - stackpointer |= (*c - '0') << 28-(i*4); - else if ((*c <= 'F') && (*c >= 'A')) - stackpointer |= ((*c - 'A') + 10) << 28-(i*4); - else if ((*c <= 'f') && (*c >= 'a')) - stackpointer |= ((*c - 'a') + 10) << 28-(i*4); - } - - /* Open firmware file in READ_ONLY mode. */ - filename = p_str_fwn; - p_elfimage = fopen(filename, READ_FILE_MODE); - - if (p_elfimage == NULL) { - fprintf(stderr, "Error : could not open file <%s> in %s mode.\n", filename, READ_FILE_MODE); - exit(-1); - } - - if (verboselevel >= VERBOSE_LEVEL_ACCESS_FILES) - printf("Info: using file <%s> (successfully opened in %s mode).\n", filename, READ_FILE_MODE); - - /* Read elf binary image file */ - /* Get informations from header file */ - if (!(get_elf_header(&elf_Ehdr, p_elfimage))) { - fprintf(stderr, "Error : file doesn't match expected format.\n"); - exit(-1); - } - - if (verboselevel >= VERBOSE_LEVEL_ACCESS_FILES) - printf("Info: ok, file matches expected format.\n"); - - /* record the position of the section header table in the file */ - fseek(p_elfimage, (long)(elf_Ehdr.e_shoff), 0); - Shdr_pos = ftell(p_elfimage); - /* record the position of the section name string table */ - get_elf_section_header(&elf_Shdr, p_elfimage, elf_Ehdr.e_shstrndx); - fseek(p_elfimage, (long)(elf_Shdr.sh_offset), 0); - StringSec_pos = ftell(p_elfimage); - StringSec_size = elf_Shdr.sh_size; - - /* copy the string table into global variable */ - if (StringSec_size > MAX_SIZE_STRING_TABLE) { - fprintf(stderr, "Error: section name string table too big (%d > %d);" - " increase max. allowed value in source code and recompile\n", - StringSec_size, MAX_SIZE_STRING_TABLE); - exit(-1); - } - - fread(SecNameStnTable, 1, StringSec_size, p_elfimage); - - /* Action 1: force reboot (if option was specified) */ - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) { - if (rebootflag == SWITCH_IS_ON) - printf("Info: entering action #1 (forcing reboot of Leon).\n"); - else - printf("Info: squeezed action #1 (forcing reboot of Leon).\n"); - } - - if ((rebootflag == SWITCH_IS_ON) && (!pflag)) { - ifile = open(DEVICE_NAME, ACCESS_MODE, 0); - - if (ifile<0) { - fprintf(stderr, "Error: could not open %s (open() returned %d, errno=%u).\n", DEVICE_NAME, ifile, errno); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successfully opened %s.\n", DEVICE_NAME); - } - - ioctl_params[0] = UPDATE_FIRMWARE_FORCE_REBOOT; - /* Call ioctl driver */ - ioctlretval = ioctl(ifile, openair_UPDATE_FIRMWARE, ioctl_params); - - if (ioctlretval) { - fprintf(stderr, "Error: ioctl on %s failed.\n", DEVICE_NAME); - close(ifile); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successful ioctl on %s to force reboot.\n", DEVICE_NAME); - } - - /* If the card received the boot order, then - 1) The firmware who handled the order must have cleared the BOOT_GOK bit - before rebooting ; - 2) Boot-strap should once again set it back upon its init operations. - So we wait for this bit to be set again before issuing the rest of the - update-firmware operations (transfer loadable sections and so on...). - Note: putting the polling loop here is better than to have it in the - openair driver, because it avoids hanging the kernel if the card was - ever not to reboot cleanly. If the loop was to not end, user can simply - gives up the update-firmware operation by issuing a Ctrl-C. */ - ioctl_params[0] = UPDATE_FIRMWARE_TEST_GOK; - - /* Call ioctl driver */ - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) - printf("Info: waiting for GOK bit (as acknowledge of reboot command) - May take a few seconds...\n"); - - ioctl_test_gok = 0; - - do { - ioctlretval = ioctl(ifile, openair_UPDATE_FIRMWARE, ioctl_params); - ioctl_test_gok++; - sleep(1); /* sleep 1 second */ - - if (!(ioctl_test_gok % 10)) - printf("Warning: card does not seem to have rebooted cleanly (no GOK bit). Still trying ([Ctrl-C] to abort).\n"); - } while (ioctlretval); - - if (verboselevel >= VERBOSE_LEVEL_IOCTL) - printf("Info: ok, card set again GOK bit (after %u seconds).\n", ioctl_test_gok); - - close(ifile); - } /* rebootflag && pflag */ - - if ((verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) && (rebootflag == SWITCH_IS_ON)) - printf("Info: action #1 done.\n"); - - /* Action 2: Find the .text section */ - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: entering action #2 (Transfer .text section).\n"); - - find_and_transfer_section(".text", verboselevel); - sleep(1); - - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: action #2 done.\n"); - - /* Action 3 : Find the .data section */ - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: entering action #3 (Transfer .data section).\n"); - - find_and_transfer_section(".data", verboselevel); - sleep(1); - - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: action #3 done.\n"); - - /* Action 4 : Find the .bss section */ - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: entering action #4 (Clear .bss section).\n"); - - find_and_clear_section_bss(verboselevel); - sleep(1); - - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: action #4 done.\n"); - - /* Action 5 : Find the entry address */ - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: entering action #5 (Jump to firmware/set stack-pointer).\n"); - - if (verboselevel >= VERBOSE_LEVEL_SECTION_DETAILS) - printf("Info: Firmware entry point = 0x%08x, setting stack pointer = 0x%08x.\n", elf_Ehdr.e_entry, stackpointer); - - /* Open the special device file. */ - if (!pflag) { - ifile = open(DEVICE_NAME, ACCESS_MODE, 0); - - if (ifile<0) { - fprintf(stderr, "Error: could not open %s (open() returned %d, errno=%u).\n", DEVICE_NAME, ifile, errno); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successfully opened %s.\n", DEVICE_NAME); - } - - /* Collect control data for ioctl. */ - ioctl_params[0] = UPDATE_FIRMWARE_START_EXECUTION; - ioctl_params[1] = elf_Ehdr.e_entry; - ioctl_params[2] = stackpointer; - //invert4(ioctl_params[1]); - //invert4(ioctl_params[2]); - /* Call ioctl driver */ - ioctlretval = ioctl(ifile, openair_UPDATE_FIRMWARE, ioctl_params); - - if (ioctlretval) { - fprintf(stderr, "Error: ioctl on %s failed.\n", DEVICE_NAME); - close(ifile); - fclose(p_elfimage); - exit(-1); - } else if (verboselevel >= VERBOSE_LEVEL_IOCTL) { - printf("Info: ok, successful ioctl on %s for stack-pointer setting/firmware-execution.\n", DEVICE_NAME); - } - - close(ifile); - } /* pflag */ - - if (verboselevel >= VERBOSE_LEVEL_MAIN_STEPS) printf("Info: action #5 done.\n"); - - fclose(p_elfimage); - - /* Did we pretend ? */ - if (pflag) printf("Nothing done.\n"); - - exit(0); -} diff --git a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/updatefw.h b/openair1/USERSPACE_TOOLS/OAI_FW_INIT/updatefw.h deleted file mode 100644 index 6d487780ff..0000000000 --- a/openair1/USERSPACE_TOOLS/OAI_FW_INIT/updatefw.h +++ /dev/null @@ -1,72 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* - C Header file for updatefw tool. - - K. Khalfallah, Aug, 2007 - kkhalfallah@free.fr -*/ - -#ifndef UPDATEFW_H -#define UPDATEFW_H - -#include -#include -#define _testsyscall(x, y, z) {if (x==-1) { \ - fprintf(stderr, "Error : %s() returned "z" (errno=%d)\n", y, x, errno); \ - fprintf(stderr, "Warning : not leaving normally. Remove ipc ressources by hand !"); \ - fprintf(stderr, " (use shell commands ipcs & ipcrm)\n"); \ - exit(-1); \ - }} -// else { \ -// printf("Info : successfully called %s, returned "z"\n", y, x);}} - -/* Intel is little-endian, sparc is big */ -unsigned long ltmp; -#define invert4(x) {ltmp=x; x=((ltmp & 0xff)<<24) | ((ltmp & 0xff00)<<8) | \ - ((ltmp & 0xff0000)>>8) | ((ltmp & 0xff000000)>>24); } -unsigned short stmp; -#define invert2(x) {stmp=x; x=((stmp & 0xff)<< 8) | ((stmp & 0xff00)>>8);} - - -/* static variables, global */ -char* virt_addr; -unsigned int packet_ndx = 0; - -#define FSEEK_ORIGIN 0 -#define FSEEK_CURRENT 1 -#define READ_FILE_MODE "r" -/* Verbose levels */ -#define VERBOSE_LEVEL_MAIN_STEPS 1 -#define VERBOSE_LEVEL_ACCESS_FILES 2 -#define VERBOSE_LEVEL_SECTION_DETAILS 3 -#define VERBOSE_LEVEL_IOCTL 4 - - -#endif /* UPDATEFW_H */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/IQ_estimation.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/IQ_estimation.m deleted file mode 100755 index 47aa52067d..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/IQ_estimation.m +++ /dev/null @@ -1,100 +0,0 @@ -function [ratio,phi_est]=IQ_estimation(freq) -gpib_card=0; % first GPIB PCI card in the computer -sme=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu (for SME) -gpib_send(gpib_card,sme,'*RST;*CLS'); % reset and configure the signal generator -sleep(.1); -gpib_send(gpib_card,sme,'POW -63dBm'); -disp(freq) -gpib_send(gpib_card,sme,strcat('FREQ ',int2str(freq),'MHz')); -gpib_send(gpib_card,sme,'OUTP:STAT ON'); % activate output - -cmd1='/homes/nussbaum/openair1/ARCH/LEON3/hostpc/user/tools/scripts/set_receiver -M '; -gain1=61; -gain2=61; -frequency=int2str(freq); -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -system(cmd); -sleep(.1); -s=oarf_get_frame(0); -signal=s(:,1); - - -size_data=20480; -Fs=7680; %in kHz -band = 2000; %in kHz -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; - -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -if(abs(freq_max-2000)>100) -disp('Warning') -end; - -cumI=0; -cumQ=0; - -I=real(signal(1:2000)); -Q=imag(signal(1:2000)); - -for i=1:2000 - cumI=cumI + I(i)*I(i); - cumQ=cumQ + Q(i)*Q(i); -end; -amp= sqrt(2*cumI/length(I)) -I=I/amp; -Q=Q/amp; -ratio=sqrt(cumI/cumQ) -n_fft=1024; -f=abs(fft(I(1:n_fft))); -max = 0; -index=0; -for i=1:n_fft/2 - if f(i)> max - max=f(i); - index=i; - end; -end; -disp(max) -disp(index) -%figure -%plot(20*log10(abs(f))); -freq_estim=(index-1)/n_fft; -p=Q*ratio.*I; -sinphi=2*sum(p)/length(Q); -phi_est=-asin(sinphi) -Qcor=(sin(phi_est)*I+ratio*Q)/cos(phi_est); -%figure -%plot(I(1:100)) -%hold on -%plot(Qcor(1:100),'g'); -comp=I+j*Qcor; -%hold off -%figure -%plot(20*log10(abs(fft(comp)))); -endfunction; -% per=round(1/freq_estim) -% figure;plot(I(1:per+1)) -% opt_offset=-5 -% min_diff=10^20; -% for offset=0:per -% diff=0; -% for k=1:n_fft -% diff=diff+abs(I(k+offset)-Q(k)); -% end; -% if diffSystem->GPIB->Address menu (for SME) - -openair_init; -freq=2000; % normally loop - -% first, calculation of IQ missmatch -[ratio,phase]=IQ_estimation(freq); - - -gpib_send(gpib_card,sme,'*RST;*CLS'); % reset and configure the signal generator - -gpib_send(gpib_card,sme,'POW -100dBm'); -%disp('FREQ ',int2str(freq),'MHz'); -gpib_send(gpib_card,sme,strcat('FREQ ',int2str(freq),'MHz')); -%disp('FREQ ',int2str(freq),'MHz'); -%frequency = input('Input freq in MHz: ', 's'); - -cmd1='/homes/nussbaum/open_freya/arch/openair_CardBus_MIMO1/LEON3/hostpc/user/tools/scripts/set_receiver -M '; -frequency=int2str(freq); - - -ALL_gain1=0:16:3; -ALL_gain2=0:16:3; - -i=0; -for gain1=ALL_gain1 -for gain2= ALL_gain2 - -i=i+1; -end; -end; -table=zeros(i,4); -i=1; -for gain1=ALL_gain1 -for gain2=ALL_gain2 -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -system(cmd); -%system('set_receiver -M ' frequency ' -g1 ' int2str(gain1) ' -g2 ' int2str(gain2)); -%system('sleep 1'); -gpib_send(gpib_card,sme,'OUTP:STAT ON'); % activate output -sleep(.1); -table(i,1)=gain1; -table(i,2)=gain2; - -s=oarf_get_frame(0); -plot(20*log10(abs(fft(s(:,1))))) -signal=s(:,1); - -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; - -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -if(abs(freq_max-2000)>100) -disp("Warning") -end; - - -% calculation of the signal power -Pu=sum(f(max_pos-20:max_pos+20)) -ns_noise =round((band/Fs)*(size_data/2)) -Pnoise=sum(f(max_pos-ns_noise:max_pos+ns_noise))-Pu -plot(10*log10(f)) - -% plot(10*log10(f(max_pos-ns_noise:max_pos+ns_noise))) - -SNR=10*log10(Pu/Pnoise) -N_in = -174 +10*log10(1000*band) -S_in = -100; -SNR_in=S_in - N_in - -NF=SNR_in-SNR - - - -i=i+1; -end; -end; -disp(table); - -P_num =100; %(warning, to be updated) - - - -% Post processing of the table started here -Pmin = -40; % in dBm -Pmax = 20; % in dBm - - - -% a Tx calibration file is calculated for a given board and frequency - -%fid=fopen(['/tmp/cal_TX' frequency '_' int2str(n) '.dat'],'wb') -%fwrite(fid,signal); -%fclose(fid); diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration.m deleted file mode 100755 index 8e5240db98..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration.m +++ /dev/null @@ -1,91 +0,0 @@ - -% Maxime Guillaud - created Wed May 10 18:08:04 CEST 2006 - -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu -freqband=2; % frequency band used by the openair card - -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) - - -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,gpib_device,'POW -70dBm'); -gpib_send(gpib_card,gpib_device,'FREQ 1.91452GHz'); - - - -oarf_config(freqband,'openair_config.cfg','openair_scenario.scn') - -saturation_threshold =5; % min number of samples (real+imaginary) equal to the max per frame to declare saturation - -ALL_power_dBm = [-100:1:-60 -150]; -ALL_rxrfmode = 0:2; -ALL_gain2391 = 0:5:120; % this is some strange scale -ALL_gain9862 = 0:1:18; % this in in dB - - -m=[]; - - -%for power_dBm=ALL_power_dBm - power_dBm=-70 - gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); -sleep(1) - - - for gain9862=ALL_gain9862 - - for gain2391= ALL_gain2391 - - - gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - - oarf_set_rx_gain(gain2391,gain9862,gain2391,gain9862); - - nacq=0; % count the number of tries to get data - do - - s=oarf_get_frame(freqband); %oarf_get_frame - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - for gain9862=ALL_gain9862 - - for gain2391= ALL_gain2391 - SpN0 = mean(abs(s(:,1)).^2) - abs(mean(s(:,1))).^2; - SpN1 = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; - - - gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - - oarf_set_rx_gain(gain2391,gain9862,gain2391,gain9862); - - nacq=0; % count the number of tries to get data - do - sleep(.1); - s=oarf_get_frame(freqband); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - N0 = mean(abs(s(:,1)).^2) - abs(mean(s(:,1))).^2; - N1 = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; - -<<<<<<< rx_calibration.m - S0 = 10*log10(SpN0-N0); - S1 = 10*log10(SpN1-N1); - G0 = S0 - power_dBm; - G1 = S1 - power_dBm; - NF0 = N0 - G0 + 108; - NF1 = N1 - G1 + 108; - - fprintf(' %d %d : Signal strength (%d,%d), Gain (%d %d), NF (%d %d)\n', - gain2391,gain9862, S0,S1,G0,G1,NF0,NF1); - - end - end - -gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration_quick.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration_quick.m deleted file mode 100755 index 14bcd545a5..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_calibration_quick.m +++ /dev/null @@ -1,155 +0,0 @@ - -% Maxime Guillaud - created Wed May 10 18:08:04 CEST 2006 -% Raymond & Florian - last modified Fri Oct 26 17:12:10 CEST 2007 - - -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu -freqband=2; % frequency band used by the openair card - -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) - - -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,gpib_device,'POW -70dBm'); -gpib_send(gpib_card,gpib_device,'FREQ 1.91860GHz'); - -oarf_config(freqband,'openair_config.cfg','openair_scenario.scn') - -saturation_threshold =5; % min number of samples (real+imaginary) equal to the max per frame to declare saturation - -ALL_power_dBm = [-90]; -ALL_rxrfmode = 0:2; -ALL_gain2391 = 0:5:180; % this is some strange scale -ALL_gain9862 = 0; %:1:18; % this in in dB - -%fprintf(fid, 'Tx Power (dBm), gain2391, gain9862, Signal strength Rx0, Signal Strength Rx1, Gain Rx0, Gain Rx1, Noise Rx0, Noise Rx1, SNR Rx0, SNR Rx1, NF Rx0, NF Rx1\n'); - -SpN0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SpN1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -N0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -N1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -S0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -S1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -G0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -G1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -NF0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -NF1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SNR0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SNR1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); - -min_agc_level = 96; %ceil(min(max(G0,[],1))); -max_agc_level = 150; %floor(max(max(G0,[],1))); - -oarf_set_calibrated_rx_gain(0); - -idx_power = 1; -for power_dBm=ALL_power_dBm -%power_dBm=-70 -%while (min(max(max(G0)),max(max(G1))) <= max_agc_level) - gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); - sleep(.5) - - - for gain9862=ALL_gain9862 - - idx_gain2391 = 1; - for gain2391= ALL_gain2391 - - - gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - - oarf_set_rx_gain(gain2391,gain2391,gain9862,gain9862); - - nacq=0; % count the number of tries to get data - sleep(.1); - do - - s=oarf_get_frame(freqband); %oarf_get_frame - s2 = s(1:8192,:); - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - - - SpN0(idx_power,idx_gain2391) = mean(abs(s2(:,1)).^2) - abs(mean(s2(:,1))).^2; - SpN1(idx_power,idx_gain2391) = mean(abs(s2(:,2)).^2) - abs(mean(s2(:,2))).^2; - - - gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - - figure(1); - hold off - plot(20*log10(abs(fft(s2(:,1))))) - - sleep(.1); - nacq=0; % count the number of tries to get data - do - - s=oarf_get_frame(freqband); %oarf_get_frame - s2 = s(1:8192,:); - - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - N0(idx_power,idx_gain2391) = mean(abs(s2(:,1)).^2) - abs(mean(s2(:,1))).^2; - N1(idx_power,idx_gain2391) = mean(abs(s2(:,2)).^2) - abs(mean(s2(:,2))).^2; - - S0(idx_power,idx_gain2391) = 10*log10(SpN0(idx_power,idx_gain2391)-N0(idx_power,idx_gain2391)); - S1(idx_power,idx_gain2391) = 10*log10(SpN1(idx_power,idx_gain2391)-N1(idx_power,idx_gain2391)); - G0(idx_power,idx_gain2391) = S0(idx_power,idx_gain2391) - power_dBm; - G1(idx_power,idx_gain2391) = S1(idx_power,idx_gain2391) - power_dBm; - NF0(idx_power,idx_gain2391) = 10*log10(N0(idx_power,idx_gain2391)) - G0(idx_power,idx_gain2391) + 108; % 108 is the thermal noise - NF1(idx_power,idx_gain2391) = 10*log10(N1(idx_power,idx_gain2391)) - G1(idx_power,idx_gain2391) + 108; - SNR0(idx_power,idx_gain2391) = S0(idx_power,idx_gain2391)-10*log10(N0(idx_power,idx_gain2391)); - SNR1(idx_power,idx_gain2391) = S1(idx_power,idx_gain2391)-10*log10(N1(idx_power,idx_gain2391)); - printf(' %d %d : Signal strength (%f,%f), Gain (%f %f), N (%f %f) SNR (%f %f) NF (%f %f)\n', - gain2391,gain9862, S0(idx_power,idx_gain2391),S1(idx_power,idx_gain2391),G0(idx_power,idx_gain2391),G1(idx_power,idx_gain2391),10*log10(N0(idx_power,idx_gain2391)),10*log10(N1(idx_power,idx_gain2391)),SNR0(idx_power,idx_gain2391),SNR1(idx_power,idx_gain2391),NF0(idx_power,idx_gain2391),NF1(idx_power,idx_gain2391)); - fflush(stdout); - %fprintf(fid,'%d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n', - % power_dBm,gain2391,gain9862, S0,S1,G0,G1,10*log10(N0),10*log10(N1),SNR0,SNR1,NF0,NF1); - - figure(2); - hold off - plot(20*log10(abs(fft(s2(:,1))))) - - sleep(.1); - - idx_gain2391 = idx_gain2391 + 1; - -figure(3) -hold off -plot(ALL_gain2391,G0,'r') -hold on -plot(ALL_gain2391,G1,'b') -legend('Rx0','Rx1'); -title('Gains') - -figure(4) -hold off -plot(ALL_gain2391,NF0,'r') -hold on -plot(ALL_gain2391,NF1,'b') -legend('Rx0','Rx1'); -title('Noise Figure') - - end - end - %power_dBm = power_dBm + 20; - idx_power = idx_power + 1; -end - -gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - -%l0 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G0; -%l1 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G1; - -gain_levels = zeros(max_agc_level-min_agc_level+1,2); - -gain_levels(:,1) = round(interp1(max(G0,[],1),ALL_gain2391,min_agc_level:max_agc_level,'linear')).'; -gain_levels(:,2) = round(interp1(max(G1,[],1),ALL_gain2391,min_agc_level:max_agc_level,'linear')).'; - -%gain_levels(isnan(gain_levels)) = 0; - -write_table \ No newline at end of file diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_open_correct.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_open_correct.m deleted file mode 100755 index ab4070e807..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_open_correct.m +++ /dev/null @@ -1,51 +0,0 @@ -function out=rx_post(nom,ratio,phase) - -%load data.dat signal -%fid=fopen('/tmp/store1.dat',) -fid=fopen(nom,'rb') -signal=fread(fid,20480*2,'float'); -disp(signal(1:10)); -signal=signal(1:2:length(signal))+j*signal(2:2:length(signal)); - -size_data=20480; -Fs=7680; %in kHz -band = 2000; %in kHz -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; - -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -if(abs(freq_max-2000)>100) -disp('Warning') -end; - - -% calculation of the signal power -Pu=sum(f(max_pos-20:max_pos+20)) -ns_noise =round((band/Fs)*(size_data/2)) -Pnoise=sum(f(max_pos-ns_noise:max_pos+ns_noise))-Pu -plot(10*log10(f)) - -I=real(signal); -Q=imag(signal); -Qcor=(sin(phase)*I+ratio*Q)/cos(phase); -comp=I+j*Qcor; -hold on -plot(20*log10(abs(fft(comp))),'g') - -comp=comp(1:10000).*exp(-j*(pi/2+0.1)*(1:10000))'; -figure -plot(real(comp(1:500))); -hold on -plot(imag(comp(1:500)),'g'); -figure -plot(20*log10(abs(fft(comp))),'g') - -%end; \ No newline at end of file diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post.m deleted file mode 100755 index e98a552242..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post.m +++ /dev/null @@ -1,43 +0,0 @@ -function out=rx_post(nom) - -%load data.dat signal -%fid=fopen('/tmp/store1.dat',) -fid=fopen(nom,'rb') -signal=fread(fid,20480*2,'float'); -signal=signal(1:2:length(signal))+j*signal(2:2:length(signal)); -disp(signal(1:10)); -size_data=20480/2; -Fs=7680; %in kHz -band = 2000; %in kHz -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; - -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -if(abs(freq_max-2000)>100) -disp("Warning") -end; - - -% calculation of the signal power -Pu=sum(f(max_pos-20:max_pos+20)) -ns_noise =round((band/Fs)*(size_data/2)) -Pnoise=sum(f(max_pos-ns_noise:max_pos+ns_noise))-Pu -plot(10*log10(f)) - -% plot(10*log10(f(max_pos-ns_noise:max_pos+ns_noise))) - -SNR=10*log10(Pu/Pnoise) -N_in = -174 +10*log10(1000*band) -S_in = -110; -SNR_in=S_in - N_in - -NF=SNR_in-SNR -end; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post_iq.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post_iq.m deleted file mode 100755 index 6bb3f387c5..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_post_iq.m +++ /dev/null @@ -1,96 +0,0 @@ -function [ratio,phase]=IQ_estimation(freq) - -gpib_send(gpib_card,sme,'*RST;*CLS'); % reset and configure the signal generator - -gpib_send(gpib_card,sme,'POW -60dBm'); - -gpib_send(gpib_card,sme,strcat('FREQ ',int2str(freq),'MHz')); -gpib_send(gpib_card,sme,'OUTP:STAT ON'); % activate output - -cmd1='/homes/nussbaum/open_freya/arch/openair_CardBus_MIMO1/LEON3/hostpc/user/tools/scripts/set_receiver -M '; -gain1=30; -gain2=30; -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -system(cmd); -sleep(.1); -s=oarf_get_frame(0); -signal=s(:,1); - - -size_data=20480; -Fs=7680; %in kHz -band = 2000; %in kHz -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; - -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -if(abs(freq_max-2000)>100) -disp('Warning') -end; - -cumI=0; -cumQ=0; - -I=real(signal(1:2000)); -Q=imag(signal(1:2000)); - -for i=1:2000 - cumI=cumI + I(i)*I(i); - cumQ=cumQ + Q(i)*Q(i); -end; -amp= sqrt(2*cumI/length(I)) -I=I/amp; -Q=Q/amp; -ratio=sqrt(cumI/cumQ) -n_fft=1024; -f=abs(fft(I(1:n_fft))); -max = 0; -index=0; -for i=1:n_fft/2 - if f(i)> max - max=f(i); - index=i; - end; -end; -disp(max) -disp(index) -plot(f); -freq_estim=(index-1)/n_fft; -p=Q*ratio.*I; -sinphi=2*sum(p)/length(Q); -phi_est=-asin(sinphi) -Qcor=(sin(phi_est)*I+ratio*Q)/cos(phi_est); -figure -plot(I(1:100)) -hold on -plot(Qcor(1:100),'g'); -comp=I+j*Qcor; -figure -plot(20*log10(abs(fft(comp)))); - -% per=round(1/freq_estim) -% figure;plot(I(1:per+1)) -% opt_offset=-5 -% min_diff=10^20; -% for offset=0:per -% diff=0; -% for k=1:n_fft -% diff=diff+abs(I(k+offset)-Q(k)); -% end; -% if diff0) -s=oarf_get_frame(0); -plot(20*log10(abs(fft(s(:,1))))) -i=i-1; -disp(i) -end diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_spec2.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_spec2.m deleted file mode 100755 index 350f6ead8e..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_spec2.m +++ /dev/null @@ -1,11 +0,0 @@ -openair_init; -i=30 -while (i>0) -s=oarf_get_frame(0); -figure(1) -plot(20*log10(abs(fft(s(:,1))))) -figure(2) -plot(imag(s(:,1))) -i=i-1; -disp(i) -end diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store.m deleted file mode 100755 index fb73fe1c93..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store.m +++ /dev/null @@ -1,18 +0,0 @@ -frequency = input('Input freq in MHz: ', 's'); -num=1; -openair_init; -for n=1:num -s=oarf_get_frame(0); -plot(20*log10(abs(fft(s(:,1))))) -signal=s(:,1); -disp(signal(1:10)); -fid=fopen(['/tmp/' frequency '_' int2str(n) '.dat'],'wb') -sig=zeros(2*length(signal),1); -sig(1:2:length(sig))=real(signal); -sig(2:2:length(sig))=imag(signal); -fwrite(fid,sig,'float'); -fclose(fid); -end; - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store2.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store2.m deleted file mode 100755 index faf625c92d..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store2.m +++ /dev/null @@ -1,42 +0,0 @@ -%frequency = input('Input freq in MHz: ', 's'); - - -gpib_card=0; % first GPIB PCI card in the computer -gpib_sig_gen=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu (for SME) -gpib_spec_ana=20; % this is configured in the spectrum analsyer - - -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,gpib_device,'POW -70dBm'); -gpib_send(gpib_card,gpib_device,'FREQ 1.91452GHz'); - -cmd1='/homes/khalfall/work/openairinterface/arch/openair_CardBus_MIMO1/LEON3/hostpc/user/tools/scripts/set_receiver -M '; -frequency='900'; - -ALL_gain1=61:1:63; -ALL_gain2=61:1:63; - -for gain1=ALL_gain1 - - for gain2= ALL_gain2 -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -disp(cmd); -system(cmd); -%system('set_receiver -M ' frequency ' -g1 ' int2str(gain1) ' -g2 ' int2str(gain2)); -system('sleep 1'); -end; -end; - -num=10; -openair_init; -%for n=1:num -%s=oarf_get_frame(0); -%plot(20*log10(abs(fft(s(:,1))))) -%signal=s(:,1); -%fid=fopen(['/tmp/' frequency '_' int2str(n) '.dat'],'wb') -%fwrite(fid,signal); -%fclose(fid); -%end; - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store_ref.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store_ref.m deleted file mode 100755 index f206d36bd9..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/rx_store_ref.m +++ /dev/null @@ -1,18 +0,0 @@ -frequency = input('Input freq in MHz: ', 's'); -num=1; -openair_init; -for n=1:num -s=oarf_get_frame(0); -plot(20*log10(abs(fft(s(:,1))))) -signal=s(:,1); -disp(signal(1:10)); -fid=fopen(['/tmp/' frequency '_ref' int2str(n) '.dat'],'wb') -sig=zeros(2*length(signal),1); -sig(1:2:length(sig))=real(signal); -sig(2:2:length(sig))=imag(signal); -fwrite(fid,sig,'float'); -fclose(fid); -end; - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/s_mxa.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/s_mxa.m deleted file mode 100755 index 454ea5c6c1..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/s_mxa.m +++ /dev/null @@ -1,93 +0,0 @@ -%frequency = input('Input freq in MHz: ', 's'); -% script to setup mxa and sign generator - -gpib_card=0; % first GPIB PCI card in the computer -sme=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu (for SME) -mxa=20; % this is configured in the spectrum analsyer - - -%gpib_send(gpib_card,sme,'*RST;*CLS'); % reset and configure the signal generator -%gpib_send(gpib_card,sme,'POW -70dBm'); -%gpib_send(gpib_card,sme,'FREQ 1.91452GHz'); - -gpib_send(gpib_card,mxa,'*CLS'); -gpib_send(gpib_card,mxa,'SENS:FREQ:CENT 642MHz'); - -sleep(1); -gpib_send(gpib_card,mxa,'SENS:FREQ:SPAN 50MHz'); - -sleep(1); -%gpib_send(gpib_card,mxa,'SENS:BAND:RES 10KHZ'); - -sleep(1); -gpib_send(gpib_card,mxa,'CONF:ACP'); -gpib_send(gpib_card,mxa,'INIT:ACP'); - -gpib_send(gpib_card,mxa,'SENS:ACP:FREQ:SPAN 20MHz'); - -gpib_send(gpib_card,mxa,'SENS:ACP:CARR1:LIST:BAND:INT 8MHz'); - -gpib_send(gpib_card,mxa,'SENS:ACP:OFFS1:LIST:STAT ON'); - -gpib_send(gpib_card,mxa,'SENS:ACP:OFFS1:LIST:FREQ 8MHZ,8MHZ,8MHZ,8MHZ,8MHZ,8MHZ'); -%frequency = input('Input freq in MHz: ', 's'); - gpib_send(gpib_card,mxa,'SENS:ACP:OFFS1:LIST:BAND:INT 8MHZ,8MHZ,8MHZ,8MHZ,8MHZ,8MHZ'); - -gpib_send(0,20,'SENS:POW:RANG:OPT:ATT COMB') -gpib_send(0,20,'SENS:POW:RF:RANG:OPT IMM') - - -%gpib_send(gpib_card,mxa,'POW:ATT 40dB'); -x=gpib_query(gpib_card,mxa,'SENS:ACP:CARR1:POW?',1); - - - -cmd1='/homes/khalfall/work/openairinterface/arch/openair_CardBus_MIMO1/LEON3/hostpc/user/tools/scripts/set_transmitter -M '; -frequency='900'; - -ALL_gain1=0:16:63; -ALL_gain2=0:16:63; - -i=0; -for gain1=ALL_gain1 -for gain2= ALL_gain2 - -i=i+1; -end; -end; -table=zeros(i,4); -i=1; -for gain1=ALL_gain1 -for gain2= ALL_gain2 -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -%disp(cmd); -system(cmd); -%system('set_receiver -M ' frequency ' -g1 ' int2str(gain1) ' -g2 ' int2str(gain2)); -%system('sleep 1'); -sleep(.1); -table(i,1)=gain1; -table(i,2)=gain2; -%frequency = input('Input freq in MHz: ', 's'); -x=gpib_query(gpib_card,mxa,'READ:ACP?',3); -table(i,3)=x(1); -table(i,4)=(x(2)+x(3))/2; -i=i+1; -end; -end; -disp(table); - -P_num =100; %(warning, to be updated) - - - -% Post processing of the table started here -Pmin = -40; % in dBm -Pmax = 20; % in dBm - - - -% a Tx calibration file is calculated for a given board and frequency - -%fid=fopen(['/tmp/cal_TX' frequency '_' int2str(n) '.dat'],'wb') -%fwrite(fid,signal); -%fclose(fid); diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/script.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/script.m deleted file mode 100755 index 47edfa586d..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/script.m +++ /dev/null @@ -1,111 +0,0 @@ -clear all - -size_data = 20480; % in ech -band = 7*10^6; %in Hz - -Samples = zeros(size_data,1); -prefixe_in = '/tmp/'; % c'estle repertoire des fichiers .dat - -signal_1 = [prefixe_in '953_4.dat']; -fid_1 = fopen(signal_1,'rb'); -signal = fread(fid_1, size_data); -fclose(fid_1); -Samples(:,1) = signal; - -data = (fft(Samples))'; - -mes_norm = sqrt(real(data).^2+imag(data).^2); - -[n,m]= size(mes_norm); - -decal_freq = 180*10^3; % in Hz -decal = ceil((decal_freq*size_data)/band); % in ech - - -for q = 1:(m - decal); - % Parameters - mu_norm = sum(mes_norm(q:q+decal))/(decal+1); - sigma2_norm = sum((mes_norm(q:q+decal)-mu_norm).^2)./(decal+1); - sigma_ray = sqrt((1/(2*(decal+1)))*sum(mes_norm(q:q+decal).^2)); - - % Distributions %%%%%%%%% - rayleigh = mes_norm(q:q+decal)./(sigma_ray^2).*exp(-(mes_norm(q:q+decal).^2)./(2*(sigma_ray^2))); - aic_matrix (1,q) = sum(log10(rayleigh))+2; - nr = exp(-(1/2)*(mes_norm(q:q+decal)-mu_norm).^2./(sigma2_norm))./(sqrt(sigma2_norm*2*pi)); - aic_matrix (2,q) = sum(log10(nr))+8; -end - - -min_vect = min(aic_matrix(:,:)); - -for i=1:m-decal, - D(1,i) = aic_matrix(1,i) - min_vect(i); - D(2,i) = aic_matrix(2,i) - min_vect(i); - - den = sum(exp(-0.5*D(:,i))); - w_ray(i) = exp(-0.5*D(1,i))/den; - w_nr(i) = exp(-0.5*D(2,i))/den; -end - -for i= 1:ceil(decal/2), - bande(i) = 0; -end - -for i=ceil(decal/2) + 1:length(w_ray)+ceil(decal/2), - if w_ray(i-ceil(decal/2)) < 0.009, - bande(i) = 1; - else - bande(i) = 0; - end -end - -for i= length(w_ray)+ceil(decal/2)+1:length(w_ray)+decal, - bande(i) = 0; -end - -bande_1 = zeros(1,length(bande)); - -for i=1:decal:length(bande)-decal, - nb_zeros = 0; - for k = 1:decal, - if (bande(i+k-1)==0), - nb_zeros = nb_zeros+1; - end - end - if (nb_zeros > decal/2), - for k = 1:decal, - bande_1(i+k-1)=0; - end - else - for k = 1:decal, - bande_1(i+k-1)=1; - end - end -end - -for i=1:length(bande)/2-72, - bande_1(length(bande) - i - 1) = bande_1(i + 72); -end - -for i=1:length(bande), - ban(i) = 0; -end - -for i=1:decal:length(bande), - ban(i) = 1; -end - -if 1, - size_data = size_data - decal; - fr = -band/2:band/size_data:band/2-band/size_data; - figure(1), - subplot(2,1,1),plot(fr,w_ray,'k.'), axis([-band/2, band/2, 0, 1]) - title('') - size_data = 20480; - band = 7*10^6; %in kHz - fr = -band/2:band/size_data:band/2-band/size_data; - subplot(2,1,2),plot(fr, real(data(1,:)), 'k-'), axis([-band/2, band/2, -150000, 150000]) - subplot(2,1,2),hold on, plot(fr, 10^5.*ban,'k--'), plot(fr, 10^5.*bande_1,'r') - subplot(2,1,1),hold on, plot(fr, ban,'k--'), - title('') -end \ No newline at end of file diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/toto.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/toto.m deleted file mode 100755 index bb24d6b256..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/toto.m +++ /dev/null @@ -1,112 +0,0 @@ -frequency = input('Input freq in MHz: ', 's'); -% script to setup mxa and sign generator -freq=str2num(frequency); -size_data=20480; -Fs=7680; %sampling freq in kHz -band = 1500; % noise band in kHz -gpib_card=0; % first GPIB PCI card in the computer -sme=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu (for SME) -cd ../CBMIMO1_TOOLS; -openair_init; -cd ../AGILE_RF_TOOLS; -%freq=1200; % normally loop -S_in=-100; -loss_cable=0.5 + freq/2000; -% first, calculation of IQ missmatch -[ratio,phi_est]=IQ_estimation(freq); - -gpib_send(gpib_card,sme,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,sme,strcat('POW ',int2str(S_in),'dBm')); -%disp('FREQ ',int2str(freq),'MHz'); -gpib_send(gpib_card,sme,strcat('FREQ ',int2str(freq),'MHz')); -%disp('FREQ ',int2str(freq),'MHz'); -%frequency = input('Input freq in MHz: ', 's'); - -cmd1='/homes/nussbaum/openair1/ARCH/LEON3/hostpc/user/tools/scripts/set_receiver -M '; -frequency=int2str(freq); -ALL_gain1=63; -ALL_gain2=63; - -i=0; -for gain1=ALL_gain1 -for gain2= ALL_gain2 - -i=i+1; -end; -end; -table=zeros(i,4); -i=1; - -for gain1=ALL_gain1 -for gain2=ALL_gain2 -S_in_debug=-73 + floor((gain1+gain2)/2); -gpib_send(gpib_card,sme,strcat('POW ',int2str(S_in_debug),'dBm')); % this is for debug without the boards - -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -system(cmd); -%system('set_receiver -M ' frequency ' -g1 ' int2str(gain1) ' -g2 ' int2str(gain2)); -%system('sleep 1'); -gpib_send(gpib_card,sme,'OUTP:STAT ON'); % activate output -sleep(.1); -table(i,1)=gain1; -table(i,2)=gain2; - -s=oarf_get_frame(0); -%figure -%plot(20*log10(abs(fft(s(:,1)))),'g') -signal=s(:,1); -I=real(signal); -Q=imag(signal); -disp(phi_est); -Qcor=sin(phi_est)*I; - -Qcor=(sin(phi_est)*I+ratio*Q)/cos(phi_est); -figure -plot(I(1:100)) -hold on -plot(Qcor(1:100),'g'); -comp=I+j*Qcor; -hold off -figure -plot(20*log10(abs(fft(comp)))); -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=size_data/2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; -disp("max_pos") -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -disp("freq_max") -disp(freq_max) -if(abs(freq_max-2000)>400) % probably and error occurs -disp("Warning") -Pu=0.1; -Pnoise=10000; -else -% calculation of the signal power -Pu=sum(f(max_pos-20:max_pos+20)) -ns_noise =round((band/Fs)*(size_data/2)) -Pnoise=sum(f(max_pos-ns_noise:max_pos+ns_noise))-Pu -end; - - -% plot(10*log10(f)) - -% plot(10*log10(f(max_pos-ns_noise:max_pos+ns_noise))) - -SNR=10*log10(Pu/Pnoise) -N_in = -174 +10*log10(1000*band) -S_in = S_in-loss_cable; -SNR_in=S_in - N_in - -NF=SNR_in-SNR -disp("gain_total") -gain_total=10*log10(Pu) - S_in - -end; -end; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/tx_calibrate_FlexRF.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/tx_calibrate_FlexRF.m deleted file mode 100755 index 0f5721cd55..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/tx_calibrate_FlexRF.m +++ /dev/null @@ -1,94 +0,0 @@ -%frequency = input('Input freq in MHz: ', 's'); -% script to setup mxa and sign generator - -gpib_card=0; % first GPIB PCI card in the computer -sme=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu (for SME) -mxa=20; % this is configured in the spectrum analsyer - - -%gpib_send(gpib_card,sme,'*RST;*CLS'); % reset and configure the signal generator -%gpib_send(gpib_card,sme,'POW -70dBm'); -%gpib_send(gpib_card,sme,'FREQ 1.91452GHz'); - -gpib_send(gpib_card,mxa,'*CLS'); -gpib_send(gpib_card,mxa,'SENS:FREQ:CENT 642MHz'); - -sleep(1); -gpib_send(gpib_card,mxa,'SENS:FREQ:SPAN 50MHz'); - -sleep(1); -%gpib_send(gpib_card,mxa,'SENS:BAND:RES 10KHZ'); - -sleep(1); -gpib_send(gpib_card,mxa,'CONF:ACP'); -gpib_send(gpib_card,mxa,'INIT:ACP'); - -gpib_send(gpib_card,mxa,'SENS:ACP:FREQ:SPAN 20MHz'); - -gpib_send(gpib_card,mxa,'SENS:ACP:CARR1:LIST:BAND:INT 8MHz'); - -gpib_send(gpib_card,mxa,'SENS:ACP:OFFS1:LIST:STAT ON'); - -gpib_send(gpib_card,mxa,'SENS:ACP:OFFS1:LIST:FREQ 8MHZ,8MHZ,8MHZ,8MHZ,8MHZ,8MHZ'); -%frequency = input('Input freq in MHz: ', 's'); - gpib_send(gpib_card,mxa,'SENS:ACP:OFFS1:LIST:BAND:INT 8MHZ,8MHZ,8MHZ,8MHZ,8MHZ,8MHZ'); - -gpib_send(0,20,'SENS:POW:RANG:OPT:ATT COMB') -gpib_send(0,20,'SENS:POW:RF:RANG:OPT IMM') - - -%gpib_send(gpib_card,mxa,'POW:ATT 40dB'); -x=gpib_query(gpib_card,mxa,'SENS:ACP:CARR1:POW?',1); - - - -cmd1='/homes/khalfall/work/openairinterface/arch/openair_CardBus_MIMO1/LEON3/hostpc/user/tools/scripts/set_transmitter -M '; -frequency='900'; - -ALL_gain1=0:16:63; -ALL_gain2=0:16:63; - -i=0; -for gain1=ALL_gain1 -for gain2= ALL_gain2 - -i=i+1; -end; -end; -table=zeros(i,4); -i=1; -for gain1=ALL_gain1 -for gain2= ALL_gain2 -cmd=strcat(cmd1,frequency,' -g1 ',int2str(gain1),' -g2 ',int2str(gain2)); -%disp(cmd); -system(cmd); -%system('set_receiver -M ' frequency ' -g1 ' int2str(gain1) ' -g2 ' int2str(gain2)); -%system('sleep 1'); -sleep(.1); -table(i,1)=gain1; -table(i,2)=gain2; -%frequency = input('Input freq in MHz: ', 's'); -x=gpib_query(gpib_card,mxa,'READ:ACP?',3); -table(i,3)=x(1); -table(i,4)=(x(2)+x(3))/2; -i=i+1; -end; -end; -disp(table); - -P_num =100; %(warning, to be updated) - - - -% Post processing of the table started here -Pmin = -40; % in dBm -Pmax = 20; % in dBm -optimal_gain=zeros(Pmax-Pmin+1,4); - - - -% a Tx calibration file is calculated for a given board and frequency - -%fid=fopen(['/tmp/cal_TX' frequency '_' int2str(n) '.dat'],'wb') -%fwrite(fid,signal); -%fclose(fid); diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/variouspowers.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/variouspowers.m deleted file mode 100755 index bc74e32af3..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/variouspowers.m +++ /dev/null @@ -1,33 +0,0 @@ -function retvalue=variouspowers(s) - -W=25; - -fftsize=2^ceil(log2(length(s))); -powspectrum=fftshift(abs(fft(s-mean(s),fftsize)/sqrt(fftsize))); - -powspectrumfilt=conv(powspectrum,ones(1,2*W+1)); - -[sigpower carrier_idx]=max(powspectrumfilt); - -if (carrier_idx<=3*W) - carrier_idx=3*W+1; -end -sigpower_dB=20*log10(sigpower); - - -if (carrier_idx>3*W) - - noiseplusintfspectrum=powspectrum; - noiseplusintfspectrum(carrier_idx+(-W:W)-2*W)=zeros(1,2*W+1); - - noiseplusintfpower_dB=10*log10(sum(noiseplusintfspectrum.^2)); - - noiseplusintfspectrum_dB=20*log10(noiseplusintfspectrum); - noiseplusintfspectrum_dB(carrier_idx+(-W:W)-2*W)=-20; - -%plot([ 20*log10(powspectrum) noiseplusintfspectrum_dB]) -%pause - retvalue=[sigpower_dB noiseplusintfpower_dB]; -else - retvalue=[sigpower_dB +Inf]; -end diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/write_table.m b/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/write_table.m deleted file mode 100755 index 5aceb2f051..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/AGILE_RF_TOOLS/write_table.m +++ /dev/null @@ -1,33 +0,0 @@ -card = input('Input card number: ', 's'); - -filename_h = ['gain_table_' card '.h']; % file to store the gain table to -filename_mat = ['gain_table_' card '.mat']; - -save(filename_mat,'SpN0','SpN1','N0','N1','S0','S1','G0','G1','NF0','NF1','SNR0','SNR1'); - -fid = fopen(filename_h,'w'); - -fprintf(fid,'#ifndef _GAIN_TABLE_H__\n'); -fprintf(fid,'#define _GAIN_TABLE_H__\n'); - -fprintf(fid,'#include "phy_implementation_defs.h"\n'); -%fprintf(fid,'#include "phy_implementation_defs.h"\n'); - -fprintf(fid,'#define TCXO_OFFSET\n'); - -fprintf(fid,'struct gain_table_entry {\n'); -fprintf(fid,' unsigned char gain0;\n'); -fprintf(fid,' unsigned char gain1;\n'); -fprintf(fid,'};\n'); - -fprintf(fid,'struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = {\n'); -for agc_level = 1:(max_agc_level-min_agc_level) - fprintf(fid,'%d, %d,\n',gain_levels(agc_level,:)); -end -fprintf(fid,'%d, %d};\n',gain_levels(end,:)); - - -fprintf(fid,'#endif /* _GAIN_TABLE_H__ */\n'); - -fclose(fid); - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/MAX2391Gain_v2_3_800.png b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/MAX2391Gain_v2_3_800.png deleted file mode 100644 index 35bc21b5f45c098fac065635958f18755d8bec67..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4075 zcmZ9OdpK0vAI8^=!H_a^lG0(Q}1Ax><)j&_k`gR}CO|S2o&0Y{f^h6*K5EmQ(4B`NS!9kpfz5tz$L!1sU zrT~K&6F>|CoDFasurZvC0Squ9=D@}9+;Trp&h zqY@?*pbr}gA|Z19=?GC*P->8hS_MEkVFO+R@D%_lAVXjXfdvFk5O_ea34$O9q98Z{ zK?Vd@AgF+#7J_#WbV4u!wcvyi?6riSoZ&MTyyp)~LSS|bJaY!dWW$gW=zkBgo&AeEi?-qjBB*mlf^qo z)ggiZ8*ST^-E#f(aO#dEMNYjC1f`l3eb#7MDRoT^`pDpWCWW_8s6tH{rO7d~XYR8) zb+EL#@?p8~Y{ltUqh0Ms9=NI8W*e(^MBje^L_>dlc$Fi5YOn_D>2loNA$7koJIg@t z{}u$`L=uzNMY^S1sux%|k#Ox_n@!XAOxtqdKE1SOd#8}Q_sjXbNh=;gb#r@tL@L>{|JJMjhqMVUgM3(I$m*+v%&54e4p~doOYR6$f_OUR_T1 zyx5J$AB+6+XjQ(wQ_R8dL-|cmn`H6C@J+N{_7B(7d@X1c1D#0im6aZkBu|_@TwpDX zyL~=JU7S^@Lt{u92O2L0j*X1YQ{U~5ccsr^DkE*Wk0@Iymw032eTFZaZ;D42 zHWUxLUyHW;WJtPrXmVHAd&tipD;pm)pu5+{ZoY2EAlHUy49{jB%aGSSTDV@DNnie)c^efiF$_P%CW{Lyb6;!%H9T(wuAkh7r$T1H6{XdV5s zYRY)_qd#6uxpySSPAZ?}Wi`_AtwZMhOf0^Wuu(J6tPGkz46CPM|b9TOP0c-~$= zYqQ6ceJ_Wi#0NjBB&wa9R<3nxRzsz`UVMCX*vo`$`;qA`?P=m*c-6N`;}K*2gL+%j z%as+jBEH!`lzwuh8~aB4mPcA!|2Xcjx;?Y|-mVEZRYRu)%XFr8%w>ExYC10L(7F2l z#|?Mpf|`9!?s72qt!DgJsBy4a?^^tNV#AxPpl@C{BL1|(y)S1 z&O4~&z2JjtpBA;NIB6>Ru-C`Y>D1SmwbEwA-W@c7*)UPdqqd-a-#@pA!y;CxPOTzp zSM(6llNHit)!r5hrs7*T;Y)jn*rN5r*{}53b~M z?5MA8q{U{F$ct7zA*juKMAz;|H2H8YK~3lWq^w4Qn(jn&@e4$^FSo%~6c_YzdA8d1$8L{$}esMgo*4na4s8$s09O@iqD`}#1C>g(8f zn!BD-lBFiP_PZro?M|4Cg{_+5qS{ImtTI~1Frt*4%OvQkQ;43l8)0F6*}oBVVf0U$ zd|hJy%jmH3@9~Obn;*~(FZ7p{WG#O1*09)*T0T2Yl_@iqRb~s8XbprIs zReEnTUm}a=!P%05Ad|KoX9nvBN2kYHts}ifTZ+AlHvCnOXteL5dSb&F4RT_`i?k7C zo1*wthVr-Z<71xKio#rVpNJ0%4>@wosJ?TYk;0pU6p6=(qwqDIN7VoF)Q?NC;+3hX zzQ*=hFq&eORQ#5&Nm|u@P%#PJ)F43PqtaOm(9({av5)~-&~j|yoE@B-*=8i&uTe^O znt;MVP-oT{3nRNMLyc=YylXvbt4q$1ni{#JTV>F;BitTJsF9XU#G<*+R48<$rF;^_ z#Xz-;)@CO|fukbj4=ix&r3`tT7v}U@%mYuO#vTa8w6;jzF1Zbf#OoT05eY5uo5n(W zYNS=&kS%#uqPmsV#*~fmz-dPqqn%7^v$CF;=;s60Wnmn}#q-Vh$VW5Mlye#R^(YEO zu1Eoj0#sgJSy96%QyH)$LMN&ueBf3fG^3Um*Gl{EF~|efjtmiEtgFrW-D+yNNnL~? zdEkUJ=M+!~gr1a-nyNwz+_c9&V1vC>zC0xc<^;*IZd}P)cCYhzY`{sdX+5`h=&~T| zUVP*5W24;@33sn_vAFA}&5r#tLH(Yf9?sA<)*wAvZ7P&i?lWuiIBrrj^)&alr0t0c ze^xZ^B(LAXopB1pELG40kN0CcP6bE@j+5tR?dCmyd9p`C#IgR@B$a$VJX3w)-` z|17Y*QvKaY74Ly{#(tG*QOk{0cbM48H|jwHm1+eR{82sA9Ji1)>5|T~l}kJ@&GFk= z5*piGe&7ta-59uM*kssgzr`LgTlx&{bm5y&-st`;f zuc;kv(k2yM7OtZ@=%_|kVAeflCge3tu8P*SKD4ZQIX9U4eL82X(w40JOD(s+hkDAK z$jT)3pR@6Zo-#MGG9@c-76usYnNL}Ce0@&@m8`_nb#y#V=1e8EwiiBSnd2t8YMuu+ zWGvJ$Xfu(UB!a+3u`gvjL0xBoC)d8!mmfFipiQM9%MwWT>ePo8rUc*wt+sqV0_8O=X0DdMZtRCUp?Dg87z{WpDw#SD4>lNcgXSvPddtJ*H`7Z|`O*%_%j1pY>eHLB>2`WiGHlXR^eU~)FQ_67aE)63|DZ|-f5Q%EL=mx zIqQ39#@y zw@z`G$B^gLMq**ync0(5rKQK;1E=8v;e`|}Z|=5iJ%jJ+iotS^1-A$5d zJsS;4_<;OYTA_#sPQC)4)D6Bf=&Dbb9q@+Yyf^v#O_hjd z`Jr^nl2G1lSLQMAGSc5sytzxPb&y9UkMP)NfIJH6C_?bC1~OQC3>oBnCk&oXK?X}3 zQN~a6T$sBKH)&Ln7IJo4^#xD-JuZ?jmn1kF3*9qhwh0Dw&syrL~C^&IbW>8J2&t8@oTEIfAvvJ zI+*?$E!_G}`{VFJy^f|!Y4r~E-*^g2M6~%uX+K|Zy4_f4`W%JtPs>I^cO7DynS!R_ zKGf7eWn>r!Q$Epe+N+&?!Auq46yoFyy!Q$6}fjH&rv1xZr81_|{F5Q74Og{;XcAL_eZVb87}N zcDBL)MeM#K>3rwY(Qf<Y#e<}h+o(2?p-KaQq5CQnAwvXxrioLHv?=*?&`Hlj~_eI)=Oqv?awGO8Loq6|iK#YDqhhNbC;IqhmTi_Y3|GEaKGKRJ3 Vmg(9_ck_vdK3?lQZ>(S^{0}TO!w>)f diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/MAX2391NF_v2_3_800.png b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/MAX2391NF_v2_3_800.png deleted file mode 100644 index 459cfb787f236f31614c7507dd23c98ef15050d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4003 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 menu -freqband=0; % frequency band used by the openair card (depricated) - -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) -dual_tx = 0; -tdd = 1; - -fc = 1902600e3+freqband*5e6; % this has to be the same as in the config file -fs = 7680e3; -%fs = 6500e3; -fref = fc+fs/4; -power_dBm=-70; - - -%gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -%gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); -%gpib_send(gpib_card,gpib_device,['FREQ 1.91860 Ghz']); % set the frequency -%gpib_send(gpib_card,gpib_device,['FREQ ' int2str(fref/1e3) 'khz']); % set the frequency -%gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - -%keyboard; - -oarf_config(freqband,tdd,dual_tx) - -oarf_set_rx_rfmode(0); - -oarf_set_rx_gain(70,70,0,0); - -sleep(2) - -step = 128; -tcxo_freq = 128; - -f_off_min = 1e6; -tcxo_freq_min = 256; - -do - - step = step/2; - tcxo_freq - oarf_set_tcxo_dac(tcxo_freq); - sleep(2); - s=oarf_get_frame(freqband); %oarf_get_frame - nb_rx = size(s,2); - - % find the DC component - m = mean(s); - - s_phase = unwrap(angle(s(10000:4:length(s),1).')); - s_phase = s_phase - s_phase(1,1); - f_off = mean(s_phase(2:length(s_phase))*fs/4./(1:(length(s_phase)-1))/2/pi) - plot(1:length(s_phase),s_phase,'r'); - - if (nb_rx>1) - s_phase2 = unwrap(angle(s(10000:4:length(s),2).')); - s_phase2 = s_phase2 - s_phase2(1,1); - f_off2 = mean(s_phase2(2:length(s_phase2))*fs/4./(1:(length(s_phase2)-1))/2/pi) - hold on - plot(1:length(s_phase2),s_phase2,'g'); - hold off - end - - - if (abs(f_off) < f_off_min) - tcxo_freq_min = tcxo_freq; - f_off_min = abs((f_off)); - end - - if ((f_off) > 0) - tcxo_freq = tcxo_freq + step; - else - tcxo_freq = tcxo_freq - step; - endif - - -until (step < 1) - -write_tcxo - -%gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_10.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_10.h deleted file mode 100644 index 1aa695731b..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_10.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#define MAX_RF_GAIN 150 -#define MIN_RF_GAIN 96 -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 26, 17, - 28, 22, - 29, 25, - 31, 27, - 33, 29, - 35, 31, - 38, 33, - 40, 35, - 48, 38, - 52, 40, - 54, 43, - 56, 48, - 57, 52, - 58, 54, - 60, 56, - 61, 58, - 63, 60, - 65, 62, - 67, 65, - 69, 67, - 73, 69, - 79, 72, - 84, 74, - 88, 78, - 90, 82, - 92, 85, - 94, 88, - 95, 90, - 97, 92, - 98, 94, - 99, 96, - 101, 99, - 103, 101, - 105, 103, - 107, 106, - 111, 108, - 116, 111, - 122, 114, - 126, 118, - 127, 122, - 128, 125, - 129, 127, - 131, 130, - 133, 132, - 135, 134, - 138, 137, - 140, 139, - 144, 143, - 152, 148, - 155, 152, - 157, 155, - 158, 157, - 160, 160, - 162, 162, - 164, 166 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_11.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_11.h deleted file mode 100644 index 2a1a0c18e9..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_11.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#define MAX_RF_GAIN 150 -#define MIN_RF_GAIN 96 -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_12.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_12.h deleted file mode 100644 index 857120bdbf..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_12.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#define MAX_RF_GAIN 150 -#define MIN_RF_GAIN 96 -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 28, 21, - 29, 28, - 30, 30, - 32, 31, - 33, 33, - 34, 34, - 35, 35, - 37, 37, - 39, 39, - 41, 41, - 46, 46, - 55, 52, - 57, 55, - 58, 57, - 60, 59, - 61, 61, - 62, 62, - 64, 64, - 65, 65, - 69, 68, - 76, 73, - 78, 76, - 79, 78, - 81, 80, - 83, 82, - 85, 83, - 89, 85, - 94, 90, - 97, 95, - 100, 98, - 101, 100, - 103, 101, - 104, 103, - 105, 104, - 107, 106, - 111, 108, - 117, 115, - 119, 118, - 121, 120, - 122, 122, - 124, 123, - 125, 124, - 128, 126, - 130, 128, - 140, 132, - 143, 141, - 145, 143, - 147, 145, - 149, 147, - 151, 150, - 152, 151, - 154, 153, - 155, 154, - 167, 167, - 168, 169 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_2.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_2.h deleted file mode 100644 index e8890ea4ce..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_2.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#include "phy_implementation_defs.h" -#define TCXO_OFFSET -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 27, 20, - 29, 23, - 32, 26, - 34, 28, - 37, 31, - 41, 34, - 43, 37, - 45, 39, - 48, 42, - 51, 45, - 54, 47, - 56, 50, - 58, 52, - 61, 55, - 63, 57, - 65, 60, - 67, 63, - 70, 65, - 72, 67, - 75, 70, - 78, 72, - 80, 75, - 83, 77, - 86, 80, - 88, 82, - 90, 85, - 93, 87, - 98, 90, - 102, 93, - 103, 95, - 105, 97, - 106, 100, - 108, 102, - 114, 105, - 116, 107, - 117, 110, - 118, 113, - 120, 115, - 123, 118, - 131, 121, - 132, 123, - 132, 126, - 133, 128, - 134, 131, - 141, 134, - 142, 136, - 149, 139, - 152, 142, - 155, 145, - 156, 148, - 158, 151, - 160, 154, - 167, 157, - 179, 160, - 179, 164 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_7.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_7.h deleted file mode 100644 index e2f7d99049..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_7.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#include "phy_implementation_defs.h" -#define TCXO_OFFSET -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 1, 2, - 6, 7, - 10, 11, - 13, 15, - 17, 18, - 20, 21, - 23, 25, - 26, 28, - 29, 30, - 31, 33, - 34, 36, - 37, 39, - 39, 42, - 42, 44, - 45, 47, - 47, 50, - 50, 52, - 52, 55, - 55, 57, - 57, 58, - 60, 60, - 62, 61, - 65, 62, - 67, 63, - 70, 64, - 72, 65, - 75, 66, - 77, 67, - 80, 69, - 82, 70, - 85, 72, - 87, 75, - 90, 78, - 92, 81, - 94, 87, - 97, 93, - 100, 100, - 102, 106, - 105, 110, - 107, 112, - 110, 114, - 112, 116, - 115, 118, - 117, 120, - 120, 123, - 123, 125, - 125, 128, - 128, 130, - 131, 133, - 134, 136, - 136, 138, - 139, 141, - 142, 144, - 145, 147, - 148, 150 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.h deleted file mode 100644 index b36b27d631..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#define MAX_RF_GAIN 150 -#define MIN_RF_GAIN 130 -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 32, 32, - 35, 35, - 38, 38, - 40, 40, - 43, 43, - 46, 46, - 48, 48, - 51, 51, - 54, 53, - 56, 56, - 59, 58, - 61, 61, - 64, 63, - 67, 66, - 69, 68, - 72, 71, - 75, 73, - 77, 76, - 80, 79, - 82, 81, - 85, 84 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.mat b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_13_800_s3.mat deleted file mode 100644 index 1c9918bb96e14cc103aa710723742e13094db1fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4448 zcmdT`3sh5A7QG~*eEdLF5@67$Rf-?*fu8~*oCorW5Q2z;XiY+hibj$m<)cNP*rirf zC@2N70y=_DB@UAK?D)zhCGmVExUAPt(ozzb+X?%H#ymN zpY!g$LMp(AawTTkkc5y5uwEXfkWVF|Bf=sh<>5p~EFqFbN~7e&bQ{vfb}C^<+LG4f z3~TaZ!gi)3>EKAtBo+p^A>!W}NJk(Xju7&~HW-^8ix`kD>+4|bvtjs|^6?R?l+p4C zaj5GW?CZ1N!+;PI$Y}BfVf(XuTs*JIITV{FUqnpA@-@m(Id*&V@ih;>8!axZ3!3~4 zwm-{ngy#q5Um*<(x0~)@i^IM7Y0X3L7zJ9iVbMX0G{vF^i{4rUKP@u;tiO=;16ejvj}Wop#P93J&(=L z@qDLJ2ydfJ9Q<$Syb`p?!_oE}1uV8#;Pi(3IR2boElhy*LAWoF( zFo;5;=FSz7d!dU07HN|916U!ZdV)j{znNV+vHZI>>*d(Hu8Rq*Z=m;sMVoluE4!k+Ymwdfn86nl-F+9zFQd#xF zUIAS_=IKWl$AJzySHK;YgyT~T>USQ%xRELO;yYZ28IdoEQoN28FIE((G1iDiMYjU- zDd(Ih*P~G0m5%CS3yMj%FHE~dQq1A;73Tthk~~W{tnKimn2xNW2~&M23GJ|J=S}Z- z<8AwzH$tS7^`*s_SCB;}cO^#h`;t{L826W!T}{CJ1M|L&!TK|w1jk~YSK?GVA2#fM23z7TSTT192n3BkPK z_?{;*B6!`eTE73S&uwS#h%*FJpbs_g*<0&3pze`g-TUr}9D$D2T^wdL2e?61xBaF8 z7(Be(e(x0p@rt%6J+&K5j-0+_NwqsD{}C4Qw89e}k(`)^Hw7SdiPv3q(Hmq()de$) zgm8UzcE_U#5oAO(ayO0ggVN&E((3ghun|la33I(+L$ltE@%g?G8~yT_;mP+?KhFXE zXPNxXo+UBMfNo#nSUpw@t(%9BO1LM6QaHc6Q7Qq0wdJRCZ%H6m^ayv zmNJ;c-Cmm)D1#xftL07?WbbAFc@F45i)5GkFBU8V$ueq@nSmHM#}wg*D#TFY_~d-7 zSOUb7^A?;+tYhtt`qV{IxV?67TGuTp%-(_O)&+z>WujzL@Qo0tnryEaCXzvG@X8J6 zie%t>=IJJAmcg_9#&4fvoqUpiT##}t1hO1Cr>-W*psv>WVM*Ehs2>;kdXWA1W53_x z>Z;uM;1?YiXKuv@HCN(U`57NbqwbtoKR#r|S6!``kI{P!^NErNpeS{}8^Q;pWX{2@ zdHDM$hAWEi;dy1!oZuopsAff*eD<3ekh^O#m$wj55E5BqudsqN*CWM=SM7if-e+w4 z*cQ|uW}K=Evi@K9AH(i{%-ipO8vShh^<&KajSM_^fTnfkc7A69Fe1a~psfkC2$BNz z2b+LjVB{}Ft)oG0Vz}zgzR|!OeSE3<_-G(k()9vDFD41f8mPIgrGM8!0o+{^c7U zyjb&UX-p6gi1|-az?27GNy?HOHy&hN+xB3)@n|6PzoO;NLjfJ<*UlPVS{!6>xZ8QW zIrAdyQ;*9G$oDWF` z4a2x2d0><`IAd^@A<#tDwDbx0i;+kD2a0DOGN@(iX}ZIhX%UUcR&hE1H~Rex!=ibV diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.h deleted file mode 100644 index 3babeb655a..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#define MAX_RF_GAIN 150 -#define MIN_RF_GAIN 130 -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 46, 56, - 49, 58, - 51, 61, - 54, 63, - 56, 66, - 59, 68, - 62, 71, - 64, 73, - 67, 76, - 69, 78, - 72, 81, - 74, 83, - 77, 85, - 79, 88, - 82, 90, - 84, 93, - 87, 95, - 89, 98, - 92, 100, - 94, 103, - 97, 106 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.mat b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_3_800_ue.mat deleted file mode 100644 index de25fc234a3172711bbd8aaa3303c821fe8790ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3360 zcmbW33sh5A7KRVVBLX_0f>1>+u@w}7AWxCPzVZklfe0uR6hgwIpz;zBMdYF^a1gDI zjN+8iILb?`)H32@sa$O<3W(4uNVP~&K$KCeFLcDr2|1{pwd^u;R`&Yu-uJGZ@0|bK zoCxS(KYB4`Z^feobg*S?{OXwb)VkF8w6vH+O1z#5kfcRr#89?YJS&^|)B>Ij&yr_n z$#bH34$gK9@rPO#?2f4aYakUL!DNJxHx3OP9HLl|I>}YAj>jZ?P5b#pCMT_nNsWwN zyawkJ$#Yl`VnbMYzfc^1)^7s7FYl>?L*6enGc|TiQgjSX$NCw{Fa9uw-AD@Z{w$6^ z>#vLNzuP}9Dn4<6?Lr$|9_!D@FUH0+P^cBrg$iY8qFzLoC=`SWWdljRjN~CC4s zl1D1EN2E|ntWc3;Y#txF?&IqupT|NchXn|aKdd{>mGyB=d}3r&oFsB}Oh(M=|Lq4N zrTFCgVog-$`}?utv3@(TDev=5ANNqjA@@xihkULIxV1P_%vUJCIX3t(CX6>xAB7^~ z6Y?W<0jUQN9ruqYEG2c~Co}GAkfP2KWrE3b<9-u`<)lvhXU6wID5(<;L^v3KMV%o$ z4BK?a0-xol$>8nbevi#{DS?2Xh6+SKB?@DmnjB`^6@w$%5eMs)@3SR*uvWMn3jwRw; z^k~^fxge8m*Y0vD#+=vKq-RxFtEo{77SOjBx^87&1=J%*?=ZdxXiv7bYCEEl+xfX^ z71LAUkPqi zmEW+a;}W3IrUR##9zZP}K~mi(*oWy~Ji5=J(eVu}dAY_k)6gw#y{r&Impzr^wt35q5W1jse-2g!XH(Y~W1##&Uks3jfi ziO{bS3h`st2B-W7^Ru~4Cph&u53tS3X#r&D;L>W<3+VLUKL5hxDfXjr(_;fI8nt@8 za%GHZWM)fmX||@BkXW5I|4)_T4ti(3g&N%jdR6vdSp4PLBj5x%v9)@ov5R1)R@vz8 z5m(s$vtz{|p9bH$Q(h@9?lApA-;J($o>0cGsd#P02amLw^^KN3aOCy=jGHD)U`}hV zEpM^_%oFE*R?*`RzI(rS1S26FJK_u5oP}^R<$UMtf&j?Swl4m0)JKW;QWXWgv)<3< zBv0M$X9JlA<+Aoywh*Bc_%c4m5r%eg)#+Q#kZJdK6Q?>&9$B8CUW$3v}8ih*nVORs^w1oBRAm8exoK(8g!`usBq ztUfyO@ir6loUq<#z7~k4^;S1KO#}!q zUtE;V0eIk`^;)V4RA}o!vl`a^t$}s>G(lRHvbAAI1JI8X;y5=o@caBA?AN6nV6)kS zI({5rGTPzfIW1^AZuU)HvmS^Hx7q7!8$)v8CGC!8Gq`)o{QHjGPD<<(Ik(MQ?(F`A zkt!Wv?%mk>$UqwyVf{U`Ow8qLu#>6K1ku;oHFujd0hM*N4o=40`CidF8EU{Boz!Ug z7jLBIE4(W+C0a}oD{&%?Ea6lL<=77j|hGcWTE(}ZJpFcY| z6WUO1+;L|!CAjf<=^yy!yi5#C*nc?76n>GE?|+eI3U@XX=wCi+3iF53AC~r-LYhZv zHandQstGz8mtDD#c44K(ZX+%TOKuytd2r!}$!`6l-dwnw<59i!zA5DOTAhf`@MBs@MTjC^>egG<&@X=$7u` RObnk2OrMF?)avVQ{{<^^EK~ph diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.h b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.h deleted file mode 100644 index 1ae2dcc0eb..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _GAIN_TABLE_H__ -#define _GAIN_TABLE_H__ -#define MAX_RF_GAIN 150 -#define MIN_RF_GAIN 130 -struct gain_table_entry { - unsigned char gain0; - unsigned char gain1; -}; -struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = { - 25, 34, - 28, 37, - 31, 39, - 34, 42, - 36, 45, - 39, 47, - 42, 50, - 44, 53, - 47, 55, - 49, 58, - 52, 60, - 54, 63, - 57, 65, - 59, 68, - 62, 70, - 64, 73, - 67, 75, - 69, 78, - 72, 80, - 74, 83, - 77, 85 -}; -#endif /* _GAIN_TABLE_H__ */ diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.mat b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gain_table_v2_7_800_s1.mat deleted file mode 100644 index d339da0ba753af7b674255ab455653362715bb90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4448 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 bvrSCRM^nPQTemz88&L0BzXAU1KgawJnPha7 diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gpib_send.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gpib_send.cc deleted file mode 100644 index 0a94b3ab68..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/gpib_send.cc +++ /dev/null @@ -1,101 +0,0 @@ - -// Maxime Guillaud - created Wed May 10 19:23:30 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://octave.sourceforge.net/coda/c58.html -// compile with: mkoctfile -I/usr/local/include/gpib -lgpib gpib_send.cc - -#include -#include "ib.h" - - - - -static bool any_bad_argument(const octave_value_list &args) -{ - if (args.length()!=3) - { - error("gpib_send: syntax: gpib_send(gpib_board,gpib_device,gpib_str)."); - return true; - } - - - if (!args(0).is_real_scalar()) - { - error("gpib_send: GPIB board number must be a positive integer."); - return true; - } - if (args(0).scalar_value() < 0.0) - { - error("gpib_send: GPIB board number must be a positive integer."); - return true; - } - if (floor(args(0).scalar_value()) != args(0).scalar_value()) - { - error("gpib_send: GPIB board number must be a positive integer."); - return true; - } - - - if (!args(1).is_real_scalar()) - { - error("gpib_send: GPIB device number must be a positive integer."); - return true; - } - - if (args(1).scalar_value() < 0.0) - { - error("gpib_send: GPIB device number must be a positive integer."); - return true; - } - - if (floor(args(1).scalar_value()) != args(1).scalar_value()) - { - error("gpib_send: GPIB device number must be a positive integer."); - return true; - } - - if (!args(2).is_string()) - { - error("gpib_send: third parameter must be a char string."); - return true; - } - - return false; -} - - - - -DEFUN_DLD (gpib_send, args, nargout,"sends commands to the GPIB bus") -{ - if (any_bad_argument(args)) - return octave_value_list(); - - - const int gpib_board = args(0).int_value(); - const int gpib_device = args(1).int_value(); - const std::string gpib_string = args(2).string_value(); - - unsigned short addlist[2] = {gpib_device, NOADDR}; - - SendIFC(gpib_board); - - // ENABLE all on GPIB bus - EnableRemote(gpib_board, addlist); - // If error, Bye! - if (ibsta & ERR) - { - error("gpib_send: Instrument enable failed!"); - return octave_value_list(); - } - - Send(gpib_board, gpib_device, gpib_string.c_str(), strlen(gpib_string.c_str()), NLend); - if (ibsta & ERR) - { - error("gpib_send: Send failed!"); - return octave_value_list(); - } - - return octave_value_list(); - -} diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/launch_gpib.sh b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/launch_gpib.sh deleted file mode 100644 index 7022d7e7b9..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/launch_gpib.sh +++ /dev/null @@ -1,4 +0,0 @@ -modprobe ni_usb_gpib -fxload -D /proc/bus/usb/004/003 -I /usr/local/share/linux-gpib-3.2.11/gpib_firmware-2008-08-10/ni_gpib_usb_b/niusbb_firmware.hex -s /usr/local/share/linux-gpib-3.2.11/gpib_firmware-2008-08-10/ni_gpib_usb_b/niusbb_loader.hex -gpib_config -chmod a+rw /dev/gpib0 diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/limeparms.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/limeparms.m deleted file mode 100644 index 21be573634..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/limeparms.m +++ /dev/null @@ -1,75 +0,0 @@ -RXEN=1; -TXEN=2; - -TXLPFENMASK=4; -TXLPFEN=4; - - -TXLPFMASK =15*(2^3); -TXLPF14 =0; -TXLPF10 =1*(2^3); -TXLPF7 =2*(2^3); -TXLPF6 =3*(2^3); -TXLPF5 =4*(2^3); -TXLPF4375 =5*(2^3); -TXLPF35 =6*(2^3); -TXLPF3 =7*(2^3); -TXLPF275 =8*(2^3); -TXLPF25 =9*(2^3); -TXLPF192 =10*(2^3); -TXLPF15 =11*(2^3); -TXLPF1375 =12*(2^3); -TXLPF125 =13*(2^3); -TXLPF0875 =14*(2^3); -TXLPF075 =15*(2^3); -RXLPFENMASK=1*(2^7); -RXLPFEN =128; -RXLPFMASK =15*(2^8); -RXLPF14 =0; -RXLPF10 =1*(2^8); -RXLPF7 =2*(2^8); -RXLPF6 =3*(2^8); -RXLPF5 =4*(2^8); -RXLPF4375 =5*(2^8); -RXLPF35 =6*(2^8); -RXLPF3 =7*(2^8); -RXLPF275 =8*(2^8); -RXLPF25 =9*(2^8); -RXLPF192 =10*(2^8); -RXLPF15 =11*(2^8); -RXLPF1375 =12*(2^8); -RXLPF125 =13*(2^8); -RXLPF0875 =14*(2^8); -RXLPF075 =15*(2^8); -LNAMASK=3*(2^12); -LNADIS =0; -LNA1ON =1*(2^12); -LNA2ON =2*(2^12) ; -LNA3ON =3*(2^12); -LNAGAINMASK=3*(2^14); -LNAByp =1*(2^14); -LNAMed =2*(2^14); -LNAMax =3*(2^14); - -RFBBMASK =7*(2^16); -RFBBNORM =0; -RFBBRXLPF =1*(2^16); -RFBBRXVGA =2*(2^16); -RFBBOUTPUT=3*(2^16); -RFBBLNA1 =4*(2^16); -RFBBLNA2 =5*(2^16); -RFBBLNA3 =6*(2^16); - -TXLPFMODEMASK=1*(2^21); -TXLPFNORM =0; -TXLPFBYP =1*(2^21); - -RXLPFMODEMASK=3*(2^19); -RXLPFNORM =0; -RXLPFBYP =1*(2^19); -RXLPFBPY2 =3*(2^19); - - -rf_local = 31 + 31*(2^6) + 31*(2^12) + 31*(2^18); -rf_rxdc = 128 + 128*(2^8) -rf_vcocal = ((0xE)*(2^6)) + (0xE); diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_common.c b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_common.c deleted file mode 100644 index 2667429d0c..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_common.c +++ /dev/null @@ -1,655 +0,0 @@ -// Maxime Guillaud - Created Fri May 12 16:06:53 CEST 2006 -// this files gathers the various functions used to control the openair RF interface -// it is equivalent to the openair_readconfigfile.c and openair_configure.c of the config/ directory - - - - -// Structures shared by various functions in this file -PHY_CONFIG PHY_config_mem; -PHY_CONFIG *PHY_config; -FILE *config, *scenario; - -PHY_FRAMING phyFraming[MAX_CFG_SECTIONS]; -PHY_CHBCH phyCHBCH[MAX_CFG_SECTIONS]; -PHY_CHSCH phyCHSCH[MAX_CFG_SECTIONS]; -PHY_SCH phySCH[MAX_CFG_SECTIONS]; -PHY_SACH phySACH[MAX_CFG_SECTIONS]; - -const cfg_Action Action[] = { - {"PHY_FRAMING", phyFraming_ProcessInitReq}, // to do some manipulation of the raw data - {"PHY_CHSCH", phyCHSCH_ProcessInitReq}, - {"PHY_SCH", phySCH_ProcessInitReq}, - {"PHY_CHBCH", phyCHBCH_ProcessInitReq}, - {"PHY_SACH", phySACH_ProcessInitReq} -}; - -const cfg_Section Section[]= { - {"PHY_FRAMING", cfg_readPhyFraming}, - {"PHY_CHBCH", cfg_readPhyCHBCH}, - {"PHY_CHSCH", cfg_readPhyCHSCH}, - {"PHY_SCH", cfg_readPhySCH}, - {"PHY_SACH", cfg_readPhySACH} -}; - - - -void -dump_config() -{ - - int i; - FILE *fid; - - msg("[openair][CONFIG] Dumping Config\n\n"); - msg("[openair][CONFIG] PHY_FRAMING\n"); - msg("[openair][CONFIG] -----------\n"); - msg("[openair][CONFIG] fc = %d kHz\n",PHY_config->PHY_framing.fc_khz); - msg("[openair][CONFIG] fs = %d kHz\n",PHY_config->PHY_framing.fs_khz); - msg("[openair][CONFIG] Nsymb= %d\n",PHY_config->PHY_framing.Nsymb); - msg("[openair][CONFIG] Nd= %d\n",PHY_config->PHY_framing.Nd); - msg("[openair][CONFIG] log2Nd= %d\n",PHY_config->PHY_framing.log2Nd); - msg("[openair][CONFIG] Nc= %d\n",PHY_config->PHY_framing.Nc); - msg("[openair][CONFIG] Nz= %d\n",PHY_config->PHY_framing.Nz); - msg("[openair][CONFIG] Nf= %d\n",PHY_config->PHY_framing.Nf); - - switch (PHY_config->PHY_framing.Extension_type) { - - case CYCLIC_SUFFIX: - msg("[openair][CONFIG] Extension= CYCLIC_SUFFIX \n"); - break; - - case CYCLIC_PREFIX: - msg("[op`enair][CONFIG] Extension= CYCLIC_PREFIX \n"); - break; - - case ZEROS: - msg("[openair][CONFIG] Extension= ZEROS\n"); - break; - - default: - msg("[openair][CONFIG] Extension= CYCLIC_SUFFIX\n"); - break; - } - - msg("[openair][CONFIG]\n"); - msg("[openair][CONFIG] PHY_CHSCH\n"); - msg("[openair][CONFIG] -----------\n"); - msg("[openair][CONFIG] symbol = %d\n",PHY_config->PHY_chsch[0].symbol); - msg("[openair][CONFIG] Nsymb= %d\n",PHY_config->PHY_chsch[0].Nsymb); - msg("[openair][CONFIG] dd_offset= %d\n",PHY_config->PHY_chsch[0].dd_offset); - - for (i=0; i<32; i++) { - msg("[openair][CONFIG] chsch_seq_re[%d]= %x\n",i,PHY_config->PHY_chsch[0].chsch_seq_re[i]); - msg("[openair][CONFIG] chsch_seq_im[%d]= %x\n",i,PHY_config->PHY_chsch[0].chsch_seq_im[i]); - } - - msg("[openair][CONFIG] CHSCH_POWER= %d dBm\n",PHY_config->PHY_chsch[0].CHSCH_POWER_dBm); - - msg("[openair][CONFIG]\n"); - msg("[openair][CONFIG] PHY_CHBCH\n"); - msg("[openair][CONFIG] -----------\n"); - msg("[openair][CONFIG] symbol = %d\n",PHY_config->PHY_chbch[0].symbol); - msg("[openair][CONFIG] Nsymb= %d\n",PHY_config->PHY_chbch[0].Nsymb); - msg("[openair][CONFIG] IntDepth= %d\n",PHY_config->PHY_chbch[0].IntDepth); - msg("[openair][CONFIG] dd_offset= %d\n",PHY_config->PHY_chbch[0].dd_offset); - msg("[openair][CONFIG] Npilot= %d\n",PHY_config->PHY_chbch[0].Npilot); - - for (i=0; i<8; i++) { - msg("[openair][CONFIG] pilot_re[%d]= %x\n",i,PHY_config->PHY_chbch[0].pilot_re[i]); - msg("[openair][CONFIG] pilot_im[%d]= %x\n",i,PHY_config->PHY_chbch[0].pilot_im[i]); - } - - msg("[openair][CONFIG] FreqReuse= %d\n",PHY_config->PHY_chbch[0].FreqReuse); - msg("[openair][CONFIG] FreqReuse_ind= %d\n",PHY_config->PHY_chbch[0].FreqReuse_ind); - msg("[openair][CONFIG] CHBCH_POWER= %d dBm\n",PHY_config->PHY_chbch[0].CHBCH_POWER_dBm); - - - -} - - -int -reconfigure_MACPHY(FILE* scenario) -{ - - FILE *inscenario=scenario; - int cfgNumber, ActionIndex; - char LineBuffer[MAX_LINE_SIZE]; - char ActionName[MAX_ACTION_NAME_SIZE]; - - /*!< \brief Reading or opening the scenario*/ - - - loadConfig(); - - while ( fgets(LineBuffer, MAX_LINE_SIZE, inscenario) != NULL ) { - printf("[CONFIG] : %s\n",LineBuffer); - - if ( sscanf(LineBuffer, "%s %d", ActionName, &cfgNumber) != 2) { - msg("[CONFIG] Parse Error: \"%s\" \n", LineBuffer); - continue; - } - - for (ActionIndex=0; ActionIndex <6; ActionIndex++) { //sizeof(Action)/sizeof(cfg_Action); ActionIndex++) - - if (strcmp(ActionName, Action[ActionIndex].ActionName) == 0) { - Action[ActionIndex].Func(cfgNumber); - break; - } - } - - if (ActionIndex == 6)//(sizeof(Action)/sizeof(cfg_Action) == ActionIndex) - msg("[CONFIG] Unknown <%s> Action! \n", ActionName); - } - - fclose(inscenario); - - return 1; -} - - -int -phyFraming_ProcessInitReq (int cfgNumber) -{ - PHY_FRAMING *phyframing_processinitreq; - phyframing_processinitreq = cfg_getPhyFraming(cfgNumber); - - if(phyframing_processinitreq != NULL) { - memcpy((void *)&PHY_config->PHY_framing,phyframing_processinitreq,sizeof(PHY_FRAMING)); -#ifdef TRACE - msg("[CONFIG] PHY_FRAMING configuration completed!\n"); -#endif - } else - msg("[CONFIG FRAMING] The config number <%d> is not loaded.\n", cfgNumber); - - return cfgNumber; -} - - - - - - -void -loadConfig (void) -{ - int SectionIndex; - int cfgNumber; - char SectionName[MAX_SECTION_NAME_SIZE]; - char LineBuffer[MAX_LINE_SIZE]; - - - while ( (fgets (LineBuffer, MAX_LINE_SIZE, config)) != NULL) { - if (LineBuffer[0] != '[') - continue; - - if (sscanf(LineBuffer, "[%s %d]", SectionName, &cfgNumber) != 2) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - continue; - } - - for (SectionIndex=0; SectionIndex < 5; SectionIndex++) { //sizeof(Section)/sizeof(cfg_Section) ; SectionIndex++) - if ( strcmp(SectionName,Section[SectionIndex].SectionName) == 0) { - Section[SectionIndex].Func(config, cfgNumber); - break; - } - } - - if (SectionIndex == 5)//(sizeof(Section)/sizeof(cfg_Section) == SectionIndex) - msg("[CONFIG] Unknown <%s> section!\n", SectionName); - } - - msg("[CONFIG] loadConfig done.\n"); -} - - -void -cfg_readPhyFraming (FILE* config, int cfgNumber) -{ - char LineBuffer[MAX_LINE_SIZE]; - - if( cfgNumber >= MAX_CFG_SECTIONS ) { - msg("[CONFIG] %d outrang number of sections\n", cfgNumber); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf(LineBuffer, "fc_khz: %lu", &phyFraming[cfgNumber].fc_khz ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].fc_khz); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "fs_khz: %lu", &phyFraming[cfgNumber].fs_khz ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].fs_khz); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nsymb: %hu", &phyFraming[cfgNumber].Nsymb ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].Nsymb); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nd: %hu", &phyFraming[cfgNumber].Nd ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].Nd); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "log2Nd: %hu", &phyFraming[cfgNumber].log2Nd ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].log2Nd); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nc: %hu", &phyFraming[cfgNumber].Nc ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].Nc); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nz: %hu", &phyFraming[cfgNumber].Nz ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].Nz); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nf: %hu", &phyFraming[cfgNumber].Nf ) !=1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - //msg("[CONFIG] %s (%d)\n",LineBuffer,phyFraming[cfgNumber].Nf); - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Extension_type: %hu", &phyFraming[cfgNumber].Extension_type ) !=1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - msg("[CONFIG FRAMING] : Done\n"); -} - - -PHY_FRAMING *cfg_getPhyFraming(int cfgNumber) -{ - if (cfgNumber < MAX_CFG_SECTIONS) - return &phyFraming[cfgNumber]; - else { - msg("[CONFIG] Outrange config number <%d>.\n", cfgNumber); - return NULL; //exit(1)?? - } -} - - -void -cfg_readPhyCHBCH(FILE* config, int cfgNumber) -{ - char LineBuffer[MAX_LINE_SIZE]; - char temp_string[32]; - char i; - - if( cfgNumber >= MAX_CFG_SECTIONS ) { - msg("[CONFIG CHBCH] %d outrang number of sections\n", cfgNumber); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf(LineBuffer, "symbol: %hu", &phyCHBCH[cfgNumber].symbol ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nsymb: %hu", &phyCHBCH[cfgNumber].Nsymb ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets( LineBuffer, MAX_LINE_SIZE, config ); - - if( sscanf( LineBuffer, "IntDepth: %hu", &phyCHBCH[cfgNumber].IntDepth ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "dd_offset: %hu", &phyCHBCH[cfgNumber].dd_offset ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets( LineBuffer, MAX_LINE_SIZE, config ); - - if( sscanf( LineBuffer, "Npilot: %hu", &phyCHBCH[cfgNumber].Npilot ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - for (i=0; i<8; i++) { - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"pilot_re[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phyCHBCH[cfgNumber].pilot_re[i] ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"pilot_im[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phyCHBCH[cfgNumber].pilot_im[i] ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "FreqReuse: %hu", &phyCHBCH[cfgNumber].FreqReuse ) !=1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "FreqReuse_Ind: %hu", &phyCHBCH[cfgNumber].FreqReuse_ind ) !=1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "CHBCH_POWER_dBm: %d", &phyCHBCH[cfgNumber].CHBCH_POWER_dBm ) != 1) { - msg("[CONFIG CHBCH] Parse Error: \"%s\"\n", LineBuffer); - } - - msg("[CONFIG CHBCH]: Done\n"); -} - - -PHY_CHBCH *cfg_getPhyCHBCH(int cfgNumber) -{ - if ( cfgNumber < MAX_CFG_SECTIONS ) - return &phyCHBCH[cfgNumber]; - else { - msg("[CONFIG CHBCH] Outrange config number <%d>.\n", cfgNumber); - return NULL; //exit(1)?? - } -} - -void -cfg_readPhySCH(FILE* config, int cfgNumber) -{ - char LineBuffer[MAX_LINE_SIZE]; - char temp_string[32]; - int i; - - if( cfgNumber >= MAX_CFG_SECTIONS ) { - msg("[SCH CONFIG] %d outrang number of sections\n", cfgNumber); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nsymb: %hu", &phySCH[cfgNumber].Nsymb ) != 1) { - msg("[SCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "dd_offset: %lu", &phySCH[cfgNumber].dd_offset ) != 1) { - msg("[SCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - for (i=0; i<32; i++) { - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"sch_seq_re[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phySCH[cfgNumber].sch_seq_re[i] ) != 1) { - msg("[SCH CONFIG] %d: Parse Error: \"%s\"\n (%s)", cfgNumber,LineBuffer,temp_string); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"sch_seq_im[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phySCH[cfgNumber].sch_seq_im[i] ) != 1) { - msg("[SCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - } - - fgets( LineBuffer, MAX_LINE_SIZE, config ); - - if( sscanf( LineBuffer, "SCH_POWER_dBm: %d", &phySCH[cfgNumber].SCH_POWER_dBm ) != 1) { - msg("[SCH CONFIG] %d:Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - msg("[CONFIG SCH]: Done\n"); -} - -PHY_SCH* cfg_getPhySCH(int cfgNumber) -{ - if ( cfgNumber < MAX_CFG_SECTIONS ) - return &phySCH[cfgNumber]; - else { - msg("[CONFIG] Outrange config number <%d>.\n", cfgNumber); - return NULL; //exit(1)?? - } -} - -void -cfg_readPhyCHSCH(FILE* config, int cfgNumber) -{ - char LineBuffer[MAX_LINE_SIZE]; - char temp_string[32]; - int i; - - if( cfgNumber >= MAX_CFG_SECTIONS ) { - msg("[CHSCH CONFIG] %d outrang number of sections\n", cfgNumber); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf(LineBuffer, "symbol: %hu", &phyCHSCH[cfgNumber].symbol ) != 1) { - msg("[CHSCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "Nsymb: %hu", &phyCHSCH[cfgNumber].Nsymb ) != 1) { - msg("[CHSCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - if( sscanf( LineBuffer, "dd_offset: %lu", &phyCHSCH[cfgNumber].dd_offset ) != 1) { - msg("[CHSCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - for (i=0; i<32; i++) { - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"chsch_seq_re[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phyCHSCH[cfgNumber].chsch_seq_re[i] ) != 1) { - msg("[CHSCH CONFIG] %d: Parse Error: \"%s\"\n (%s)", cfgNumber,LineBuffer,temp_string); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"chsch_seq_im[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phyCHSCH[cfgNumber].chsch_seq_im[i] ) != 1) { - msg("[CHSCH CONFIG] %d: Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - } - - fgets( LineBuffer, MAX_LINE_SIZE, config ); - - if( sscanf( LineBuffer, "CHSCH_POWER_dBm: %d", &phyCHSCH[cfgNumber].CHSCH_POWER_dBm ) != 1) { - msg("[CHSCH CONFIG] %d:Parse Error: \"%s\"\n", cfgNumber,LineBuffer); - } - - msg("[CONFIG CHSCH]: Done\n"); -} - - -PHY_CHSCH* cfg_getPhyCHSCH(int cfgNumber) -{ - if ( cfgNumber < MAX_CFG_SECTIONS ) - return &phyCHSCH[cfgNumber]; - else { - msg("[CONFIG] Outrange config number <%d>.\n", cfgNumber); - return NULL; //exit(1)?? - } -} - - -void -cfg_readPhySACH(FILE* config, int cfgNumber) -{ - char LineBuffer[MAX_LINE_SIZE]; - char temp_string[32]; - int i; - - if( cfgNumber >= MAX_CFG_SECTIONS ) { - msg("[CONFIG] %d outrang number of sections\n", cfgNumber); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - //msg("[CONFIG SACH] : %s\n",LineBuffer); - if( sscanf(LineBuffer, "Signal_format: %hu", &phySACH[cfgNumber].Signal_format ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - - fgets( LineBuffer, MAX_LINE_SIZE, config ); - - //msg("[CONFIG SACH] : %s\n",LineBuffer); - if( sscanf( LineBuffer, "Npilot: %hu", &phySACH[cfgNumber].Npilot ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - for (i=0; i<8; i++) { - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"pilot_re[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phySACH[cfgNumber].pilot_re[i] ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - sprintf(temp_string,"pilot_im[%d]: %%x",i); - - if( sscanf( LineBuffer,temp_string, &phySACH[cfgNumber].pilot_im[i] ) != 1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - - } - - fgets(LineBuffer, MAX_LINE_SIZE, config); - - //msg("[CONFIG SACH] : %s\n",LineBuffer); - if( sscanf( LineBuffer, "SACH_POWER_dBm: %d", &phySACH[cfgNumber].SACH_POWER_dBm ) !=1) { - msg("[CONFIG] Parse Error: \"%s\"\n", LineBuffer); - } - -} - - -PHY_SACH *cfg_getPhySACH(int cfgNumber) -{ - if ( cfgNumber < MAX_CFG_SECTIONS ) - return &phySACH[cfgNumber]; - else { - msg("[CONFIG ] Outrange config number <%d>.\n", cfgNumber); - return NULL; //exit(1)?? - } -} - - -int -phyCHBCH_ProcessInitReq (int cfgNumber) -{ - - PHY_CHBCH *phychbch_processinitreq; - - phychbch_processinitreq = cfg_getPhyCHBCH(cfgNumber); - - if (phychbch_processinitreq != NULL) { - memcpy((void *)&PHY_config->PHY_chbch,phychbch_processinitreq,sizeof(PHY_CHBCH)); -#ifdef TRACE - msg("[CONFIG] PHY_CHBCH configuration completed!\n"); -#endif - } else - msg("[CONFIG CHBCH ] The config number <%d> is not loaded.\n", cfgNumber); - - return cfgNumber; -} - -int -phySCH_ProcessInitReq (int cfgNumber) -{ - PHY_SCH *physch_processinitreq; - physch_processinitreq = cfg_getPhySCH(cfgNumber); - - if (physch_processinitreq != NULL) { - memcpy(&PHY_config->PHY_sch[0],physch_processinitreq,sizeof(PHY_SCH)); - -#ifdef TRACE - printf("[CONFIG] PHY_SCH configuration completed!\n"); -#endif TRACE - } else - msg("[CONFIG SCH] The config number <%d> is not loaded.\n", cfgNumber); - - return cfgNumber; -} - -int -phySACH_ProcessInitReq (int cfgNumber) -{ - PHY_SACH *physach_processinitreq; - physach_processinitreq = cfg_getPhySACH(cfgNumber); - - if (physach_processinitreq != NULL) { - memcpy((void *)&PHY_config->PHY_sach,physach_processinitreq,sizeof(PHY_SACH)); - -#ifdef TRACE - msg("[CONFIG] PHY_SACH configuration completed!\n"); -#endif TRACE - } else - msg("[CONFIG SACH] The config number <%d> is not loaded.\n", cfgNumber); - - return cfgNumber; -} - -int -phyCHSCH_ProcessInitReq (int cfgNumber) -{ - PHY_CHSCH *phychsch_processinitreq; - phychsch_processinitreq = cfg_getPhyCHSCH(cfgNumber); - - if (phychsch_processinitreq != NULL) { - memcpy(&PHY_config->PHY_chsch[0],phychsch_processinitreq,sizeof(PHY_CHSCH)); - -#ifdef TRACE - printf("[CONFIG] PHY_CHSCH configuration completed!\n"); -#endif - } else - msg("[CONFIG CHSCH] The config number <%d> is not loaded.\n", cfgNumber); - - return cfgNumber; -} - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_config.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_config.cc deleted file mode 100644 index fb12144242..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_config.cc +++ /dev/null @@ -1,154 +0,0 @@ - -// Maxime Guillaud - created Thu May 11 17:19:25 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -extern "C" { -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/impl_defs_lte.h" - //#include "PHY/extern.h" - //#include "PHY/CONFIG/defs.h" - //#include "PHY/CONFIG/extern.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -//#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -} -//#include "PHY/vars.h" -//#include "PHY/CONFIG/vars.h" - -//#include "oarf_common.c" - -#define FCNNAME "oarf_config" - -#define TRACE 1 - -//PHY_CONFIG PHY_config_mem; - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v,w; - - if (args.length()!=4) - { - error(FCNNAME); - error("syntax: oarf_config(freqband,tdd,dual_tx,tdd_config)"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 6.0)) - { - error(FCNNAME); - error("freqband must be 0-5"); - return true; - } - - if ((!args(1).is_real_scalar()))// || (args(1).scalar_value()!=0.0) || (args(1).scalar_value()!=1.0)) - { - error(FCNNAME); - error("tdd must be 0 or 1."); - return true; - } - - if ((!args(2).is_real_scalar()))// || (args(2).scalar_value()!=0.0) || (args(2).scalar_value()!=1.0)) - { - error(FCNNAME); - error("dual_tx must be 0 or 1."); - return true; - } - - if ((!args(3).is_real_scalar()) || (args(3).scalar_value()<0.0) || (args(3).scalar_value()>255.0)) - { - error(FCNNAME); - error("dual_tx must be 0-9, 254=RX only or 255=TX only."); - return true; - } - return false; -} - - - - - - - - -DEFUN_DLD (oarf_config, args, nargout,"configure the openair interface - returns 0 if successful") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - const uint freq = args(0).int_value(); - //const std::string configfile = args(1).string_value(); - //const std::string scenariofile = args(2).string_value(); - const int tdd = args(1).int_value(); - const int dual_tx = args(2).int_value(); - const int tdd_config = args(3).int_value(); - - octave_value returnvalue; - int openair_fd; - - LTE_DL_FRAME_PARMS *frame_parms; - - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - /* - if((config = fopen(configfile.c_str(),"r")) == NULL) - { - error(FCNNAME); - error("configuration file could not be opened!"); - return octave_value_list(); - } - - if((scenario = fopen(scenariofile.c_str(),"r")) == NULL) // this file is closed by function reconfigure_MACPHY of oarf_common.c - { - error(FCNNAME); - error("scenario file could not be opened!"); - return octave_value_list(); - } - - PHY_config = (PHY_CONFIG *)&PHY_config_mem; - reconfigure_MACPHY(scenario); - fclose(config); - */ - - frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS)); - frame_parms->N_RB_DL = 25; - frame_parms->N_RB_UL = 25; - frame_parms->Ncp = 1; - frame_parms->Nid_cell = 0; - frame_parms->nushift = 0; - frame_parms->nb_antennas_tx = NB_ANTENNAS_TX; - frame_parms->nb_antennas_rx = NB_ANTENNAS_RX; - frame_parms->mode1_flag = 1; //default == SISO - frame_parms->tdd_config = tdd_config; - frame_parms->dual_tx = dual_tx; - frame_parms->frame_type = TDD; - frame_parms->freq_idx = freq; - - init_frame_parms(frame_parms,1); - dump_frame_parms(frame_parms); - - returnvalue=ioctl(openair_fd, openair_DUMP_CONFIG,(char *)frame_parms); - - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_frame.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_frame.cc deleted file mode 100644 index 5aaeec3279..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_frame.cc +++ /dev/null @@ -1,206 +0,0 @@ - -// Maxime Guillaud - created Fri May 12 16:20:04 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile -// Update: Wed May 23 17:25:39 CEST 2007, fifo acquisition of signal buffer (RK) - - -#include -#include -#include -#include - -extern "C" { -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/impl_defs_lte.h" -#include "ARCH/COMMON/defs.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -} -#include "PHY/vars.h" - -#define FCNNAME "oarf_get_frame" - -#define TRACE 1 - -//extern PHY_CONFIG *PHY_config; - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=1) - { - error(FCNNAME); - error("syntax: oarf_get_frame(freqband)\n freqband in 0-5."); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 6.0)) - { - error(FCNNAME); - error("freqband must be 0-5."); - return true; - } - - return false; -} - - - - - - - - -DEFUN_DLD (oarf_get_frame, args, nargout,"Get frame (Action 5)") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - const int freq = args(0).int_value(); - - octave_value returnvalue; - int openair_fd,i,aa,rx_sig_fifo_fd,rf_cntl_fifo_fd; - unsigned int length;//mem_base; - short *rx_sig[4]; - int fc; - - //PHY_VARS *PHY_vars; - //PHY_CONFIG *PHY_config; - - //PHY_vars = (PHY_VARS *)malloc(sizeof(PHY_VARS)); - //PHY_config = (PHY_CONFIG *)malloc(sizeof(PHY_CONFIG)); - - TX_RX_VARS dummy_tx_rx_vars; - LTE_DL_FRAME_PARMS *frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS)); - - unsigned int bigphys_top; - unsigned int mem_base; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } -#ifdef CBMIMO1 - if ((rx_sig_fifo_fd = open("/dev/rtf59", O_RDONLY,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/rtf59"); - return octave_value_list(); - } - - if ((rf_cntl_fifo_fd = open("/dev/rtf60", O_RDONLY,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/rtf60"); - return octave_value_list(); - } -#endif - /* - printf("Getting PHY_vars ...\n"); - - ioctl(openair_fd,openair_GET_VARS,PHY_vars); - - //printf("Getting PHY_vars->tx_vars[0].TX_DMA_BUFFER=%p\n",PHY_vars->tx_vars[0].TX_DMA_BUFFER); - //printf("Getting PHY_vars->rx_vars[0].RX_DMA_BUFFER = %p\n",PHY_vars->rx_vars[0].RX_DMA_BUFFER); - */ - - // printf("Getting PHY_config ...\n"); - - ioctl(openair_fd,openair_GET_CONFIG,frame_parms); - - // dump_frame_parms(frame_parms); - - ComplexMatrix dx (FRAME_LENGTH_COMPLEX_SAMPLES,frame_parms->nb_antennas_rx); - - /* - // version using FIFO - short dma_buffer_local[2*NB_ANTENNAS_RX*FRAME_LENGTH_COMPLEX_SAMPLES]; - - // Flush RX sig fifo - ((unsigned int *)&dma_buffer_local[0])[0] = 1 | ((freq&7)<<1) | ((freq&7)<<4); - ioctl(openair_fd,openair_GET_BUFFER,(void *)dma_buffer_local); - - // wait for indication from RT process that a new frame is ready - read(rf_cntl_fifo_fd,(void *)dma_buffer_local,4); - printf("Sched count %d\n",((int *)dma_buffer_local)[0]); - - length = read(rx_sig_fifo_fd,(void *)dma_buffer_local,NB_ANTENNAS_RX*FRAME_LENGTH_BYTES); - printf("Got %d bytes from sig fifo\n",length); - - for (i=0;inb_antennas_rx;i++) - rx_sig[i] = (short *)(mem_base + (unsigned int)dummy_tx_rx_vars.RX_DMA_BUFFER[i]-bigphys_top); - - - fc=0; - // msg("Getting buffer...\n"); - ioctl(openair_fd,openair_GET_BUFFER,(void *)&fc); - -#ifdef CBMIMO1 - sleep(1); -#endif - - for (i=0;inb_antennas_rx;aa++) - dx(i,aa)=Complex( rx_sig[aa][i*2], rx_sig[aa][i*2+1] ); - - close(openair_fd); - - munmap((void*)mem_base, BIGPHYS_NUMPAGES*4096); - - //close(rx_sig_fifo_fd); - //close(rf_cntl_fifo_fd); - - //free(PHY_vars); - //free(PHY_config); - free(frame_parms); - - return octave_value (dx); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_rtframe.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_rtframe.cc deleted file mode 100644 index 1deb35a4fa..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_get_rtframe.cc +++ /dev/null @@ -1,157 +0,0 @@ - -// Maxime Guillaud - created Fri May 12 16:20:04 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -extern "C" { -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/extern.h" -#include "PHY/CONFIG/defs.h" -#include "PHY/CONFIG/extern.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -} - -#include - -//#include - - -//#include "config_vars.h" -#include "chansounder_defs.h" - - -//#include "oarf_common.c" - -#define FCNNAME "oarf_get_rtframe" - - -#define SLOTS_PER_FRAME 4 -#define FRAME_LENGTH_COMPLEX_SAMPLES (OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*SLOTS_PER_FRAME) - -extern PHY_CONFIG *PHY_config; - - -typedef struct /* this shouldn't be here, but including mac_defs.h screws up the macros defining the symbol/slot/frame length :-( */ -{ - int registers; - void *params_ptr; - int params_size; -} MACPHY_PARAMS; - - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=1) - { - error(FCNNAME); - error("syntax: oarf_get_rtframe(freqband)\n freqband in 0-3."); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 3.0)) - { - error(FCNNAME); - error("freqband must be 0, 1, 2, or 3."); - return true; - } - - return false; -} - - - - - - - - -DEFUN_DLD (oarf_get_rtframe, args, nargout,"Get frame through RT mode (Action 20)") -{ - MACPHY_PARAMS MACPHY_params; - CHANSOUNDER_PARAMS CHANSOUNDER_params; - int result, slot, openair_fifo_fd; - char *signalbuffer; - - if (any_bad_argument(args)) - return octave_value_list(); - - const int freq = args(0).int_value(); - - octave_value returnvalue; - int openair_fd,i; - - ComplexMatrix dx (FRAME_LENGTH_COMPLEX_SAMPLES,nb_rx); - char buffer_local[4*FRAME_LENGTH_COMPLEX_SAMPLES+sizeof(long long)]; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - - - CHANSOUNDER_params.slot_cyclelength=10000; - CHANSOUNDER_params.slot_save=SLOTS_PER_FRAME; - - MACPHY_params.registers=((freq&3)<<1) | ((freq&3)<<3); - MACPHY_params.params_ptr=&CHANSOUNDER_params; - MACPHY_params.params_size=sizeof(CHANSOUNDER_params); - - result=ioctl(openair_fd,openair_START_CHANSOUNDER,&MACPHY_params); -// printf("start sounder ioctl result=%d, sleeping\n",result); - - usleep(20000); // sleep for 20 ms - - CHANSOUNDER_params.slot_save=0; - result=ioctl(openair_fd,openair_START_CHANSOUNDER,&MACPHY_params); -// printf("start sounder with slot_save=0, ioctl result=%d, reading fifo\n",result); - -// result=ioctl(openair_fd,openair_STOP,NULL); // do not stop sounder since doing it too many times crashes RTAI. - - close(openair_fd); - - - openair_fifo_fd=open("/dev/rtf3",O_RDONLY); - if (openair_fifo_fd==-1) - { - printf("Can not open openair FIFO (/dev/rtf3), load kernel modules first !\n"); - return octave_value_list(); - } - - for (slot=0;slot -#include -#include -#include - -extern "C" { -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/impl_defs_lte.h" -#include "ARCH/COMMON/defs.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -} -#include "PHY/vars.h" - -#define FCNNAME "oarf_send_frame" - -#define TRACE 1 - -//extern PHY_CONFIG *PHY_config; - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=3) - { - error(FCNNAME); - error("syntax: oarf_send_frame(freqband,sig,nbits)\n freqband in 0-3, sig is a 2D vector, nbits is number of bits to quantize the signal to."); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 3.0)) - { - error(FCNNAME); - error("freqband must be 0, 1, 2, or 3."); - return true; - } - - v=args(1); - printf("signal: R %d, C %d\n",v.rows(),v.columns()); - return false; - - v=args(2); - if ((!v.is_real_scalar()) || (v.scalar_value()!=8) || (v.scalar_value()!=16)) { - error(FCNNAME); - error("nbits must be either 8 (CBMIMO) or 16 (ExpressMIMO)bits."); - return true; - } -} - - -DEFUN_DLD (oarf_send_frame, args, nargout,"Send frame") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - //const int freq = args(0).int_value(); - ComplexMatrix dx = args(1).complex_matrix_value(); - - octave_value returnvalue; - int openair_fd,i; - unsigned int length,aa,nbits; - int dummy=0; - - LTE_DL_FRAME_PARMS *frame_parms = (LTE_DL_FRAME_PARMS*) malloc(sizeof(LTE_DL_FRAME_PARMS)); - - TX_VARS *TX_vars = (TX_VARS*) malloc(sizeof(TX_VARS)); - TX_RX_VARS dummy_tx_rx_vars; - - unsigned int bigphys_top; - unsigned int mem_base; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - printf("Getting PHY_config 1 ...\n"); - - ioctl(openair_fd,openair_GET_CONFIG,frame_parms); - - dump_frame_parms(frame_parms); - - printf("colums = %d, rows = %d\n\n\n", args(1).columns(), args(1).rows()); - - if ((args(1).columns()!=NB_ANTENNAS_TX) || (args(1).rows()!=76800)) - { - error(FCNNAME); - error("input array must be of size (%d,%d)",76800,NB_ANTENNAS_TX); - return octave_value_list(); - } - - nbits = args(2).scalar_value(); - - // ioctl(openair_fd,openair_STOP,(void*)&dummy); - - // version using mmap - ioctl(openair_fd,openair_GET_VARS,(void* )&dummy_tx_rx_vars); - ioctl(openair_fd,openair_GET_BIGPHYSTOP,(void *)&bigphys_top); - - if (dummy_tx_rx_vars.TX_DMA_BUFFER[0]==NULL) { - close(openair_fd); - error(FCNNAME); - error("pci_buffers not allocated"); - return octave_value_list(); - } - /* - printf("BIGPHYS top 0x%x\n",bigphys_top); - printf("RX_DMA_BUFFER[0] %p\n",dummy_tx_rx_vars.RX_DMA_BUFFER[0]); - printf("TX_DMA_BUFFER[0] %p\n",dummy_tx_rx_vars.TX_DMA_BUFFER[0]); - */ - mem_base = (unsigned int)mmap(0, - BIGPHYS_NUMPAGES*4096, - PROT_WRITE, - MAP_SHARED, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %p\n",(void*) mem_base); - else { - error(FCNNAME); - error("Could not map physical memory"); - return octave_value_list(); - } - - - - for (aa=0;aaTX_DMA_BUFFER[aa] = (char*) malloc(2*76800); - TX_vars->TX_DMA_BUFFER[aa] = (char *)(mem_base + (unsigned int)dummy_tx_rx_vars.TX_DMA_BUFFER[aa]-bigphys_top); - - if (nbits==16) { - for (i=0;i<76800;i++) { - if (i<64) - printf("%d: %d,%d\n",i,(short)real(dx(i,aa)),(short)imag(dx(i,aa))); - ((short*) TX_vars->TX_DMA_BUFFER[aa])[2*i] = (short)(real(dx(i,aa))); - ((short*) TX_vars->TX_DMA_BUFFER[aa])[1+(2*i)] = (short)(imag(dx(i,aa))); - } - } - else if (nbits==8) { - for (i=0;i<76800;i++) { - if (i<64) - printf("%d: %d,%d\n",i,char(real(dx(i,aa))),char(imag(dx(i,aa)))); - ((char*) TX_vars->TX_DMA_BUFFER[aa])[2*i] = char(real(dx(i,aa))); - ((char*) TX_vars->TX_DMA_BUFFER[aa])[1+(2*i)] = char(imag(dx(i,aa))); - } - } - else { - error(FCNNAME); - error("nbits has to be 8 or 16!"); - } - } - - ioctl(openair_fd,openair_START_TX_SIG,(void *)TX_vars); - - close(openair_fd); - - munmap((void*)mem_base, BIGPHYS_NUMPAGES*4096); - - /* - for (aa=0;aaTX_DMA_BUFFER[aa]); - */ - - free(TX_vars); - free(frame_parms); - - return octave_value (dx); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_calibrated_rx_gain.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_calibrated_rx_gain.cc deleted file mode 100644 index 96bdb893da..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_calibrated_rx_gain.cc +++ /dev/null @@ -1,74 +0,0 @@ - -// Maxime Guillaud - created Fri May 12 14:55:02 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "PHY/vars.h" - -#define FCNNAME "oarf_set_calibrated_rx_gain" - -#define TRACE 1 - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=1) - { - error(FCNNAME); - error("syntax: oarf_set_calibrated_rx_gain(gain)"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255.0)) - { - error(FCNNAME); - error("gain must be >=0 and <=255."); - return true; - } - - return false; -} - - - - - - - -DEFUN_DLD (oarf_set_calibrated_rx_gain, args, nargout,"Set RX gains (Action 16) - params bool") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - unsigned int temp = args(0).int_value(); - - octave_value returnvalue; - int openair_fd; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - returnvalue=ioctl(openair_fd,openair_SET_CALIBRATED_RX_GAIN,&temp); - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_gain.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_gain.cc deleted file mode 100644 index 5791850287..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_gain.cc +++ /dev/null @@ -1,100 +0,0 @@ - -// Maxime Guillaud - created Fri May 12 14:55:02 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" - -#define FCNNAME "oarf_set_rx_gain" - -#define TRACE 1 - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=4) - { - error(FCNNAME); - error("syntax: oarf_set_rx_gain(2391_G0, 2391_G1, 9862_RX_G0,,9862_RX_G1)"); - error("Valid ranges: 2391_G0, 2391_G1: 0-255, 9862_RX_G0, 9862_RX_G1: 0-19 dB"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("2391_G0 must be an integer in 0..255."); - return true; - } - - v=args(2); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 19)) - { - error(FCNNAME); - error("9862_RX_G0 must be an integer in 0..19."); - return true; - } - - v=args(1); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("2391_G1 must be an integer in 0..255."); - return true; - } - - v=args(3); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 19)) - { - error(FCNNAME); - error("9862_RX_G1 must be an integer in 0..19."); - return true; - } - - - return false; -} - - - - - - - - -DEFUN_DLD (oarf_set_rx_gain, args, nargout,"Set RX gains (Action 7) - params 2391_G0, 2391_G1 in 0-255, 9862_RX_G0 and 9862_RX_G1 in 0-19 dB.") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - unsigned char temp[4] = {args(0).int_value(),args(1).int_value(),args(2).int_value(),args(3).int_value()}; - - octave_value returnvalue; - int openair_fd; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - returnvalue=ioctl(openair_fd,openair_SET_RX_GAIN,&temp[0]); - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_rfmode.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_rfmode.cc deleted file mode 100644 index 8eb0c9bbb8..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_rx_rfmode.cc +++ /dev/null @@ -1,75 +0,0 @@ - -// Maxime Guillaud - created Mon May 22 15:54:44 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" - -#define FCNNAME "oarf_set_rx_rfmode" - -#define TRACE 1 - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=1) - { - error(FCNNAME); - error("syntax: oarf_set_rx_rfmode(mode)"); - error("mode: (see MAXIM 2391 data sheet p. 17)"); - error(" 0: Low gain (LNA low gain, Mixer low gain) "); - error(" 1: Med gain (LNA high gain, Mixer low gain)"); - error(" 2: High gain (LNA high gain, Mixer high gain)"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 2.0)) - { - error(FCNNAME); - error("mode must be 0, 1 or 2."); - return true; - } - - return false; -} - - - - -DEFUN_DLD (oarf_set_rx_rfmode, args, nargout,"Set RX RF Mode (MAX2391 CONFIG and OPCNTRL registers - p. 17 of the data sheet) (Action 14) - mode is 0, 1 or 2.") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - unsigned int modenumber = args(0).int_value(); - - octave_value returnvalue; - int openair_fd; - - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - returnvalue=ioctl(openair_fd,openair_RX_RF_MODE,&modenumber); - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tcxo_dac.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tcxo_dac.cc deleted file mode 100644 index fe3d835ac1..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tcxo_dac.cc +++ /dev/null @@ -1,73 +0,0 @@ - -// Maxime Guillaud - created Tue Jun 27 19:31:06 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" - -#define FCNNAME "oarf_set_tcxo_dac" - - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=1) - { - error(FCNNAME); - error("syntax: oarf_set_tcxo_dac(value)"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("value must be an integer in 0..255."); - return true; - } - - return false; -} - - - - - - - - -DEFUN_DLD (oarf_set_tcxo_dac, args, nargout,"Set TCXO DAC - value in 0-255.") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - unsigned int value = args(0).int_value(); - - octave_value returnvalue; - int openair_fd; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - returnvalue=ioctl(openair_fd,openair_SET_TCXO_DAC,&value); - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tx_gain.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tx_gain.cc deleted file mode 100644 index 039647bebe..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_set_tx_gain.cc +++ /dev/null @@ -1,103 +0,0 @@ - -// Maxime Guillaud - created Mon May 15 14:54:55 CEST 2006 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "PHY/vars.h" - -#define FCNNAME "oarf_set_tx_gain" - -#define TRACE 1 - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=4) - { - error(FCNNAME); - error("syntax: oarf_set_tx_gain(2394_G0,2394_G1,9862_TX_G0,9862_TX_G1)"); - error("Valid ranges: 2394_G0, 2394_G1, 9862_TX_G0, 9862_TX_G1: 0-255"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("2394_G0 must be an integer in 0..255."); - return true; - } - - v=args(1); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("2394_G1 must be an integer in 0..255."); - return true; - } - - v=args(2); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("9862_TX_G0 must be an integer in 0..255."); - return true; - } - - v=args(3); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 255)) - { - error(FCNNAME); - error("9862_TX_G1 must be an integer in 0..255."); - return true; - } - - - return false; -} - - - - - - - - -DEFUN_DLD (oarf_set_tx_gain, args, nargout,"Set TX gains (Action 6) - params 2394_G0, 2394_G1, 9862_TX_G0 and 9862_TX_G1 in 0-255 ") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - unsigned char temp[4] = {args(0).int_value(),args(1).int_value(),args(2).int_value(),args(3).int_value()}; - - octave_value returnvalue; - int openair_fd; - - //error("fixme: oarf_set_tx_gain: check the order of the parameters as received by the kernel"); - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - returnvalue=ioctl(openair_fd,openair_SET_TX_GAIN,&temp[0]); - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_stop.cc b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_stop.cc deleted file mode 100644 index e585d29fca..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/oarf_stop.cc +++ /dev/null @@ -1,78 +0,0 @@ - -// Florian Kaltenberger - created 2010-01-22 -// see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions -// and http://wiki.octave.org/wiki.pl?CodaTutorial -// and http://octave.sourceforge.net/coda/c58.html -// compilation: see Makefile - - - -#include -#include -#include - -extern "C" { -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/impl_defs_lte.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -} -#include "PHY/vars.h" - -#define FCNNAME "oarf_stop" - -#define TRACE 1 - - - -static bool any_bad_argument(const octave_value_list &args) -{ - octave_value v; - if (args.length()!=1) - { - error(FCNNAME); - error("syntax: oarf_stop(freqband)"); - return true; - } - - v=args(0); - if ((!v.is_real_scalar()) || (v.scalar_value() < 0.0) || (floor(v.scalar_value()) != v.scalar_value()) || (v.scalar_value() > 6.0)) - { - error(FCNNAME); - error("freqband must be 0-5"); - return true; - } - - return false; -} - - - - -DEFUN_DLD (oarf_stop, args, nargout,"Stop RT acquisition and write registers.") -{ - - if (any_bad_argument(args)) - return octave_value_list(); - - unsigned int fd, frequency = args(0).int_value(); - - octave_value returnvalue; - int openair_fd; - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) - { - error(FCNNAME); - error("Error opening /dev/openair0"); - return octave_value_list(); - } - - fd = (1 | ((frequency&7)<<1) | ((frequency&7)<<4)); - returnvalue=ioctl(openair_fd,openair_STOP,(void*)&fd); - - close(openair_fd); - - return octave_value(returnvalue); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/openair_init.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/openair_init.m deleted file mode 100755 index 52c0a898c1..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/openair_init.m +++ /dev/null @@ -1,2 +0,0 @@ -oarf_config(0,"config.cfg","scenario.scn") - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/phasenoise.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/phasenoise.m deleted file mode 100644 index 72c9974853..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/phasenoise.m +++ /dev/null @@ -1,42 +0,0 @@ -s = oarf_get_frame(2); -sig0 = s(:,1); -sig1 = s(:,2); - -#sig0 = s(5000:end,1); % first channel -#sig1 = s(5000:end,2); % 2nd channel - - -bw=7.68e6; - -spec = abs(fft(sig1)).^2; -[a,b] = max(spec); -freq = (b-1)*bw/length(sig0); - -L= 1000; -W = 1; - -offset_vec = (0:L-1)*((2*W)+1); -W2 = 1+(2*W); - -window_vec = (-W : W); -pn = zeros(1,(2*L) - 1); -for i = 1:L, - pn(i+L-1) = sum(spec(offset_vec(i) + b + window_vec)); -end - -for i = 2:L, - pn(L-i+1) = sum(spec(-offset_vec(i) + b + window_vec)); -end - -pn_2 = 10*log10(pn / pn(L)) - 10*log10(W2*bw/length(sig0)); - -f = ((-L+1):(L-1))*W2*bw/length(sig0); - - -ylabel('dBc/Hz') -xlabel("f_offset (Hz)") -title("Phase Noise @ IQ output for Fc = 1912.6 + Fs/4 MHz CW input at antenna") -semilogx(f(L:(2*L - 1)),pn_2(L:(2*L -1))) - - -sum(pn*(f(2)-f(1))) diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plot_png.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plot_png.m deleted file mode 100644 index 6713e826d3..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plot_png.m +++ /dev/null @@ -1,69 +0,0 @@ -close all - -load gain_table_v2_7_800_s1 - -figure(1) -plot(ALL_gain2391,real(NF0),'r;RX0;',ALL_gain2391,real(NF1),'g;RX1;') -title('Noise Figure vs. Digital Gain (Sector 0, CBMIMO1 v2.7)') -xlabel('Digital Gain') -ylabel('Noise Figure (dB)') -print -FTimes-Roman -dpdf s0_v27_nf.pdf - -figure(2) -plot(ALL_gain2391,real(G0),'r;RX0;',ALL_gain2391,real(G1),'g;RX1;') -title('RF Gain vs. Digital Gain (Sector 0, CBMIMO1 v2.7)') -xlabel('Digital Gain') -ylabel('RF Gain (dB)') -print -dpdf s0_v27_gain.pdf - -load gain_table_v2_8_800_s2 - -figure(3) -plot(ALL_gain2391,real(NF0),'r;RX0;',ALL_gain2391,real(NF1),'g;RX1;') -title('Noise Figure vs. Digital Gain (Sector 1, CBMIMO v2.8)') -xlabel('Digital Gain') -ylabel('Noise Figure (dB)') -print -dpdf s1_v28_nf.pdf - -figure(4) -plot(ALL_gain2391,real(G0),'r;RX0;',ALL_gain2391,real(G1),'g;RX1;') -title('RF Gain vs. Digital Gain (Sector 1, CBMIMO1 v2.8)') -xlabel('Digital Gain') -ylabel('RF Gain (dB)') -print -dpdf s1_v28_gain.pdf - -load gain_table_v2_13_800_s3 - - -figure(5) -plot(ALL_gain2391,real(NF0),'r;RX0;',ALL_gain2391,real(NF1),'g;RX1;') -title('Noise Figure vs. Digital Gain (Sector 2, CBMIMO v2.13)') -xlabel('Digital Gain') -ylabel('Noise Figure (dB)') -print -dpdf s2_v213_nf.pdf - -figure(6) -plot(ALL_gain2391,real(G0),'r;RX0;',ALL_gain2391,real(G1),'g;RX1;') -title('RF Gain vs. Digital Gain (Sector 2, CBMIMO1 v2.13)') -xlabel('Digital Gain') -ylabel('RF Gain (dB)') -print -dpdf s2_v213_gain.pdf - -load gain_table_v2_3_800_ue - - -figure(7) -plot(ALL_gain2391,real(NF0),'r;RX0;',ALL_gain2391,real(NF1),'g;RX1;') -title('Noise Figure vs. Digital Gain (UE, CBMIMO v2.3)') -xlabel('Digital Gain') -ylabel('Noise Figure (dB)') -print -dpdf s2_v23_nf.pdf - -figure(8) -plot(ALL_gain2391,real(G0),'r;RX0;',ALL_gain2391,real(G1),'g;RX1;') -title('RF Gain vs. Digital Gain (UE, CBMIMO1 v2.3)') -xlabel('Digital Gain') -ylabel('RF Gain (dB)') -print -dpdf s2_v23_gain.pdf - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots.m deleted file mode 100644 index 757ae4ce3b..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots.m +++ /dev/null @@ -1,48 +0,0 @@ - -closeplot -figure(1) - - -gain2391=70; gain9862=0; -for rxrfmode=0:2 - i=find( (m(:,2)==gain2391) & (m(:,3)==gain9862) & (m(:,4)==rxrfmode)); - plot(m(i,1),m(i,5:8)) - pause -end - - -gain2391=70; rxrfmode=1; -for gain9862=0:5:15 - i=find((m(:,2)==gain2391) & (m(:,3)==gain9862) & (m(:,4)==rxrfmode)); - plot(m(i,1),m(i,5:8)) - pause -end - - - - -rxrfmode=1; power_dBm=-70; -i=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); - plot(m(i,1),m(i,5:8)) - pause -end - - - -power_dBm=-90; - -subplot(1,3,1) -rxrfmode=0; -i=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); -mesh(0:10:150,[0 5 10 15],reshape(m(i,5)-m(i,6),4,16)) - -subplot(1,3,2) -rxrfmode=1; -i=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); -mesh(0:10:150,[0 5 10 15],reshape(m(i,5)-m(i,6),4,16)) - -subplot(1,3,3) -rxrfmode=2; -i=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); -mesh(0:10:150,[0 5 10 15],reshape(m(i,5)-m(i,6),4,16)) - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots2.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots2.m deleted file mode 100644 index 9b64c1ac1c..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/plots2.m +++ /dev/null @@ -1,68 +0,0 @@ - -closeplot -figure(1); - - -%for power_dBm=ALL_power_dBm -for power_dBm=-65 - - disp(['input: ' num2str(power_dBm) ' dBm']); - - xlabel('Gain 2391'); - ylabel('Gain 9862'); - zlabel('SNR'); - - rxrfmode=0; - idx=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); - M0=zeros(length(ALL_gain2391),length(ALL_gain9862)); - M1=zeros(length(ALL_gain2391),length(ALL_gain9862)); - for i=idx.' - i1=find(ALL_gain2391==m(i,2)); - i2=find(ALL_gain9862==m(i,3)); - M0(i1,i2)=m(i,5)-m(i,6); - M1(i1,i2)=m(i,7)-m(i,8); - end - subplot(2,3,1); clg; - title('Channel 0, rxrfmode 0'); - mesh(ALL_gain2391,ALL_gain9862,M0.') - subplot(2,3,4); clg; - title('Channel 1, rxrfmode 0'); - mesh(ALL_gain2391,ALL_gain9862,M1.') - - rxrfmode=1; - idx=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); - M0=zeros(length(ALL_gain2391),length(ALL_gain9862)); - M1=zeros(length(ALL_gain2391),length(ALL_gain9862)); - for i=idx.' - i1=find(ALL_gain2391==m(i,2)); - i2=find(ALL_gain9862==m(i,3)); - M0(i1,i2)=m(i,5)-m(i,6); - M1(i1,i2)=m(i,7)-m(i,8); - end - subplot(2,3,2); clg; - title('Channel 0, rxrfmode 1'); - mesh(ALL_gain2391,ALL_gain9862,M0.') - subplot(2,3,5); clg; - title('Channel 1, rxrfmode 1'); - mesh(ALL_gain2391,ALL_gain9862,M1.') - - rxrfmode=2; - idx=find((m(:,1)==power_dBm) & (m(:,4)==rxrfmode)); - M0=zeros(length(ALL_gain2391),length(ALL_gain9862)); - M1=zeros(length(ALL_gain2391),length(ALL_gain9862)); - for i=idx.' - i1=find(ALL_gain2391==m(i,2)); - i2=find(ALL_gain9862==m(i,3)); - M0(i1,i2)=m(i,5)-m(i,6); - M1(i1,i2)=m(i,7)-m(i,8); - end - subplot(2,3,3); clg; - title('Channel 0, rxrfmode 2'); - mesh(ALL_gain2391,ALL_gain9862,M0.') - subplot(2,3,6); clg; - title('Channel 1, rxrfmode 2'); - mesh(ALL_gain2391,ALL_gain9862,M1.') - - pause - -end diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration.m deleted file mode 100644 index 8e5240db98..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration.m +++ /dev/null @@ -1,91 +0,0 @@ - -% Maxime Guillaud - created Wed May 10 18:08:04 CEST 2006 - -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu -freqband=2; % frequency band used by the openair card - -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) - - -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,gpib_device,'POW -70dBm'); -gpib_send(gpib_card,gpib_device,'FREQ 1.91452GHz'); - - - -oarf_config(freqband,'openair_config.cfg','openair_scenario.scn') - -saturation_threshold =5; % min number of samples (real+imaginary) equal to the max per frame to declare saturation - -ALL_power_dBm = [-100:1:-60 -150]; -ALL_rxrfmode = 0:2; -ALL_gain2391 = 0:5:120; % this is some strange scale -ALL_gain9862 = 0:1:18; % this in in dB - - -m=[]; - - -%for power_dBm=ALL_power_dBm - power_dBm=-70 - gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); -sleep(1) - - - for gain9862=ALL_gain9862 - - for gain2391= ALL_gain2391 - - - gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - - oarf_set_rx_gain(gain2391,gain9862,gain2391,gain9862); - - nacq=0; % count the number of tries to get data - do - - s=oarf_get_frame(freqband); %oarf_get_frame - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - for gain9862=ALL_gain9862 - - for gain2391= ALL_gain2391 - SpN0 = mean(abs(s(:,1)).^2) - abs(mean(s(:,1))).^2; - SpN1 = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; - - - gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - - oarf_set_rx_gain(gain2391,gain9862,gain2391,gain9862); - - nacq=0; % count the number of tries to get data - do - sleep(.1); - s=oarf_get_frame(freqband); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - N0 = mean(abs(s(:,1)).^2) - abs(mean(s(:,1))).^2; - N1 = mean(abs(s(:,2)).^2) - abs(mean(s(:,2))).^2; - -<<<<<<< rx_calibration.m - S0 = 10*log10(SpN0-N0); - S1 = 10*log10(SpN1-N1); - G0 = S0 - power_dBm; - G1 = S1 - power_dBm; - NF0 = N0 - G0 + 108; - NF1 = N1 - G1 + 108; - - fprintf(' %d %d : Signal strength (%d,%d), Gain (%d %d), NF (%d %d)\n', - gain2391,gain9862, S0,S1,G0,G1,NF0,NF1); - - end - end - -gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick.m deleted file mode 100644 index 808eed39ce..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick.m +++ /dev/null @@ -1,183 +0,0 @@ -close all -clear all -hold off - -% Maxime Guillaud - created Wed May 10 18:08:04 CEST 2006 -% Raymond & Florian - last modified Fri Oct 26 17:12:10 CEST 2007 - - -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu -freqband=0; % frequency band used by the openair card - -%fc = 1902600e3+5e6*freqband-(1043.1e6); % this has to be the same as in the config file -fc = 1902600e3+5e6*freqband; - -fs = 7680e3; -%fs = 6500e3; -fref = fc+fs/4; - -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) -dual_tx = 0; -tdd = 1; - -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,gpib_device,'POW -90dBm'); -%gpib_send(gpib_card,gpib_device,'FREQ 1.91860GHz'); -%gpib_send(gpib_card,gpib_device,'FREQ 1.919225GHz'); -%gpib_send(gpib_card,gpib_device,'FREQ 1.909225GHz'); -gpib_send(gpib_card,gpib_device,sprintf("FREQ %dHz",fref)); - -oarf_config(freqband,tdd,dual_tx) -#oarf_set_rx_rfmode(1); - -saturation_threshold =5; % min number of samples (real+imaginary) equal to the max per frame to declare saturation - -ALL_power_dBm = [-95]; -ALL_rxrfmode = 0:2; -ALL_gain2391 = 5:10:160; % this is some strange scale -ALL_gain9862 = 0; %:1:18; % this in in dB - -%fprintf(fid, 'Tx Power (dBm), gain2391, gain9862, Signal strength Rx0, Signal Strength Rx1, Gain Rx0, Gain Rx1, Noise Rx0, Noise Rx1, SNR Rx0, SNR Rx1, NF Rx0, NF Rx1\n'); - -SpN0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SpN1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -N0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -N1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -S0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -S1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -G0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -G1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -NF0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -NF1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SNR0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SNR1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); - -min_agc_level = 130; %min_agc_level = 90; %ceil(min(max(G0,[],1))); -max_agc_level = 150; %floor(max(max(G0,[],1))); - -oarf_set_calibrated_rx_gain(0); % turns off the AGC -#oarf_set_rx_rfmode(2); - -idx_power = 1; -for power_dBm=ALL_power_dBm - - gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); - - for gain9862=ALL_gain9862 - - idx_gain2391 = 1; - for gain2391= [0 0 0 ALL_gain2391] %the first 3 runs give strange results, so we run the loop 3 times more - - oarf_set_rx_gain(gain2391,gain2391,gain9862,gain9862); - oarf_set_rx_rfmode(1); - oarf_stop(freqband); %this actually writes the gain to the registers - sleep(.5); - - if 1 - % signal measurement - gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - sleep(.1); - - nacq=0; % count the number of tries to get data - do - s=oarf_get_frame(freqband); %oarf_get_frame - s2 = s(1:8192,:); - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - SpN0(idx_power,idx_gain2391) = mean(abs(s2(:,1)).^2) - abs(mean(s2(:,1))).^2; - SpN1(idx_power,idx_gain2391) = mean(abs(s2(:,2)).^2) - abs(mean(s2(:,2))).^2; - - figure(1); - hold off - plot(20*log10(abs(fft(s2(:,1)))),'r',20*log10(abs(fft(s2(:,2)))),'b') - title("Signal"); - - % noise measurement - gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - sleep(.1); - - nacq=0; % count the number of tries to get data - do - s=oarf_get_frame(freqband); %oarf_get_frame - s2 = s(1:8192,:); - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - N0(idx_power,idx_gain2391) = mean(abs(s2(:,1)).^2) - abs(mean(s2(:,1))).^2; - N1(idx_power,idx_gain2391) = mean(abs(s2(:,2)).^2) - abs(mean(s2(:,2))).^2; - - figure(2); - hold off - plot(20*log10(abs(fft(s2(:,1)))),'r',20*log10(abs(fft(s2(:,2)))),'b') - title("Noise"); - - % do some plausibility checks - % if ((N0(idx_power,idx_gain2391) > SpN0(idx_power,idx_gain2391)) || - % (N1(idx_power,idx_gain2391) > SpN1(idx_power,idx_gain2391))) - % error("something is wrong"); - % end - - S0(idx_power,idx_gain2391) = 10*log10(SpN0(idx_power,idx_gain2391)-N0(idx_power,idx_gain2391)); - S1(idx_power,idx_gain2391) = 10*log10(SpN1(idx_power,idx_gain2391)-N1(idx_power,idx_gain2391)); - G0(idx_power,idx_gain2391) = S0(idx_power,idx_gain2391) - power_dBm; - G1(idx_power,idx_gain2391) = S1(idx_power,idx_gain2391) - power_dBm; - NF0(idx_power,idx_gain2391) = 10*log10(N0(idx_power,idx_gain2391)) - G0(idx_power,idx_gain2391) + 107; % 108 is the thermal noise - NF1(idx_power,idx_gain2391) = 10*log10(N1(idx_power,idx_gain2391)) - G1(idx_power,idx_gain2391) + 107; - SNR0(idx_power,idx_gain2391) = S0(idx_power,idx_gain2391)-10*log10(N0(idx_power,idx_gain2391)); - SNR1(idx_power,idx_gain2391) = S1(idx_power,idx_gain2391)-10*log10(N1(idx_power,idx_gain2391)); - - printf(' %d %d : Signal strength (%f,%f), Gain (%f %f), N (%f %f) SNR (%f %f) NF (%f %f)\n', - gain2391,gain9862, S0(idx_power,idx_gain2391),S1(idx_power,idx_gain2391), - G0(idx_power,idx_gain2391),G1(idx_power,idx_gain2391), - 10*log10(N0(idx_power,idx_gain2391)),10*log10(N1(idx_power,idx_gain2391)), - SNR0(idx_power,idx_gain2391),SNR1(idx_power,idx_gain2391), - NF0(idx_power,idx_gain2391),NF1(idx_power,idx_gain2391)); - fflush(stdout); - %fprintf(fid,'%d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n', - % power_dBm,gain2391,gain9862, S0,S1,G0,G1,10*log10(N0),10*log10(N1),SNR0,SNR1,NF0,NF1); - - - if (gain2391 > 0) - idx_gain2391 = idx_gain2391 + 1; - end - - figure(3) - hold off - plot(ALL_gain2391,G0,'r') - hold on - plot(ALL_gain2391,G1,'b') - legend('Rx0','Rx1'); - title('Gains') - - figure(4) - hold off - plot(ALL_gain2391,NF0,'r') - hold on - plot(ALL_gain2391,NF1,'b') - legend('Rx0','Rx1'); - title('Noise Figure') - end - - end - end - %power_dBm = power_dBm + 20; - idx_power = idx_power + 1; - end - -gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - -%l0 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G0; -%l1 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G1; - -gain_levels = zeros(max_agc_level-min_agc_level+1,2); - -gain_levels(:,1) = round(interp1(max(G0,[],1),ALL_gain2391,min_agc_level:max_agc_level,'linear','extrap')).'; -gain_levels(:,2) = round(interp1(max(G1,[],1),ALL_gain2391,min_agc_level:max_agc_level,'linear','extrap')).'; - -%gain_levels(isnan(gain_levels)) = 0; - -write_table diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick800_ue.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick800_ue.m deleted file mode 100644 index a07e04a1c3..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_calibration_quick800_ue.m +++ /dev/null @@ -1,183 +0,0 @@ -close all -clear all -hold off - -% Maxime Guillaud - created Wed May 10 18:08:04 CEST 2006 -% Raymond & Florian - last modified Fri Oct 26 17:12:10 CEST 2007 - - -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System->GPIB->Address menu -freqband=0; % frequency band used by the openair card - -fc = 1902600e3+5e6*freqband-(1043.1e6); % this has to be the same as in the config file -#fc = 1902600e3+5e6*freqband; - -fs = 7680e3; -%fs = 6500e3; -fref = fc+fs/4; - -dual_tx = 0; -cables_loss_dB = 6; % we need to account for the power loss between the signal generator and the card input (splitter, cables) - - -gpib_send(gpib_card,gpib_device,'*RST;*CLS'); % reset and configure the signal generator -gpib_send(gpib_card,gpib_device,'POW -90dBm'); -%gpib_send(gpib_card,gpib_device,'FREQ 1.91860GHz'); -%gpib_send(gpib_card,gpib_device,'FREQ 1.919225GHz'); -%gpib_send(gpib_card,gpib_device,'FREQ 1.909225GHz'); -gpib_send(gpib_card,gpib_device,sprintf("FREQ %dHz",fref)); - -oarf_config(freqband,'config.cfg','scenario.scn',dual_tx) -#oarf_set_rx_rfmode(1); - -saturation_threshold =5; % min number of samples (real+imaginary) equal to the max per frame to declare saturation - -ALL_power_dBm = [-102]; -ALL_rxrfmode = 0:2; -ALL_gain2391 = 5:10:160; % this is some strange scale -ALL_gain9862 = 0; %:1:18; % this in in dB - -%fprintf(fid, 'Tx Power (dBm), gain2391, gain9862, Signal strength Rx0, Signal Strength Rx1, Gain Rx0, Gain Rx1, Noise Rx0, Noise Rx1, SNR Rx0, SNR Rx1, NF Rx0, NF Rx1\n'); - -SpN0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SpN1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -N0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -N1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -S0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -S1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -G0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -G1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -NF0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -NF1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SNR0 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); -SNR1 = zeros(length(ALL_power_dBm),length(ALL_gain2391)); - -min_agc_level = 130; %min_agc_level = 90; %ceil(min(max(G0,[],1))); -max_agc_level = 150; %floor(max(max(G0,[],1))); - -oarf_set_calibrated_rx_gain(0); % turns off the AGC -#oarf_set_rx_rfmode(2); - -idx_power = 1; -for power_dBm=ALL_power_dBm - - gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); - - for gain9862=ALL_gain9862 - - idx_gain2391 = 1; - for gain2391= [0 0 0 ALL_gain2391] %the first 3 runs give strange results, so we run the loop 3 times more - - oarf_set_rx_gain(gain2391,gain2391,gain9862,gain9862); - oarf_set_rx_rfmode(1); - oarf_stop(freqband); %this actually writes the gain to the registers - sleep(.5); - - if 1 - % signal measurement - gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - sleep(.1); - - nacq=0; % count the number of tries to get data - do - s=oarf_get_frame(freqband); %oarf_get_frame - s2 = s(1:8192,:); - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - SpN0(idx_power,idx_gain2391) = mean(abs(s2(:,1)).^2) - abs(mean(s2(:,1))).^2; - SpN1(idx_power,idx_gain2391) = mean(abs(s2(:,2)).^2) - abs(mean(s2(:,2))).^2; - - figure(1); - hold off - plot(20*log10(abs(fft(s2(:,1)))),'r',20*log10(abs(fft(s2(:,2)))),'b') - title("Signal"); - - % noise measurement - gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - sleep(.1); - - nacq=0; % count the number of tries to get data - do - s=oarf_get_frame(freqband); %oarf_get_frame - s2 = s(1:8192,:); - sleep(.1); - nacq=nacq+1; - until max(max(abs(s)))>0 % ensures that the frame is properly read - - N0(idx_power,idx_gain2391) = mean(abs(s2(:,1)).^2) - abs(mean(s2(:,1))).^2; - N1(idx_power,idx_gain2391) = mean(abs(s2(:,2)).^2) - abs(mean(s2(:,2))).^2; - - figure(2); - hold off - plot(20*log10(abs(fft(s2(:,1)))),'r',20*log10(abs(fft(s2(:,2)))),'b') - title("Noise"); - - % do some plausibility checks - % if ((N0(idx_power,idx_gain2391) > SpN0(idx_power,idx_gain2391)) || - % (N1(idx_power,idx_gain2391) > SpN1(idx_power,idx_gain2391))) - % error("something is wrong"); - % end - - S0(idx_power,idx_gain2391) = 10*log10(SpN0(idx_power,idx_gain2391)-N0(idx_power,idx_gain2391)); - S1(idx_power,idx_gain2391) = 10*log10(SpN1(idx_power,idx_gain2391)-N1(idx_power,idx_gain2391)); - G0(idx_power,idx_gain2391) = S0(idx_power,idx_gain2391) - power_dBm; - G1(idx_power,idx_gain2391) = S1(idx_power,idx_gain2391) - power_dBm; - NF0(idx_power,idx_gain2391) = 10*log10(N0(idx_power,idx_gain2391)) - G0(idx_power,idx_gain2391) + 107; % 108 is the thermal noise - NF1(idx_power,idx_gain2391) = 10*log10(N1(idx_power,idx_gain2391)) - G1(idx_power,idx_gain2391) + 107; - SNR0(idx_power,idx_gain2391) = S0(idx_power,idx_gain2391)-10*log10(N0(idx_power,idx_gain2391)); - SNR1(idx_power,idx_gain2391) = S1(idx_power,idx_gain2391)-10*log10(N1(idx_power,idx_gain2391)); - - printf(' %d %d : Signal strength (%f,%f), Gain (%f %f), N (%f %f) SNR (%f %f) NF (%f %f)\n', - gain2391,gain9862, S0(idx_power,idx_gain2391),S1(idx_power,idx_gain2391), - G0(idx_power,idx_gain2391),G1(idx_power,idx_gain2391), - 10*log10(N0(idx_power,idx_gain2391)),10*log10(N1(idx_power,idx_gain2391)), - SNR0(idx_power,idx_gain2391),SNR1(idx_power,idx_gain2391), - NF0(idx_power,idx_gain2391),NF1(idx_power,idx_gain2391)); - fflush(stdout); - %fprintf(fid,'%d, %d, %d, %f, %f, %f, %f, %f, %f, %f, %f, %f, %f\n', - % power_dBm,gain2391,gain9862, S0,S1,G0,G1,10*log10(N0),10*log10(N1),SNR0,SNR1,NF0,NF1); - - - if (gain2391 > 0) - idx_gain2391 = idx_gain2391 + 1; - end - - figure(3) - hold off - plot(ALL_gain2391,G0,'r') - hold on - plot(ALL_gain2391,G1,'b') - legend('Rx0','Rx1'); - title('Gains') - - figure(4) - hold off - plot(ALL_gain2391,NF0,'r') - hold on - plot(ALL_gain2391,NF1,'b') - legend('Rx0','Rx1'); - title('Noise Figure') - end - - end - end - %power_dBm = power_dBm + 20; - idx_power = idx_power + 1; - end - -gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % deactivate output - -%l0 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G0; -%l1 = [ALL_gain2391; ones(size(ALL_gain2391))].'\G1; - -gain_levels = zeros(max_agc_level-min_agc_level+1,2); - -gain_levels(:,1) = round(interp1(max(G0,[],1),ALL_gain2391,min_agc_level:max_agc_level,'linear','extrap')).'; -gain_levels(:,2) = round(interp1(max(G1,[],1),ALL_gain2391,min_agc_level:max_agc_level,'linear','extrap')).'; - -%gain_levels(isnan(gain_levels)) = 0; - -write_table diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_post.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_post.m deleted file mode 100755 index 32b3260a3b..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_post.m +++ /dev/null @@ -1,42 +0,0 @@ -function out=rx_post(nom) - -%load data.dat signal -%fid=fopen('/tmp/store1.dat',) -fid=fopen(nom,'rb') -signal=fread(fid,20480); - -size_data=20480; -Fs=7680; %in kHz -band = 2000; %in kHz -max_pos=0; -max=0; -f=abs(fft(signal)).^2; -for n=2:size_data - if(f(n) > max) - max=f(n); - max_pos=n; - end; -end; - -disp(max_pos) -freq_max=Fs/size_data*max_pos - Fs/2 % corresponding frequency -if(abs(freq_max-2000)>100) -disp("Warning") -end; - - -% calculation of the signal power -Pu=sum(f(max_pos-20:max_pos+20)) -ns_noise =round((band/Fs)*(size_data/2)) -Pnoise=sum(f(max_pos-ns_noise:max_pos+ns_noise))-Pu -plot(10*log10(f)) - -% plot(10*log10(f(max_pos-ns_noise:max_pos+ns_noise))) - -SNR=10*log10(Pu/Pnoise) -N_in = -174 +10*log10(1000*band) -S_in = -110; -SNR_in=S_in - N_in - -NF=SNR_in-SNR -end; \ No newline at end of file diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_pss.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_pss.m deleted file mode 100644 index 1b25f765a0..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_pss.m +++ /dev/null @@ -1,10 +0,0 @@ -addpath('../../../PHY/LTE_REFSIG/'); -primary_synch; -pss_t = upsample(primary_synch0_time,4); -corr = abs(conv(conj(pss_t),s(:,1))); -figure(3); -plot(corr); - -[pss_amp, pss_pos] = max(corr); -sss_pos = pss_pos - 640; -ssst = s(sss_pos:(sss_pos+511)); diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_spec.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_spec.m deleted file mode 100755 index 61709c8c80..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_spec.m +++ /dev/null @@ -1,26 +0,0 @@ -dual_tx=0; -oarf_config(0,1,dual_tx) - -gpib_card=0; % first GPIB PCI card in the computer -gpib_device=28; % this is configured in the signal generator Utilities->System -cables_loss_dB = 6; % we need to account for the power loss between the signa -power_dBm = -95; - -%gpib_send(gpib_card,gpib_device,['POW ' int2str(power_dBm+cables_loss_dB) 'dBm']); -%gpib_send(gpib_card,gpib_device,'OUTP:STAT ON'); % activate output - -oarf_set_calibrated_rx_gain(0); % turns off the AGC -oarf_set_rx_gain(80,85,0,0); -oarf_set_rx_rfmode(0); - -s=oarf_get_frame(0); -f = (7.68*(0:length(s(:,1))-1)/(length(s(:,1))))-3.84; -spec0 = 20*log10(abs(fftshift(fft(s(:,1))))); -spec1 = 20*log10(abs(fftshift(fft(s(:,2))))); - -clf -plot(f',spec0,'r',f',spec1,'b') -axis([-3.84,3.84,40,160]); -%gpib_send(gpib_card,gpib_device,'OUTP:STAT OFF'); % activate output -legend('Antenna Port 0','Antenna Port 1'); -grid diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_store.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_store.m deleted file mode 100755 index 02d0a79922..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/rx_store.m +++ /dev/null @@ -1,13 +0,0 @@ -num=10; -openair_init; -for n=1:num -s=oarf_get_frame(0); -plot(20*log10(abs(fft(s(:,1))))) -signal=s(:,1); -fid=fopen(['/tmp/store' int2str(n) '.dat'],'wb') -fwrite(fid,signal); -fclose(fid); -end; - - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig.m deleted file mode 100644 index d739a54e9f..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig.m +++ /dev/null @@ -1,83 +0,0 @@ -fc = 1907600000; -fidx=1; -tdd=1; -dual_tx=1; -cbmimo1=0; -rxgain=30; -txgain=25; -eNB_flag = 0; - -off = 0; % -994; -if (cbmimo1) - oarf_config(fidx,tdd,dual_tx,255); - amp = pow2(7)-1; - n_bit = 8; -else - limeparms; - rf_mode = RXEN+TXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAMax+RFBBNORM * ones(1,4); -% rf_mode = RXEN+TXEN+TXLPFNORM+TXLPFEN+TXLPF25+RXLPFNORM+RXLPFEN+RXLPF25+LNA1ON+LNAByp+RFBBLNA1; - - rf_local = rf_local * ones(1,4); - rf_rxdc = rf_rxdc * ones(1,4); - rf_vcocal = rf_vcocal * ones(1,4); - rxgain = rxgain*ones(1,4); - txgain = txgain*ones(1,4); - freq_rx = fc*[1 1 1 1]; - freq_tx = freq_rx+1920000; - - oarf_config_exmimo(freq_rx,freq_tx,1,dual_tx,rxgain,txgain,eNB_flag,rf_mode,rf_rxdc,rf_local,rf_vcocal); - amp = pow2(13)-1; - n_bit = 16; -end - -s = zeros(76800,2); - -select = 1; - -switch(select) - -case 1 - s(:,1) = floor(amp * (exp(sqrt(-1)*.5*pi*(0:((76800)-1))))); - s(:,2) = floor(amp * (exp(sqrt(-1)*.5*pi*(0:((76800)-1))))); - -case 2 - s(38400+128,1)= 80-1j*40; - s(38400+138,1)= -80+1j*40; - -case 3 - for i=0:(12*5-1) - s((38401+640*i):(38400+640*(i+1)),1)=floor(linspace(-127,128,640)); %+1j*floor(linspace(128,-127,640)); - end - -case 4 - pss0_f0=[0,0,0,0,0,0,0,0,0,0,32767,0,-26120,-19785,11971,-30502,-24020,-22288,32117,6492,31311,9658,-16384,-28378,25100,-21063,-7292,-31946,20429,25618,14948,29158,11971,-30502,31311,9658,25100,-21063,-16384,28377,-24020,22287,32117,6492,-7292,31945,20429,25618,-26120,-19785,-16384,-28378,-16384,28377,-26120,-19785,-32402,4883,31311,-9659,32117,6492,-7292,-31946,32767,-1,25100,-21063,-24020,22287,-32402,4883,-32402,4883,-24020,22287,25100,-21063,32767,-1,-7292,-31946,32117,6492,31311,-9659,-32402,4883,-26120,-19785,-16384,28377,-16384,-28378,-26120,-19785,20429,25618,-7292,31945,32117,6492,-24020,22287,-16384,28377,25100,-21063,31311,9658,11971,-30502,14948,29158,20429,25618,-7292,-31946,25100,-21063,-16384,-28378,31311,9658,32117,6492,-24020,-22288,11971,-30502,-26120,-19785,32767,0,0,0,0,0,0,0,0,0,0,0]; - - pss0_f = pss0_f0(1:2:length(pss0_f0)) + sqrt(-1)*pss0_f0(2:2:length(pss0_f0)); - - pss0_f = [0 pss0_f(37:72) zeros(1,512-73) pss0_f(1:36)]; - pss0_t = ifft(pss0_f); - pss0_t = [pss0_t((512-127):512) pss0_t]; - pss0_t = [pss0_t zeros(1,512+36) pss0_t]; - pss0_max = max(max(abs(real(pss0_t))),max(abs(imag(pss0_t)))); - - pss0_t_fp_re = floor(real(8192*pss0_t/pss0_max)); - pss0_t_fp_im = floor(imag(8192*pss0_t/pss0_max)); - - s(38400+(1:length(pss0_t_fp_re)),1) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); - s(38400+(1:length(pss0_t_fp_re)),2) = 2*floor(pss0_t_fp_re) + 2*sqrt(-1)*floor(pss0_t_fp_im); -otherwise - error('unknown case') -endswitch - -if (cbmimo1) - oarf_set_tx_gain(110,110,110,110); -else - s = s*2; -end -oarf_send_frame(0,s,n_bit); - -figure(1) -hold off -plot(real(s(:,1)),'r') -hold on -plot(imag(s(:,2)),'b') diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig_ofdm.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig_ofdm.m deleted file mode 100644 index a0c9591dbe..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/txsig_ofdm.m +++ /dev/null @@ -1,27 +0,0 @@ -dual_tx=1; -cbmimo1=0; - -if (cbmimo1) - oarf_config(0,1,dual_tx,255); - amp = pow2(7)-1; - n_bit = 8; -else - oarf_config_exmimo(1902600000,1,dual_tx,30); - amp = pow2(15)-1; - n_bit = 16; -end - -s = zeros(76800,2); -s(:,1) = 8*floor(amp*OFDM_TX_FRAME(512,211,128,120,8)); -s(:,2) = 8*floor(amp*OFDM_TX_FRAME(512,211,128,120,8)); - - -%s(:,1) = amp * (exp(sqrt(-1)*.5*pi*(0:((76800)-1)))); -%s(:,2) = amp * (exp(sqrt(-1)*.5*pi*(0:((76800)-1)))); - -if (cbmimo1) - oarf_set_tx_gain(110,110,110,110); -end -oarf_send_frame(0,s,n_bit); - -plot(20*log10(abs(fft(s(:,1))))) diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/variouspowers.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/variouspowers.m deleted file mode 100644 index bc74e32af3..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/variouspowers.m +++ /dev/null @@ -1,33 +0,0 @@ -function retvalue=variouspowers(s) - -W=25; - -fftsize=2^ceil(log2(length(s))); -powspectrum=fftshift(abs(fft(s-mean(s),fftsize)/sqrt(fftsize))); - -powspectrumfilt=conv(powspectrum,ones(1,2*W+1)); - -[sigpower carrier_idx]=max(powspectrumfilt); - -if (carrier_idx<=3*W) - carrier_idx=3*W+1; -end -sigpower_dB=20*log10(sigpower); - - -if (carrier_idx>3*W) - - noiseplusintfspectrum=powspectrum; - noiseplusintfspectrum(carrier_idx+(-W:W)-2*W)=zeros(1,2*W+1); - - noiseplusintfpower_dB=10*log10(sum(noiseplusintfspectrum.^2)); - - noiseplusintfspectrum_dB=20*log10(noiseplusintfspectrum); - noiseplusintfspectrum_dB(carrier_idx+(-W:W)-2*W)=-20; - -%plot([ 20*log10(powspectrum) noiseplusintfspectrum_dB]) -%pause - retvalue=[sigpower_dB noiseplusintfpower_dB]; -else - retvalue=[sigpower_dB +Inf]; -end diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_table.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_table.m deleted file mode 100644 index 3184553021..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_table.m +++ /dev/null @@ -1,33 +0,0 @@ -card = input('Input card number: ', 's'); - -filename_h = ['gain_table_' card '.h']; % file to store the gain table to -filename_mat = ['gain_table_' card '.mat']; - -save('-mat',filename_mat,'ALL_power_dBm','ALL_rxrfmode','ALL_gain2391','ALL_gain9862','min_agc_level','max_agc_level','gain_levels','SpN0','SpN1','N0','N1','S0','S1','G0','G1','NF0','NF1','SNR0','SNR1'); - -fid = fopen(filename_h,'w'); - -fprintf(fid,'#ifndef _GAIN_TABLE_H__\n'); -fprintf(fid,'#define _GAIN_TABLE_H__\n'); - -fprintf(fid,'#define MAX_RF_GAIN %d\n',max_agc_level); -fprintf(fid,'#define MIN_RF_GAIN %d\n',min_agc_level); - -%fprintf(fid,'#define TCXO_OFFSET\n'); - -fprintf(fid,'struct gain_table_entry {\n'); -fprintf(fid,' unsigned char gain0;\n'); -fprintf(fid,' unsigned char gain1;\n'); -fprintf(fid,'};\n'); - -fprintf(fid,'struct gain_table_entry gain_table[MAX_RF_GAIN-MIN_RF_GAIN+1] = {\n'); -for agc_level = 1:(max_agc_level-min_agc_level) - fprintf(fid,'%d, %d,\n',gain_levels(agc_level,:)); -end -fprintf(fid,'%d, %d};\n',gain_levels(end,:)); - - -fprintf(fid,'#endif /* _GAIN_TABLE_H__ */\n'); - -fclose(fid); - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_tcxo.m b/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_tcxo.m deleted file mode 100644 index a2b6d8dd8e..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/CBMIMO1_TOOLS/write_tcxo.m +++ /dev/null @@ -1,15 +0,0 @@ -card = input('Input card number: ', 's'); - -filename_h = ['tcxo_val_' card '.h']; % file to store the gain table to - -fid = fopen(filename_h,'w'); - -fprintf(fid,"#ifndef _TCXO_VAL_H__\n"); -fprintf(fid,"#define _TCXO_VAL_H__\n"); - -fprintf(fid,"#define TCXO_VAL %d\n",tcxo_freq_min); - -fprintf(fid,"#endif /* _TCXO_VAL_H__ */\n"); - -fclose(fid); - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/Makefile b/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/Makefile deleted file mode 100644 index 73054a5cd4..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -# Maxime Guillaud - created Wed May 10 17:47:36 CEST 2006 -# see http://etow.com/UsingGPIBOctaveLinux.htm - -all: gpibcmd querygpib - - -gpibcmd: gpibcmd.c - gcc gpibcmd.c -I/usr/include/gpib/ -o gpibcmd -lgpib - - -querygpib: querygpib.c - gcc querygpib.c -I/usr/include/gpib/ -o querygpib -lgpib - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/gpibcmd.c b/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/gpibcmd.c deleted file mode 100644 index 95da0a6fb1..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/gpibcmd.c +++ /dev/null @@ -1,56 +0,0 @@ -/* Code of gpibcmd.c */ -// -// BrettFrymire -// 04/07/2004 -// Version 0.9 -//Compile like this -//gcc gpibcmd.c -o test -lgpib - - - -#include -#include -#include "/usr/include/gpib/ib.h" -#include - -/* Forward declares */ -void check_args(int argc); - - -/* Type declarations */ - - - -void check_args(int argc) -{ - if (argc != 3) { - printf("\nUsage: program Gpibaddress Command\n"); - exit(EXIT_FAILURE); - } -} - - -int main(int argc, char *argv[]) -{ - check_args(argc); - unsigned short addlist[2] = {atoi(argv[1]), NOADDR}; // list to enable inst - //Reset Card 0 (i.e:gpib0) - SendIFC(0); - - // ENABLE all on GPIB bus - EnableRemote(0, addlist); - - // If error, Bye! - if (ibsta & ERR) { - printf("Instrument enable failed!\n"); - exit(1); - } - - // Send (BoardID, GPIBAddr, Command, LengthCommand, Endline) - // typical command: - // Send(0, 20, "*RST", 4l, NLend); - - Send(0, atoi(argv[1]), argv[2], strlen(argv[2]), NLend); -} - - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib b/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib deleted file mode 100755 index 81a2193a3793172198764709cf0d9116418d5f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8023 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 aX^B5-nEF6iH)Gl4R)1)_kk5mb8~*~gx)759 diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.c b/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.c deleted file mode 100644 index 06035651db..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Code of QueryGpib.c */ -// -// BrettFrymire -// 04/07/2004 -// Version 0.9 -//Compile like this -//gcc test.c -o test -lgpib - -#include -#include -#include "ib.h" -#include - - -/* Type declarations */ -char inData[19]; - - -void check_args(int argc) -{ - if (argc != 3) { - printf("\nUsage: program Gpibaddress Command\n"); - exit(EXIT_FAILURE); - } -} - - -int main(int argc, char *argv[]) -{ - int loop; - check_args(argc); - - for (loop=0; loop<=19-1; loop++) { - inData[loop] = 0; - } - - unsigned short addlist[2] = {atoi(argv[1]), NOADDR}; // list to enable inst - - //Reset Card 0 (i.e:gpib0) - SendIFC(0); - // ENABLE all on GPIB bus - EnableRemote(0, addlist); - - // If error, Bye! - if (ibsta & ERR) { - printf("Instrument enable failed!\n"); - exit(1); - } - - // Send (BoardID, GPIBAddr, Command, LengthCommand, Endline) - // typical command: - // Send(0, 20, "*RST", 4l, NLend); - Send(0, atoi(argv[1]), argv[2], strlen(argv[2]), NLend); - Receive(0, atoi(argv[1]), inData, 19, STOPend); - printf("%s",inData); -} - diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.m b/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.m deleted file mode 100644 index df4713a271..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/querygpib.m +++ /dev/null @@ -1,7 +0,0 @@ -function [qresult]=QueryGPIB(addr,cmdstr); -% Pass address of GPIB instrument and the command string to -% trigger the query. -% example querygpib(20, FREQ?) - -A = system('/local/gpibquery ' sprintf('%i ',addr) cmdstr); -qresult = sscanf(A, "%f") diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/sendgpib.m b/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/sendgpib.m deleted file mode 100644 index aac693d2b8..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/GPIB/sendgpib.m +++ /dev/null @@ -1,12 +0,0 @@ -function [] = sendgpib(addr, command); -% Sample file showing how to interface with gpibcmd -% Command in Octave: sendgpib (20, '"FREQ 5000"') -% Must have the quotes around the command to work -% addr = 20; -% command = '"FREQ 2000"'; - -% this could be rewritten as native octave, see http://www.gnu.org/software/octave/doc/interpreter/Dynamically-Linked-Functions.html#Dynamically-Linked-Functions - -cmdstr= ["./gpibcmd " sprintf('%i' , addr) " '" command "'"]; -disp(['sendgpib: executing >> ' cmdstr ' <<']) -system(cmdstr); diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf0.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf0.m deleted file mode 100644 index f4dcf822f7..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf0.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch0_sync_f_4x0 = [225 + j*(-290) --1024 + j*(758) --275 + j*(1023) -402 + j*(1023) --1024 + j*(-1024) --1024 + j*(1023) --266 + j*(1023) --203 + j*(-529) --1024 + j*(-60) --223 + j*(201) --166 + j*(-992) --867 + j*(-1024) --964 + j*(437) -564 + j*(-99) -344 + j*(-1024) -288 + j*(-1024) --1024 + j*(-242) --877 + j*(-313) --871 + j*(1023) -530 + j*(1023) --1024 + j*(-776) --1024 + j*(1023) --303 + j*(1023) --1024 + j*(-1024) --1024 + j*(543) --1024 + j*(1023) --1024 + j*(-1024) --1024 + j*(-832) --1024 + j*(1023) --28 + j*(-1024) --1013 + j*(-1024) --1024 + j*(-2) --1024 + j*(1023) -13 + j*(1023) -961 + j*(1023) -1023 + j*(295) --1024 + j*(925) -661 + j*(1023) -1023 + j*(1023) --1024 + j*(224) --895 + j*(1023) -942 + j*(1023) --1024 + j*(-540) --1024 + j*(580) --255 + j*(1023) --1024 + j*(-1024) --1024 + j*(-639) --1024 + j*(1023) -710 + j*(1023) -1023 + j*(1023) -1023 + j*(-879) --444 + j*(-451) -593 + j*(-240) -329 + j*(-681) --129 + j*(357) -480 + j*(-223) --510 + j*(627) --50 + j*(315) --1024 + j*(-803) --1024 + j*(1023) -384 + j*(1023) --1024 + j*(-966) --1024 + j*(413) -891 + j*(1023) -1023 + j*(919) -1023 + j*(-553) -1007 + j*(-1024) --991 + j*(-879) -1023 + j*(-663) -347 + j*(-1024) --1024 + j*(-696) -1023 + j*(-1024) -1023 + j*(-1024) --1024 + j*(-259) -931 + j*(-992) --971 + j*(-1024) --1024 + j*(-92) -785 + j*(-991) --1019 + j*(-1024) --1024 + j*(67) --865 + j*(1023) -517 + j*(1023) -1023 + j*(-319) -861 + j*(-901) -875 + j*(1023) -1023 + j*(252) -916 + j*(-931) -545 + j*(1023) -1023 + j*(76) -871 + j*(-1024) -509 + j*(1023) -1023 + j*(-147) -792 + j*(-1024) -672 + j*(931) -1023 + j*(-852) --705 + j*(-1024) --1024 + j*(-1024) --1024 + j*(901) -331 + j*(1023) -1014 + j*(1023) --1024 + j*(971) --265 + j*(1023) -926 + j*(1023) --1024 + j*(-167) --1024 + j*(1023) -930 + j*(1023) --1024 + j*(-689) --1024 + j*(1023) -766 + j*(1023) --1024 + j*(-858) --1024 + j*(1023) -873 + j*(1023) -1023 + j*(-468) -1023 + j*(-1024) --307 + j*(-1024) --434 + j*(-742) -1023 + j*(368) -850 + j*(-802) -136 + j*(-538) -666 + j*(213) -708 + j*(203) -511 + j*(-597) --355 + j*(754) -516 + j*(1014) -1023 + j*(412) --683 + j*(846) -96 + j*(1023) -1023 + j*(920) -1023 + j*(-572) -682 + j*(-1024) --1024 + j*(-1007) --1024 + j*(1023) -192 + j*(-1024) --1024 + j*(-980) --1024 + j*(1023) -62 + j*(-1024) --1024 + j*(-1024) --1024 + j*(925) -245 + j*(-1024) --1024 + j*(-1024) --1024 + j*(315) -607 + j*(-1024) --1024 + j*(-319) --1024 + j*(215) -770 + j*(1023) -388 + j*(1023) -799 + j*(380) -982 + j*(-109) --1024 + j*(1023) --564 + j*(934) -924 + j*(844) --1024 + j*(628) --515 + j*(615) -1023 + j*(1023) --1024 + j*(-571) --1024 + j*(1023) --370 + j*(1023) --1024 + j*(-845) --1024 + j*(936) --250 + j*(1023) -1023 + j*(895) -1023 + j*(-1024) -100 + j*(-1024) --947 + j*(-630) -1023 + j*(0) -1023 + j*(-1024) --1024 + j*(-331) -1023 + j*(-1024) --708 + j*(-1024) --1024 + j*(-490) -747 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-309) -799 + j*(-1024) -7 + j*(-1024) --1024 + j*(210) --791 + j*(915) -313 + j*(1023) -936 + j*(460) -1023 + j*(-284) --716 + j*(1023) -93 + j*(1023) -1023 + j*(490) --596 + j*(566) --677 + j*(206) -837 + j*(391) --1024 + j*(-226) --932 + j*(1023) --244 + j*(1023) --1024 + j*(-729) --618 + j*(377) --1 + j*(985) -1023 + j*(469) -461 + j*(-102) -204 + j*(-1024) --697 + j*(-856) -1023 + j*(-206) -289 + j*(-1024) --754 + j*(-623) -1023 + j*(-833) -505 + j*(-1024) --1024 + j*(-1024) -672 + j*(-849) --597 + j*(-1024) --1024 + j*(-605) -703 + j*(-985) -20 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-231) --817 + j*(1023) -1023 + j*(1023) -946 + j*(-596) --1024 + j*(318) --1 + j*(1023) -778 + j*(52) --1024 + j*(619) -287 + j*(1023) -842 + j*(808) --1024 + j*(4) --1 + j*(1023) --1 + j*(1023) --1024 + j*(-410) --1024 + j*(1023) --1 + j*(1007) -1023 + j*(535) -833 + j*(95) -381 + j*(-1024) --688 + j*(-1024) -1023 + j*(17) -1023 + j*(-486) --535 + j*(-1024) -515 + j*(522) -363 + j*(-943) --150 + j*(-421) -626 + j*(-251) -526 + j*(-312) --731 + j*(-251) -718 + j*(-587) -9 + j*(-1024) --1024 + j*(-90) --1024 + j*(317) -116 + j*(1023) -1023 + j*(1023) -1023 + j*(-877) --662 + j*(1023) -1023 + j*(1023) -1023 + j*(-726) --996 + j*(1023) -1023 + j*(1023) -1023 + j*(-311) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(250) --1024 + j*(1023) -8 + j*(1023) -1023 + j*(-1) -1023 + j*(-1024) --7 + j*(-1024) --935 + j*(-1) --569 + j*(802) --9 + j*(-1024) --521 + j*(575) --298 + j*(775) --1024 + j*(-1024) --984 + j*(1023) --946 + j*(1023) --1024 + j*(-763) --1024 + j*(1023) --1 + j*(1023) --1024 + j*(-858) --1024 + j*(131) --1 + j*(1023) -366 + j*(1023) -1023 + j*(-27) -1023 + j*(-1024) --519 + j*(-828) -895 + j*(582) -625 + j*(316) --45 + j*(-414) -112 + j*(780) -495 + j*(-392) -679 + j*(-27) --644 + j*(-207) --728 + j*(354) -3 + j*(1023) --959 + j*(-597) --1024 + j*(1023) -822 + j*(974) -1023 + j*(824) -738 + j*(-614) -811 + j*(-1024) --377 + j*(-1024) -1023 + j*(-1) -678 + j*(27) --1 + j*(-1024) -651 + j*(133) -1023 + j*(-1) --147 + j*(-292) --220 + j*(8) -797 + j*(-1) --1 + j*(978) --604 + j*(-367) --1024 + j*(70) --268 + j*(1023) -966 + j*(1023) -1019 + j*(57) -1023 + j*(-1024) --923 + j*(-1024) -1023 + j*(36) -1023 + j*(-1024) --686 + j*(-1024) -1023 + j*(308) -1023 + j*(-353) --585 + j*(-1024) -1023 + j*(592) -1023 + j*(-1) -398 + j*(-1024) -590 + j*(322) -1023 + j*(-1) --1 + j*(-1024) --22 + j*(-462) --3 + j*(-91) --345 + j*(16) --134 + j*(-343) -438 + j*(-222) --47 + j*(-759) --214 + j*(-691) --562 + j*(210) -114 + j*(-452) --58 + j*(258) -637 + j*(254) --211 + j*(-113) --286 + j*(-1) -326 + j*(139) --212 + j*(-588) --90 + j*(-84) --425 + j*(-177) --44 + j*(185) --692 + j*(212) --19 + j*(-277) -356 + j*(-12) --99 + j*(-73) --39 + j*(-500) -24 + j*(461) -506 + j*(-829) --5 + j*(-181) -381 + j*(257) -963 + j*(-48) -213 + j*(-795) -164 + j*(132) -187 + j*(317) --1024 + j*(123) -875 + j*(-443) -317 + j*(1023) --57 + j*(-459) --74 + j*(-249) --1 + j*(143) -276 + j*(22) --87 + j*(-118) --233 + j*(1023) -188 + j*(-517) -1023 + j*(-185) -385 + j*(177) -6 + j*(637) -492 + j*(-178) -193 + j*(154) -1023 + j*(-362) -846 + j*(666) --349 + j*(-1024) --194 + j*(-174) --1024 + j*(-1) --41 + j*(-133) -224 + j*(-384) -135 + j*(-1) --75 + j*(-302) -327 + j*(1023) -206 + j*(254) -624 + j*(-684) -198 + j*(133) -313 + j*(-285) --256 + j*(-1) -180 + j*(82) -740 + j*(-178) -16 + j*(-1024) --1024 + j*(-877) --1024 + j*(-173) -763 + j*(1023) -15 + j*(-104) -140 + j*(-90) -425 + j*(247) --23 + j*(-208) --188 + j*(453) --742 + j*(1023) -259 + j*(111) -204 + j*(64) -167 + j*(-284) --418 + j*(105) -135 + j*(-3) -235 + j*(110) --1 + j*(-141) -800 + j*(721) -674 + j*(420) --1 + j*(-175) -79 + j*(-165) -771 + j*(-1) -792 + j*(-641) -96 + j*(-229) --887 + j*(757) -762 + j*(302) -739 + j*(566) -94 + j*(150) -14 + j*(-253) -11 + j*(-1) -22 + j*(35) -276 + j*(3) -1023 + j*(860) -125 + j*(-132) -978 + j*(-728) --151 + j*(175) --8 + j*(-196) --199 + j*(308) -413 + j*(-27) -32 + j*(-290) -642 + j*(588) --364 + j*(-590) -377 + j*(-559) -157 + j*(179) --515 + j*(616) -814 + j*(143) -53 + j*(83) --520 + j*(384) -97 + j*(325) --158 + j*(865) -262 + j*(425) -339 + j*(-1) --26 + j*(-144) --1 + j*(16) -485 + j*(98) --5 + j*(-252) -454 + j*(428) -76 + j*(37) -391 + j*(-779) -179 + j*(151) -356 + j*(90) -223 + j*(138) -86 + j*(88) -479 + j*(-295) --902 + j*(626) --216 + j*(-370) -179 + j*(-93) -398 + j*(151) --5 + j*(-77) -166 + j*(-101) --133 + j*(-1) --11 + j*(-152) --386 + j*(274) --1024 + j*(298) -364 + j*(330) -126 + j*(54) --122 + j*(-207) -249 + j*(-1) -76 + j*(-6) --696 + j*(-358) -310 + j*(196) --867 + j*(1018) -732 + j*(-194) -838 + j*(245) -61 + j*(-140) -26 + j*(371) -999 + j*(223) -94 + j*(-182) --583 + j*(-18) --218 + j*(1023) -89 + j*(717) -44 + j*(131) --129 + j*(-115) -83 + j*(-7) --12 + j*(25) --1 + j*(581) -227 + j*(-414) -1023 + j*(-1) --1 + j*(-58) --579 + j*(-852) --4 + j*(-175) -195 + j*(-430) -118 + j*(-560) -57 + j*(-243) --170 + j*(-74) --1024 + j*(-733) --8 + j*(378) -78 + j*(175) -346 + j*(-210) -38 + j*(-272) --17 + j*(72) --109 + j*(-139) --313 + j*(1023) --482 + j*(-43) -975 + j*(186) --1 + j*(-289) --63 + j*(-167) -69 + j*(249) -104 + j*(-507) --14 + j*(-277) --252 + j*(578) --361 + j*(283) -698 + j*(292) -168 + j*(187) -172 + j*(84) -719 + j*(-906) -52 + j*(124) -312 + j*(435) --2 + j*(-546) --602 + j*(-290) --181 + j*(-770) --319 + j*(46) --57 + j*(-67) -488 + j*(-47) -673 + j*(-477) --53 + j*(-286) -886 + j*(845) -749 + j*(740) -685 + j*(-879) -145 + j*(76) -600 + j*(-50) -322 + j*(24) -68 + j*(38) --345 + j*(-77) -704 + j*(-331) -0 + j*(242) -446 + j*(-852) -165 + j*(0) -5 + j*(-65) -0 + j*(57) --141 + j*(0) -82 + j*(0) --400 + j*(-66) -0 + j*(1023) -290 + j*(109) -36 + j*(-91) -0 + j*(646) --191 + j*(-144) -20 + j*(37) -38 + j*(32) -0 + j*(619) -635 + j*(-191) -322 + j*(0) --446 + j*(-292) --14 + j*(-135) --165 + j*(-455) --662 + j*(125) -160 + j*(103) --510 + j*(-93) --951 + j*(-103) -330 + j*(480) -0 + j*(-84) --147 + j*(129) -29 + j*(0) --27 + j*(76) -178 + j*(214) --326 + j*(-308) --711 + j*(394) -0 + j*(578) -714 + j*(349) --104 + j*(-156) -331 + j*(-153) -208 + j*(-280) --66 + j*(-281) -538 + j*(-273) --308 + j*(-301) --190 + j*(-281) -202 + j*(180) --264 + j*(-189) --10 + j*(54) -62 + j*(142) -439 + j*(655) -284 + j*(249) -843 + j*(-920) --677 + j*(-1024) --1024 + j*(-893) --107 + j*(-51) -95 + j*(-706) --419 + j*(-285) --123 + j*(-179) -255 + j*(-683) --180 + j*(-551) --442 + j*(69) -212 + j*(77) --319 + j*(-716) --434 + j*(-381) -103 + j*(81) --23 + j*(-584) --216 + j*(1023) --1024 + j*(726) -1023 + j*(0) -23 + j*(-165) --64 + j*(-41) -590 + j*(-72) -0 + j*(-556) --101 + j*(-140) -257 + j*(-147) -0 + j*(-483) --28 + j*(-7) -184 + j*(34) -139 + j*(73) -201 + j*(0) -100 + j*(31) --39 + j*(-776) --1024 + j*(129) --846 + j*(744) -718 + j*(1023) -642 + j*(0) --25 + j*(-77) -187 + j*(1023) -849 + j*(41) -112 + j*(-123) -49 + j*(693) -289 + j*(80) -806 + j*(-202) -0 + j*(53) -244 + j*(333) -1023 + j*(0) -25 + j*(56) -907 + j*(878) -1023 + j*(0) -638 + j*(-1024) --616 + j*(-752) --848 + j*(-442) --128 + j*(-112) -525 + j*(-311) -630 + j*(-505) --147 + j*(-240) --235 + j*(-509) --1024 + j*(-252) --94 + j*(495) -255 + j*(97) -367 + j*(-79) -219 + j*(-748) -107 + j*(109) --936 + j*(208) -0 + j*(293) -299 + j*(876) -1023 + j*(0) -0 + j*(-1024) --156 + j*(-32) -290 + j*(0) -0 + j*(-1024) --273 + j*(-83) -467 + j*(-166) -7 + j*(-683) --246 + j*(-210) -320 + j*(0) -0 + j*(-651) -0 + j*(102) -182 + j*(73) --241 + j*(999) -384 + j*(-51) -1023 + j*(746) -86 + j*(-837) --418 + j*(-658) --149 + j*(33) -587 + j*(-59) -102 + j*(-475) --308 + j*(-82) -758 + j*(-418) --316 + j*(-1024) --390 + j*(-460) -339 + j*(-158) -89 + j*(-86) --865 + j*(-219) -235 + j*(-50) -125 + j*(-189) -79 + j*(0) -0 + j*(442) -0 + j*(-735) -1023 + j*(324) --113 + j*(8) -0 + j*(130) -264 + j*(-49) --325 + j*(-61) -257 + j*(-672) --152 + j*(0) --399 + j*(-3) -336 + j*(-251) --406 + j*(682) -138 + j*(314) -219 + j*(-121) --158 + j*(698) --124 + j*(1023) -1023 + j*(1023) -1023 + j*(-258) -1023 + j*(-1024) --358 + j*(55) -120 + j*(-139) --330 + j*(-866) --874 + j*(50) -562 + j*(-682) --833 + j*(-1024) --1024 + j*(-192) -707 + j*(-1024) --1024 + j*(-901) --1024 + j*(257) -895 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(64) -869 + j*(-801) -661 + j*(1023) -1023 + j*(53) -621 + j*(-698) -339 + j*(309) -1023 + j*(-67) --304 + j*(-537) -503 + j*(46) -409 + j*(-624) --160 + j*(-1024) -703 + j*(-497) --398 + j*(-54) --392 + j*(0) --139 + j*(1023) -1023 + j*(333) -896 + j*(-318) -1023 + j*(-1024) -637 + j*(1023) -1023 + j*(436) -1023 + j*(-1024) -263 + j*(1023) -1023 + j*(152) -1023 + j*(-1024) --322 + j*(1023) -1023 + j*(975) -1023 + j*(-6) --619 + j*(1023) -969 + j*(972) -1023 + j*(-588) -86 + j*(-537) --834 + j*(-1024) --494 + j*(-438) --1016 + j*(239) -183 + j*(-1024) --55 + j*(-1024) --1024 + j*(-649) -1023 + j*(-424) -989 + j*(-1024) --814 + j*(-1024) -1023 + j*(278) -1023 + j*(-1024) --266 + j*(-1024) -1023 + j*(722) -1023 + j*(-885) --493 + j*(-1024) --706 + j*(-1024) --1024 + j*(675) --722 + j*(783) -571 + j*(893) --1024 + j*(0) --176 + j*(808) -9 + j*(564) -124 + j*(29) -179 + j*(0) -9 + j*(-792) -502 + j*(42) -623 + j*(0) -24 + j*(-1024) -904 + j*(469) -1023 + j*(12) -6 + j*(-1024) --907 + j*(-611) --1024 + j*(0) --1024 + j*(1023) -715 + j*(1023) --1024 + j*(-674) --1024 + j*(1023) -119 + j*(1023) --954 + j*(-840) --1024 + j*(521) --1024 + j*(718) --554 + j*(-1024) --789 + j*(-858) --1024 + j*(78) -371 + j*(-1024) --92 + j*(-1024) --1024 + j*(7) --1024 + j*(357) -112 + j*(1023) -866 + j*(1023) -1023 + j*(-404) --896 + j*(1023) -182 + j*(1023) -1023 + j*(184) --361 + j*(677) --641 + j*(211) -267 + j*(-172) --582 + j*(-65) --19 + j*(236) --1024 + j*(735) -195 + j*(-710) --805 + j*(-981) --1024 + j*(1023) --173 + j*(1023) -1023 + j*(1023) -1023 + j*(698) -1023 + j*(-874) --108 + j*(1023) -1023 + j*(1023) -1023 + j*(-436) --633 + j*(1023) -991 + j*(1023) -1023 + j*(-590) --1024 + j*(1023) -613 + j*(1023) -1023 + j*(971) --1024 + j*(1023) --637 + j*(1023) -1023 + j*(681) -1023 + j*(-187) -241 + j*(-1024) --73 + j*(0) --201 + j*(474) -0 + j*(-456) -317 + j*(0) -576 + j*(140) --369 + j*(-516) -261 + j*(1023) -89 + j*(36) --921 + j*(952) -429 + j*(1023) -1023 + j*(641) --1024 + j*(962) -666 + j*(1023) -1023 + j*(84) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-944) --733 + j*(903) --993 + j*(-1024) --1024 + j*(-112) --441 + j*(1023) --1024 + j*(-1024) --1024 + j*(543) --971 + j*(1023) --1024 + j*(-883) --1024 + j*(1023) --439 + j*(1023) --1024 + j*(-874) --1024 + j*(726) --703 + j*(1023) -1023 + j*(977) -1023 + j*(902) -846 + j*(-1024) --571 + j*(-992) -1023 + j*(-72) -905 + j*(-826) --85 + j*(-786) -470 + j*(-527) --474 + j*(-725) --865 + j*(122) --357 + j*(183) --267 + j*(596) -658 + j*(1010) --822 + j*(-349) --1024 + j*(610) -718 + j*(953) -310 + j*(1023) -1023 + j*(-753) -1023 + j*(-847) --603 + j*(-1024) -1023 + j*(-124) -1023 + j*(-1024) -94 + j*(-1024) -1023 + j*(646) -1023 + j*(-1024) -21 + j*(-1024) -870 + j*(1023) -1023 + j*(-78) -1023 + j*(-1024) --173 + j*(1023) -773 + j*(1023) -621 + j*(-559) -1000 + j*(-206) -784 + j*(-1024) --900 + j*(-1024) --1024 + j*(-44) -1023 + j*(-1024) -330 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-916) -670 + j*(-1024) --1024 + j*(-980) -1023 + j*(472) -1023 + j*(-1024) --185 + j*(-1024) -1023 + j*(837) -1023 + j*(-391) --1024 + j*(-832) --266 + j*(571) --63 + j*(852) -876 + j*(-250) -666 + j*(555) --825 + j*(221) -1023 + j*(951) -773 + j*(131) --599 + j*(456) -1023 + j*(929) -405 + j*(73) --390 + j*(1023) -1023 + j*(871) -1023 + j*(-554) --630 + j*(1023) -1023 + j*(1023) -1023 + j*(-445) -901 + j*(-1024) -270 + j*(-1024) --1024 + j*(144) --1024 + j*(366) -516 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-527) -934 + j*(-436) -1023 + j*(-1024) --846 + j*(-735) -1023 + j*(-45) -1023 + j*(-1024) --347 + j*(-1024) -1023 + j*(644) -1023 + j*(-1024) -871 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-146) --1024 + j*(1023) -428 + j*(893) --1024 + j*(-860) --857 + j*(550) --28 + j*(456) --707 + j*(189) -150 + j*(517) --82 + j*(303) -651 + j*(137) -754 + j*(-1016) --309 + j*(-1024) -941 + j*(548) -668 + j*(-1024) --1013 + j*(-1024) --1024 + j*(-238) --1024 + j*(1023) -898 + j*(1023) -998 + j*(999) --1024 + j*(1023) --392 + j*(1023) -1023 + j*(1013) --1024 + j*(1023) --543 + j*(1023) -1023 + j*(1023) --1024 + j*(765) --485 + j*(1023) -1023 + j*(1023) --975 + j*(858) --328 + j*(1023) -986 + j*(1023) -215 + j*(369) -938 + j*(-1024) --1024 + j*(-1024) --1024 + j*(588) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(29) -851 + j*(-808) -507 + j*(-1024) --1024 + j*(-455) -1023 + j*(-332) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(434) -1023 + j*(-1024) -639 + j*(-1024) --1024 + j*(-164) --1024 + j*(193) --839 + j*(1023) -407 + j*(1023) --1024 + j*(-372) --1024 + j*(1023) --34 + j*(842) -103 + j*(503) -1023 + j*(40) -322 + j*(-452) -330 + j*(-80) -861 + j*(114) -402 + j*(-1024) -763 + j*(484) -1023 + j*(424) -295 + j*(-1024) --335 + j*(-1024) --1024 + j*(535) --1024 + j*(1023) -874 + j*(1023) --1024 + j*(-602) --1024 + j*(1023) -868 + j*(1023) --1024 + j*(1023) --805 + j*(1023) -1023 + j*(947) --1024 + j*(244) --380 + j*(1016) -749 + j*(669) --993 + j*(606) -1023 + j*(1023) -1023 + j*(17) -481 + j*(-1024) --919 + j*(-1024) --1024 + j*(-360) --1024 + j*(1012) --470 + j*(-1024) --1024 + j*(-645) --1024 + j*(784) -171 + j*(-922) --864 + j*(-307) --574 + j*(306) -927 + j*(-1002) --83 + j*(-1024) --1024 + j*(-1024) -1023 + j*(35) -337 + j*(-1024) -1 + j*(-930) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf1.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf1.m deleted file mode 100644 index 4a954beb84..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH0_sync_4xf1.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch0_sync_f_4x1 = [-1024 + j*(311) -76 + j*(-1024) --1024 + j*(-726) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(504) -923 + j*(-741) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(88) --871 + j*(1023) -1023 + j*(1023) -1023 + j*(-51) --1024 + j*(32) --668 + j*(1023) -365 + j*(1023) --1024 + j*(-548) --1024 + j*(24) --175 + j*(1023) --235 + j*(1023) -1023 + j*(429) -1023 + j*(-1024) --732 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) --421 + j*(-1024) -1023 + j*(1023) -1023 + j*(-434) -947 + j*(-1024) -1023 + j*(938) -1023 + j*(-1024) -779 + j*(-1024) -773 + j*(923) -1023 + j*(-428) -1023 + j*(-1024) --706 + j*(-1024) --1024 + j*(408) -389 + j*(1023) -879 + j*(645) --1024 + j*(1023) -550 + j*(1023) -980 + j*(849) --1024 + j*(1023) -750 + j*(1023) -1023 + j*(612) --1024 + j*(622) -319 + j*(1023) -1023 + j*(752) --1024 + j*(686) -661 + j*(1023) -1023 + j*(837) -956 + j*(-820) -123 + j*(-1024) --1024 + j*(-390) --1023 + j*(720) --741 + j*(-1024) --1024 + j*(-249) --982 + j*(1023) --1024 + j*(909) -609 + j*(-159) -1023 + j*(798) --1024 + j*(-1024) --1024 + j*(1023) --273 + j*(1023) --1024 + j*(-1024) --1024 + j*(1023) -107 + j*(1023) -1023 + j*(818) -1023 + j*(-1024) -1023 + j*(-1024) --1010 + j*(-1024) -1023 + j*(-325) -1023 + j*(-1024) --1015 + j*(-817) -284 + j*(726) -825 + j*(-467) -759 + j*(-185) --19 + j*(-654) --159 + j*(-328) -362 + j*(496) --711 + j*(-717) --1024 + j*(-253) -1023 + j*(1023) -28 + j*(1023) -1023 + j*(-1024) -489 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-402) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(678) -1023 + j*(-759) --339 + j*(-1024) -1023 + j*(452) -1023 + j*(-1024) --542 + j*(-1024) -1023 + j*(754) -1023 + j*(-1024) -1023 + j*(-1024) --747 + j*(-1024) --1024 + j*(-956) --689 + j*(1023) -147 + j*(392) --839 + j*(70) --345 + j*(-43) --580 + j*(-133) --138 + j*(1023) -76 + j*(-891) -974 + j*(-1024) -1020 + j*(-255) -1023 + j*(-702) -122 + j*(-1024) -959 + j*(329) -1023 + j*(-392) -1013 + j*(-1024) --918 + j*(-1024) --1024 + j*(265) --1024 + j*(1023) -336 + j*(971) --1024 + j*(-590) --1024 + j*(1023) --541 + j*(1023) --1024 + j*(-165) --1024 + j*(942) -827 + j*(1023) --66 + j*(-1024) --1024 + j*(-1024) --1024 + j*(775) -407 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-896) --1024 + j*(1023) -388 + j*(1023) -1023 + j*(826) -988 + j*(-964) -541 + j*(1023) -1023 + j*(1001) -837 + j*(-904) --922 + j*(830) --132 + j*(746) -946 + j*(193) -364 + j*(606) -1023 + j*(638) -1023 + j*(-1024) -500 + j*(498) -1023 + j*(539) -220 + j*(-1024) --1024 + j*(-757) --1024 + j*(1014) --89 + j*(1023) -1023 + j*(779) --1024 + j*(908) --596 + j*(1023) -982 + j*(1023) --1024 + j*(404) --1024 + j*(1023) -1023 + j*(1023) --1024 + j*(-620) --1024 + j*(1023) -361 + j*(1023) --1024 + j*(-927) --1024 + j*(904) --967 + j*(1023) -950 + j*(1023) -1023 + j*(-1018) -1023 + j*(-1024) --618 + j*(-1024) -1023 + j*(811) -1023 + j*(-1024) --397 + j*(-1024) -508 + j*(1023) -1023 + j*(553) -1023 + j*(-1024) -1023 + j*(754) -1023 + j*(-506) -1023 + j*(-1024) -900 + j*(699) -1023 + j*(394) -1023 + j*(313) -396 + j*(-1024) -135 + j*(-1024) -63 + j*(1023) -920 + j*(360) --1024 + j*(1023) -488 + j*(1023) -1023 + j*(182) --1024 + j*(786) -22 + j*(1023) -1023 + j*(411) --803 + j*(734) -446 + j*(1023) -1023 + j*(33) --844 + j*(668) -211 + j*(1023) -1023 + j*(-1) -576 + j*(-1024) --1 + j*(-887) --1024 + j*(-767) --729 + j*(219) -329 + j*(-1024) --895 + j*(-370) --678 + j*(-189) --429 + j*(-118) --422 + j*(-774) -287 + j*(-35) -796 + j*(-262) -789 + j*(-160) -664 + j*(-1024) -807 + j*(244) -977 + j*(-1024) --313 + j*(-1024) --1024 + j*(-436) --606 + j*(1023) --146 + j*(1023) -991 + j*(706) --1024 + j*(-189) --272 + j*(1023) -805 + j*(670) --1024 + j*(-257) --481 + j*(1017) -519 + j*(1023) --1024 + j*(65) --227 + j*(747) -32 + j*(1023) --1024 + j*(247) --658 + j*(665) -986 + j*(-630) --568 + j*(-228) --66 + j*(-483) --1015 + j*(764) --515 + j*(803) --1024 + j*(-1024) --1024 + j*(542) --577 + j*(1023) --1024 + j*(-569) --1024 + j*(576) -394 + j*(1023) --1024 + j*(-1024) --1024 + j*(911) -124 + j*(1023) --954 + j*(-1024) --1024 + j*(897) --90 + j*(837) -1019 + j*(1023) -509 + j*(144) -568 + j*(93) --165 + j*(-647) --25 + j*(621) -385 + j*(44) -174 + j*(-119) --1024 + j*(648) --41 + j*(1023) -1023 + j*(839) --40 + j*(573) --2 + j*(1023) -1023 + j*(0) --627 + j*(533) -199 + j*(1023) -1023 + j*(998) -1023 + j*(-1024) --717 + j*(-1024) --1024 + j*(-1020) --836 + j*(687) --320 + j*(-1024) --1024 + j*(-207) --1024 + j*(876) --992 + j*(-1024) --1024 + j*(255) --345 + j*(1023) --584 + j*(-1024) --1024 + j*(217) --155 + j*(1023) --742 + j*(-1024) --1024 + j*(-1) --260 + j*(1023) --1 + j*(1023) -1023 + j*(-1) -244 + j*(-739) --450 + j*(-964) -847 + j*(148) --82 + j*(-60) --404 + j*(-725) --505 + j*(229) --190 + j*(1001) -575 + j*(741) --41 + j*(-591) --772 + j*(1023) --340 + j*(1023) --586 + j*(-824) --1024 + j*(-333) --808 + j*(1023) -432 + j*(233) -1023 + j*(-16) -754 + j*(-582) --470 + j*(-588) -170 + j*(425) --68 + j*(-380) --262 + j*(-110) -71 + j*(-166) --1024 + j*(-501) -153 + j*(532) --1 + j*(-256) --468 + j*(-191) -716 + j*(43) --331 + j*(-738) --280 + j*(707) -886 + j*(708) -1023 + j*(539) -1023 + j*(-1024) -150 + j*(-1024) --727 + j*(-1024) -1023 + j*(-502) -1023 + j*(-1024) --592 + j*(-1024) -867 + j*(570) -1023 + j*(-510) -504 + j*(-806) -1023 + j*(430) -737 + j*(-627) -50 + j*(-916) -725 + j*(146) -719 + j*(572) -426 + j*(-1024) --619 + j*(502) --836 + j*(-74) -616 + j*(208) --28 + j*(-522) --1 + j*(254) -544 + j*(-1) --173 + j*(-1024) --95 + j*(215) -398 + j*(301) -420 + j*(-97) -948 + j*(309) -326 + j*(-151) --232 + j*(-36) -509 + j*(165) -116 + j*(-550) -93 + j*(142) --505 + j*(-142) --1 + j*(-158) -72 + j*(-1) -11 + j*(-223) -141 + j*(255) --173 + j*(-638) --195 + j*(-269) --381 + j*(-441) --1 + j*(-12) -11 + j*(352) -716 + j*(-120) -38 + j*(-196) --348 + j*(-920) -386 + j*(-43) -805 + j*(-400) --149 + j*(-449) --649 + j*(293) --341 + j*(-1) -653 + j*(308) -59 + j*(-312) --282 + j*(305) -833 + j*(-1) -131 + j*(-522) --428 + j*(-308) --902 + j*(573) -60 + j*(486) -183 + j*(71) --764 + j*(-1) -131 + j*(105) -368 + j*(-15) --613 + j*(-1) --378 + j*(283) --110 + j*(-172) -386 + j*(-1) -417 + j*(-93) -157 + j*(-260) -240 + j*(154) -358 + j*(-233) -127 + j*(-643) --1024 + j*(-458) --1024 + j*(962) -532 + j*(1023) -627 + j*(233) -419 + j*(94) --51 + j*(22) -284 + j*(37) -34 + j*(-523) --1024 + j*(184) -560 + j*(467) -512 + j*(-100) -348 + j*(-1) -22 + j*(-217) -72 + j*(35) -249 + j*(-1) --40 + j*(-609) --100 + j*(-1024) --927 + j*(-66) --760 + j*(888) -775 + j*(72) --302 + j*(-1) --1 + j*(-30) -482 + j*(-105) --397 + j*(-1) --366 + j*(143) --624 + j*(-345) --615 + j*(-1) --1 + j*(288) -313 + j*(-283) -167 + j*(290) -316 + j*(219) -332 + j*(-621) -230 + j*(-157) --670 + j*(1023) --201 + j*(-218) -583 + j*(349) --525 + j*(28) --189 + j*(104) -339 + j*(67) -157 + j*(-383) --537 + j*(-162) -208 + j*(-437) --352 + j*(667) --455 + j*(170) -230 + j*(-184) --736 + j*(240) --269 + j*(971) -288 + j*(-519) --963 + j*(-590) --787 + j*(-763) -108 + j*(1023) -527 + j*(296) --150 + j*(647) --317 + j*(465) -305 + j*(4) --592 + j*(752) --1 + j*(-80) -146 + j*(1023) -311 + j*(-1) -928 + j*(-960) -210 + j*(-307) -710 + j*(120) -824 + j*(-514) -303 + j*(-710) -316 + j*(-1024) -33 + j*(329) --1024 + j*(489) -749 + j*(498) -493 + j*(-717) -182 + j*(-416) -530 + j*(220) -446 + j*(-425) --154 + j*(-1024) --411 + j*(-80) --1024 + j*(835) --3 + j*(-127) -414 + j*(8) --431 + j*(-1) --1 + j*(384) -505 + j*(-304) -213 + j*(-1) --268 + j*(742) --397 + j*(-220) -383 + j*(413) --1 + j*(-77) -201 + j*(-182) -316 + j*(108) --1 + j*(-666) --328 + j*(362) --13 + j*(178) -260 + j*(-245) --862 + j*(-230) -384 + j*(-94) -266 + j*(-1024) --45 + j*(461) -559 + j*(-328) --224 + j*(-612) -19 + j*(886) --205 + j*(556) -342 + j*(546) --244 + j*(-893) --684 + j*(697) -274 + j*(203) --1006 + j*(-820) --1 + j*(309) --350 + j*(92) -182 + j*(-1) --1 + j*(669) -369 + j*(-45) --960 + j*(-1) -85 + j*(348) -389 + j*(-329) --538 + j*(7) --2 + j*(-1) --1 + j*(689) -273 + j*(627) --24 + j*(193) -353 + j*(328) -213 + j*(322) --826 + j*(250) -259 + j*(-1) --1 + j*(-76) --180 + j*(-341) --176 + j*(-129) -237 + j*(89) -56 + j*(-890) --591 + j*(-139) -119 + j*(-224) -470 + j*(-1024) --307 + j*(348) --940 + j*(188) -281 + j*(359) -392 + j*(-76) --193 + j*(-312) -275 + j*(283) --355 + j*(-668) --1 + j*(966) --901 + j*(0) -837 + j*(5) -0 + j*(231) -380 + j*(196) --458 + j*(-196) --359 + j*(346) -640 + j*(36) -53 + j*(0) --922 + j*(511) -1 + j*(74) --30 + j*(522) -394 + j*(-78) --269 + j*(26) -36 + j*(229) --41 + j*(-170) -174 + j*(-143) -1023 + j*(-348) --491 + j*(-416) --447 + j*(-100) -199 + j*(125) -0 + j*(-81) -133 + j*(-80) -482 + j*(-16) -9 + j*(-142) -85 + j*(730) --358 + j*(0) -41 + j*(465) -88 + j*(-76) -663 + j*(0) -83 + j*(193) -97 + j*(710) -919 + j*(0) -789 + j*(-143) -435 + j*(-600) -361 + j*(441) -208 + j*(100) --58 + j*(666) -306 + j*(414) -596 + j*(-53) --191 + j*(-88) --1024 + j*(261) -0 + j*(123) -37 + j*(529) --208 + j*(34) -0 + j*(-613) -87 + j*(273) --662 + j*(159) -0 + j*(-2) --137 + j*(1023) --124 + j*(305) -0 + j*(-503) -164 + j*(242) -740 + j*(-151) --185 + j*(-687) -346 + j*(212) -111 + j*(-702) --1024 + j*(-874) --497 + j*(486) --117 + j*(242) --155 + j*(60) --480 + j*(0) -11 + j*(81) --497 + j*(694) --25 + j*(0) -518 + j*(613) -0 + j*(-857) -455 + j*(0) -136 + j*(53) --380 + j*(-544) -157 + j*(204) -416 + j*(8) -157 + j*(-486) --826 + j*(209) --381 + j*(224) --8 + j*(429) --116 + j*(-312) --341 + j*(-260) -59 + j*(165) --265 + j*(-745) -926 + j*(0) --643 + j*(-205) --134 + j*(-953) --286 + j*(119) -32 + j*(-19) -0 + j*(-883) --376 + j*(-448) --36 + j*(-173) -323 + j*(-860) --627 + j*(-1024) --1003 + j*(0) -0 + j*(360) -0 + j*(-760) --537 + j*(0) -164 + j*(155) -452 + j*(-48) --24 + j*(-72) --198 + j*(414) --139 + j*(297) -363 + j*(-408) -194 + j*(132) --281 + j*(-200) --375 + j*(133) -420 + j*(120) --98 + j*(-491) --375 + j*(423) --459 + j*(398) --35 + j*(379) --133 + j*(179) --762 + j*(-298) -119 + j*(137) -0 + j*(-53) -319 + j*(137) --1024 + j*(0) -0 + j*(460) --356 + j*(234) -194 + j*(101) -0 + j*(-90) --112 + j*(503) -432 + j*(116) -0 + j*(-765) --63 + j*(-733) --1024 + j*(516) --68 + j*(359) -164 + j*(-632) --125 + j*(-323) -99 + j*(121) --268 + j*(-218) --638 + j*(1023) -711 + j*(577) -1023 + j*(5) -809 + j*(-1024) -198 + j*(-23) -909 + j*(0) -374 + j*(-618) -480 + j*(-75) -905 + j*(45) -1023 + j*(-783) --428 + j*(-721) -60 + j*(650) -24 + j*(-628) --369 + j*(-492) -187 + j*(407) -91 + j*(518) -579 + j*(-670) -773 + j*(-1024) --572 + j*(-874) --857 + j*(0) -160 + j*(275) -0 + j*(346) --386 + j*(0) -362 + j*(240) -0 + j*(-431) --526 + j*(-112) --346 + j*(407) --69 + j*(400) -0 + j*(564) --204 + j*(0) -163 + j*(240) -0 + j*(304) --798 + j*(0) -439 + j*(0) -0 + j*(-366) -312 + j*(-477) -186 + j*(126) -176 + j*(413) -79 + j*(-393) -399 + j*(48) -985 + j*(-280) -416 + j*(-491) --681 + j*(-633) -72 + j*(577) -101 + j*(765) --33 + j*(-216) -260 + j*(388) -54 + j*(640) --414 + j*(146) -75 + j*(477) -124 + j*(1023) --64 + j*(-331) -214 + j*(75) -0 + j*(202) -497 + j*(0) -437 + j*(-236) -693 + j*(-201) -995 + j*(-178) --362 + j*(-689) -597 + j*(1023) -1023 + j*(156) -469 + j*(-1024) -850 + j*(1023) -1023 + j*(246) -974 + j*(-1024) --1024 + j*(-814) --1024 + j*(281) --440 + j*(1023) -836 + j*(1023) --1024 + j*(285) --574 + j*(1023) -903 + j*(1023) --96 + j*(-910) -656 + j*(-419) --651 + j*(179) --1024 + j*(762) --52 + j*(1023) -1023 + j*(568) --822 + j*(968) -772 + j*(641) -1023 + j*(-885) --158 + j*(-1024) --1024 + j*(-919) --1024 + j*(338) --1024 + j*(1023) --145 + j*(-1024) --1024 + j*(0) --1024 + j*(1023) -0 + j*(-1024) --1024 + j*(-1024) --1024 + j*(516) -88 + j*(-1024) --1024 + j*(-1024) --1024 + j*(349) -719 + j*(-1024) --325 + j*(-1024) --1024 + j*(-294) --1024 + j*(227) -813 + j*(482) -1014 + j*(1023) -884 + j*(8) --546 + j*(1023) -439 + j*(1023) -863 + j*(408) --141 + j*(-1007) --208 + j*(-40) --1024 + j*(260) --192 + j*(557) -0 + j*(-912) --125 + j*(0) -485 + j*(673) -0 + j*(-838) -252 + j*(-838) --1020 + j*(923) --1024 + j*(-659) --1024 + j*(1023) -871 + j*(1023) --1024 + j*(-407) --1024 + j*(1023) -903 + j*(1023) --518 + j*(-1024) --1024 + j*(518) --826 + j*(1023) --1024 + j*(-946) --1024 + j*(771) --225 + j*(1023) --1024 + j*(-872) --1024 + j*(12) --850 + j*(1023) --31 + j*(899) -328 + j*(170) -908 + j*(-1024) --820 + j*(-188) -1023 + j*(-43) --30 + j*(-1024) --872 + j*(388) -805 + j*(-454) --1008 + j*(-765) --1024 + j*(-109) -139 + j*(-733) --175 + j*(-1024) --1024 + j*(-19) -539 + j*(-794) --120 + j*(-1024) --1024 + j*(-659) --1024 + j*(678) --40 + j*(1023) -1023 + j*(496) -868 + j*(-427) -30 + j*(1023) -1013 + j*(567) -988 + j*(-54) -683 + j*(1023) -1023 + j*(-786) -651 + j*(-1024) --162 + j*(840) -1023 + j*(-211) -808 + j*(-998) -447 + j*(800) -864 + j*(-757) -683 + j*(-370) --1024 + j*(-1024) --808 + j*(33) --765 + j*(1023) -879 + j*(1023) --1024 + j*(-159) --1024 + j*(1023) -849 + j*(1023) --1024 + j*(-227) --724 + j*(1023) -123 + j*(1023) --1024 + j*(-930) --1024 + j*(1023) --39 + j*(1023) --1024 + j*(-845) --1024 + j*(845) --1024 + j*(1023) -105 + j*(1023) -935 + j*(332) -733 + j*(-513) --596 + j*(-290) -52 + j*(-356) --220 + j*(-146) --312 + j*(223) -1023 + j*(407) -459 + j*(353) --335 + j*(-629) --785 + j*(-545) --1024 + j*(413) --661 + j*(1023) --1024 + j*(-606) --1024 + j*(929) --556 + j*(1023) -1023 + j*(1023) -1023 + j*(-801) -1023 + j*(-1024) --1024 + j*(-871) -1023 + j*(4) -1023 + j*(-1024) --1024 + j*(-919) -1023 + j*(561) -1023 + j*(-1024) --451 + j*(-1024) -1023 + j*(185) -1023 + j*(-1024) --877 + j*(-1024) -1023 + j*(637) -1023 + j*(-1024) -883 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-914) --666 + j*(1023) -368 + j*(1023) --1024 + j*(-449) --1024 + j*(502) --235 + j*(1023) --593 + j*(-914) --1024 + j*(-63) --1024 + j*(937) --857 + j*(-1024) --1024 + j*(-778) --1024 + j*(742) -146 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-394) --1024 + j*(1023) -107 + j*(1023) -1023 + j*(1023) -1023 + j*(161) --1024 + j*(1023) -426 + j*(1023) -1023 + j*(1023) --1024 + j*(1023) -164 + j*(1023) -1023 + j*(1023) --1024 + j*(-248) --1024 + j*(1023) -1023 + j*(1023) --1024 + j*(-616) --947 + j*(1023) -1023 + j*(1023) -1023 + j*(974) -657 + j*(-1024) --742 + j*(-1024) --795 + j*(-388) -1023 + j*(-781) --64 + j*(-1024) --571 + j*(379) -166 + j*(-235) -0 + j*(561) --507 + j*(456) --978 + j*(-780) --1024 + j*(272) --618 + j*(1023) --976 + j*(-739) --1024 + j*(938) -142 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --98 + j*(-1024) --1024 + j*(-678) -1023 + j*(-1004) --90 + j*(-1024) --1024 + j*(-361) -1023 + j*(-640) --13 + j*(-1024) --1024 + j*(-889) -795 + j*(-1024) --721 + j*(-1024) --1024 + j*(-693) -725 + j*(-917) --187 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --432 + j*(1023) -1023 + j*(-289) -268 + j*(-396) -558 + j*(1023) -1023 + j*(-221) --274 + j*(103) -712 + j*(138) -250 + j*(-799) --822 + j*(-410) -104 + j*(-917) --215 + j*(-1024) --1024 + j*(-32) -461 + j*(-890) --554 + j*(-1024) --966 + j*(161) --1024 + j*(867) -877 + j*(1023) -1023 + j*(702) -587 + j*(-539) -594 + j*(1023) -1023 + j*(801) -235 + j*(-21) -645 + j*(722) -749 + j*(679) --472 + j*(-807) --113 + j*(-510) --737 + j*(-827) --1024 + j*(-164) -327 + j*(-660) --1024 + j*(-1024) --1024 + j*(-381) --201 + j*(975) -829 + j*(1023) -1023 + j*(1023) -750 + j*(-504) --227 + j*(1023) -1023 + j*(1023) -556 + j*(19) --266 + j*(930) --250 + j*(966) -378 + j*(-225) --431 + j*(-321) -76 + j*(273) --660 + j*(-695) -41 + j*(-669) -485 + j*(-523) --214 + j*(53) --1024 + j*(290) -937 + j*(1023) -1023 + j*(518) -791 + j*(-1024) -770 + j*(1023) -1023 + j*(176) -976 + j*(-1020) -1023 + j*(1023) -1023 + j*(-560) -1023 + j*(-1024) -190 + j*(1023) -1023 + j*(180) -1023 + j*(-1024) -394 + j*(1023) -1023 + j*(-1024) -642 + j*(-1024) --1024 + j*(-1024) --1024 + j*(453) --177 + j*(495) -574 + j*(1023) --871 + j*(718) --884 + j*(853) -272 + j*(1023) --1024 + j*(440) --1024 + j*(970) -203 + j*(674) --1024 + j*(-1024) --599 + j*(835) --794 + j*(736) --282 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(304) -1023 + j*(-767) -219 + j*(1023) -1023 + j*(1023) -1023 + j*(-142) --792 + j*(1023) -1023 + j*(1023) -1023 + j*(-279) --1024 + j*(1023) -919 + j*(1023) -1023 + j*(693) --1024 + j*(1023) -463 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -985 + j*(-1024) --1024 + j*(-1024) --1024 + j*(742) --609 + j*(-1024) --1024 + j*(-176) --1024 + j*(1023) -556 + j*(-334) --1024 + j*(-1024) --897 + j*(-364) --298 + j*(-1024) --1024 + j*(-89) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf0.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf0.m deleted file mode 100644 index be063e0c02..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf0.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch1_sync_f_4x0 = [1023 + j*(-1024) --156 + j*(-826) --1024 + j*(-1024) --467 + j*(516) -18 + j*(-1024) --509 + j*(-160) -189 + j*(339) --748 + j*(-384) --446 + j*(1023) -470 + j*(414) --817 + j*(750) -796 + j*(1023) -1023 + j*(402) --929 + j*(881) -1023 + j*(1023) -1023 + j*(985) -1023 + j*(-1024) --876 + j*(-1024) --1024 + j*(-725) --922 + j*(1023) --731 + j*(-1024) --1024 + j*(-519) --856 + j*(1023) --1024 + j*(-1024) --1024 + j*(-359) --763 + j*(1023) --1024 + j*(-1024) --1024 + j*(523) --777 + j*(1023) --1024 + j*(-1024) --1024 + j*(231) --752 + j*(1023) -1023 + j*(1023) -1023 + j*(-415) -847 + j*(-1024) --838 + j*(-806) -1023 + j*(-678) -636 + j*(-1024) --666 + j*(-545) -1023 + j*(-407) -540 + j*(-708) --615 + j*(-349) --69 + j*(-413) --776 + j*(742) --488 + j*(1023) --575 + j*(-588) --1024 + j*(289) -102 + j*(1023) -1023 + j*(1023) -1023 + j*(-353) --74 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-49) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-484) --366 + j*(-1024) --1024 + j*(-1024) -1023 + j*(388) -1023 + j*(-1024) --758 + j*(-1024) -1023 + j*(650) -1023 + j*(-1024) -786 + j*(-1024) --834 + j*(-1024) --1024 + j*(-514) --1024 + j*(1023) -327 + j*(1023) --1024 + j*(-656) --1024 + j*(1016) --404 + j*(1023) --967 + j*(-1024) --1024 + j*(-55) --1024 + j*(1023) -46 + j*(-1024) --1024 + j*(-909) --1024 + j*(181) -616 + j*(-1024) --286 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(-348) --246 + j*(1023) -818 + j*(1023) -928 + j*(246) --1024 + j*(426) --1024 + j*(995) -163 + j*(808) --472 + j*(-469) -332 + j*(-318) --1024 + j*(-58) -198 + j*(-935) --370 + j*(-1024) --1024 + j*(-341) --1024 + j*(1023) --484 + j*(1023) -1023 + j*(1023) -1023 + j*(-636) --587 + j*(1023) -847 + j*(1023) -1023 + j*(154) --1024 + j*(1023) -351 + j*(1023) -1023 + j*(491) --1024 + j*(805) --261 + j*(1023) -706 + j*(1023) --1024 + j*(-275) --1024 + j*(1023) -622 + j*(1023) -1023 + j*(873) -1023 + j*(-1024) -549 + j*(-1024) --94 + j*(-1024) -1023 + j*(664) -1023 + j*(55) -965 + j*(-1024) -315 + j*(1023) -1023 + j*(906) -1023 + j*(-714) --409 + j*(1023) -1023 + j*(1023) -1023 + j*(-50) --861 + j*(1023) -1023 + j*(1023) -1023 + j*(-1017) -1023 + j*(-963) --1009 + j*(-1024) --1024 + j*(-1024) --849 + j*(690) -101 + j*(-1024) --1024 + j*(-650) --653 + j*(804) --388 + j*(-1008) -1023 + j*(-454) --387 + j*(1023) --814 + j*(-847) --982 + j*(1023) --352 + j*(1023) --887 + j*(-802) --1024 + j*(-422) --826 + j*(1023) -773 + j*(821) -1023 + j*(-764) -105 + j*(-1024) --838 + j*(-809) -1023 + j*(-494) --216 + j*(-1024) --930 + j*(-677) -1023 + j*(-1024) --612 + j*(-1024) --1024 + j*(-690) -766 + j*(-859) --749 + j*(-1024) --1024 + j*(248) -704 + j*(-1006) --312 + j*(-1024) --1024 + j*(262) --1024 + j*(436) -52 + j*(1023) -1023 + j*(-876) -1023 + j*(-813) -119 + j*(1023) -1023 + j*(1023) -1023 + j*(-230) --743 + j*(1023) -428 + j*(1023) -1023 + j*(445) --1024 + j*(642) --131 + j*(1023) -722 + j*(1023) --1024 + j*(-302) --1024 + j*(643) --560 + j*(1023) -1023 + j*(1023) -1023 + j*(164) -674 + j*(-1024) --389 + j*(-1024) -1023 + j*(498) -1023 + j*(-1024) -276 + j*(-1024) -56 + j*(-67) -1023 + j*(-674) --276 + j*(351) --363 + j*(530) -436 + j*(853) -325 + j*(640) --850 + j*(-204) --1024 + j*(796) -123 + j*(1023) -739 + j*(239) -1023 + j*(-734) -280 + j*(-1024) --849 + j*(-1024) -1023 + j*(-123) -378 + j*(-1024) --678 + j*(-1024) -1023 + j*(449) -660 + j*(-600) --317 + j*(-1024) -1023 + j*(143) -261 + j*(-885) --1 + j*(-865) -864 + j*(-360) --320 + j*(-766) --1024 + j*(-18) --1024 + j*(526) -1023 + j*(1023) -1023 + j*(563) -1023 + j*(-1024) -1023 + j*(1023) -1023 + j*(302) -1023 + j*(-1024) --139 + j*(1023) -1023 + j*(1023) -1023 + j*(-587) --480 + j*(1023) -1023 + j*(539) -1023 + j*(-135) --874 + j*(1023) -1021 + j*(1023) -1023 + j*(181) -219 + j*(-963) --329 + j*(-1024) --1024 + j*(-195) --750 + j*(192) -108 + j*(-1024) --620 + j*(-9) --188 + j*(-123) --650 + j*(37) -1023 + j*(-1024) -492 + j*(761) --491 + j*(221) --423 + j*(613) -159 + j*(1023) --835 + j*(-220) --753 + j*(885) -207 + j*(1023) -663 + j*(869) -1023 + j*(-209) -91 + j*(-1024) --417 + j*(-1024) -1023 + j*(73) -1023 + j*(-928) -296 + j*(-1024) -1023 + j*(1023) -1023 + j*(-204) -954 + j*(-1024) -705 + j*(1023) -1023 + j*(383) -1023 + j*(-1024) --318 + j*(1023) -1023 + j*(1023) -1023 + j*(255) -1023 + j*(-1024) --1 + j*(-1024) --717 + j*(-1024) --1024 + j*(-62) -225 + j*(-1024) --1 + j*(-1024) --1024 + j*(-597) -973 + j*(143) -1023 + j*(-1024) -127 + j*(-848) -1023 + j*(682) -972 + j*(-1024) -607 + j*(-1024) -1023 + j*(962) -1016 + j*(-831) -147 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) -53 + j*(1023) -856 + j*(680) --898 + j*(622) -188 + j*(939) -836 + j*(327) --840 + j*(182) -436 + j*(1023) -848 + j*(304) --720 + j*(1023) -1023 + j*(920) -1023 + j*(403) --861 + j*(1023) -915 + j*(1023) -1023 + j*(446) -1023 + j*(-1024) -299 + j*(-1024) --1024 + j*(-753) --830 + j*(599) -519 + j*(-915) --466 + j*(-1024) --453 + j*(168) --493 + j*(319) --492 + j*(989) -995 + j*(130) --155 + j*(575) --1 + j*(1023) -1023 + j*(-1) --543 + j*(921) -589 + j*(1023) -1023 + j*(-445) -1023 + j*(-1024) --386 + j*(-1024) --1024 + j*(287) --1024 + j*(795) --443 + j*(-1024) --1024 + j*(-693) --1024 + j*(504) -616 + j*(-1024) --1024 + j*(-1024) --1024 + j*(79) -417 + j*(-807) --503 + j*(-214) --575 + j*(-3) -182 + j*(-248) -254 + j*(-456) --1 + j*(-86) -274 + j*(-157) --615 + j*(-1) --1 + j*(-596) --372 + j*(92) -234 + j*(-15) --25 + j*(-710) --399 + j*(27) -447 + j*(-77) --864 + j*(-1024) --69 + j*(-303) -337 + j*(-328) --1 + j*(-394) --1 + j*(-44) -198 + j*(-159) --313 + j*(-1) --308 + j*(-415) --267 + j*(-139) --446 + j*(-175) --618 + j*(498) --112 + j*(-49) -66 + j*(-635) --589 + j*(204) --225 + j*(-107) -414 + j*(-1024) --495 + j*(-666) --1024 + j*(-276) -228 + j*(-89) --770 + j*(164) --1 + j*(71) -128 + j*(-29) --753 + j*(348) --1 + j*(-169) --1024 + j*(1023) -504 + j*(-78) -718 + j*(1023) --60 + j*(-52) --631 + j*(147) --1 + j*(246) --41 + j*(-120) --544 + j*(136) --1 + j*(550) -290 + j*(567) -175 + j*(-1) --59 + j*(-102) --1 + j*(531) -102 + j*(8) --1024 + j*(412) --96 + j*(278) -1023 + j*(800) -272 + j*(-174) --2 + j*(-156) -3 + j*(-65) --517 + j*(-422) --109 + j*(304) -3 + j*(-132) -1023 + j*(-299) -800 + j*(530) --465 + j*(-976) -94 + j*(114) --240 + j*(-1) -78 + j*(501) -27 + j*(95) --251 + j*(-338) -84 + j*(88) -38 + j*(332) --138 + j*(-96) --1 + j*(767) --64 + j*(-3) --609 + j*(-1) -409 + j*(-1) --78 + j*(-67) -58 + j*(-278) -373 + j*(-737) --228 + j*(-10) -107 + j*(0) --335 + j*(-154) --171 + j*(-1) -71 + j*(-6) --1 + j*(-583) --868 + j*(-1) --1024 + j*(111) --61 + j*(1023) -682 + j*(817) -59 + j*(-77) --110 + j*(664) --252 + j*(642) -95 + j*(-115) -401 + j*(-487) --600 + j*(1023) --699 + j*(-459) -12 + j*(149) --176 + j*(-87) --17 + j*(54) --24 + j*(92) --564 + j*(-456) -71 + j*(609) --900 + j*(956) -964 + j*(-1024) -495 + j*(-32) --24 + j*(-30) -23 + j*(166) --99 + j*(-569) -13 + j*(-23) -41 + j*(312) --1 + j*(615) -216 + j*(-1) -25 + j*(83) --1 + j*(281) -942 + j*(-1) --7 + j*(49) --1 + j*(167) --1 + j*(-1) --1024 + j*(831) --1 + j*(-266) -781 + j*(194) --2 + j*(-41) --1 + j*(260) -232 + j*(105) -32 + j*(-70) -472 + j*(-475) -813 + j*(-300) --547 + j*(-617) -3 + j*(70) --332 + j*(-91) --126 + j*(-1) --22 + j*(24) --381 + j*(-421) -1023 + j*(102) --591 + j*(223) -161 + j*(-773) --799 + j*(28) --6 + j*(-67) -488 + j*(171) --245 + j*(-478) -22 + j*(-88) --258 + j*(-609) --1024 + j*(-1024) --521 + j*(312) -27 + j*(36) --274 + j*(22) -264 + j*(-471) -12 + j*(-30) -32 + j*(-628) --96 + j*(36) --892 + j*(1023) -553 + j*(301) -10 + j*(147) -78 + j*(-160) -99 + j*(-247) --142 + j*(163) -113 + j*(-109) -48 + j*(-292) -962 + j*(-14) --647 + j*(-50) -191 + j*(280) -243 + j*(-181) --188 + j*(-247) -21 + j*(154) -420 + j*(-157) -437 + j*(-114) --241 + j*(-371) --1 + j*(614) --364 + j*(-45) -56 + j*(29) -529 + j*(402) -108 + j*(-248) -98 + j*(3) --400 + j*(76) --1024 + j*(1023) -197 + j*(399) --52 + j*(71) --884 + j*(76) --68 + j*(861) --23 + j*(13) --654 + j*(17) --475 + j*(121) --1 + j*(302) -244 + j*(37) -116 + j*(85) -103 + j*(-71) -170 + j*(-134) --625 + j*(-1) --1 + j*(-70) --11 + j*(-84) --407 + j*(-1) -54 + j*(-79) --97 + j*(-175) --507 + j*(229) --161 + j*(128) --89 + j*(90) --276 + j*(586) --685 + j*(377) -1023 + j*(0) -180 + j*(825) -0 + j*(-764) -11 + j*(-42) --19 + j*(85) -637 + j*(159) -84 + j*(-71) --29 + j*(-174) -381 + j*(-339) --217 + j*(-150) --12 + j*(120) --503 + j*(-63) --4 + j*(-371) -0 + j*(65) --834 + j*(88) --286 + j*(-866) --267 + j*(804) -406 + j*(-62) -0 + j*(1023) -111 + j*(0) -171 + j*(-48) -0 + j*(883) -191 + j*(15) --374 + j*(286) --538 + j*(1023) -490 + j*(0) --150 + j*(131) --22 + j*(94) -776 + j*(-81) --108 + j*(55) -0 + j*(327) -871 + j*(0) --178 + j*(165) -38 + j*(166) -563 + j*(0) -41 + j*(-18) -67 + j*(151) -192 + j*(220) -129 + j*(6) -272 + j*(478) -523 + j*(1023) -453 + j*(-321) --142 + j*(83) --565 + j*(458) -390 + j*(-28) --118 + j*(10) --708 + j*(872) -381 + j*(674) -257 + j*(948) -318 + j*(-572) -1023 + j*(-544) -5 + j*(-80) -104 + j*(144) -25 + j*(-74) -74 + j*(-82) -0 + j*(-307) --1024 + j*(-282) --264 + j*(-169) -0 + j*(85) -391 + j*(0) --635 + j*(0) -8 + j*(21) -152 + j*(-704) --339 + j*(139) --1024 + j*(-351) -143 + j*(513) -685 + j*(95) -138 + j*(-34) -126 + j*(570) -377 + j*(277) -215 + j*(-8) --96 + j*(580) -446 + j*(1023) -444 + j*(-4) --135 + j*(127) -410 + j*(339) -490 + j*(233) --74 + j*(32) -202 + j*(346) -153 + j*(-256) --58 + j*(-595) --300 + j*(0) --71 + j*(624) -122 + j*(-50) --323 + j*(-202) --760 + j*(296) -232 + j*(-30) --218 + j*(374) -0 + j*(1023) -550 + j*(195) --143 + j*(185) --287 + j*(809) -474 + j*(458) --89 + j*(96) --713 + j*(0) -613 + j*(242) --425 + j*(77) -64 + j*(0) -0 + j*(543) -94 + j*(33) --318 + j*(0) --56 + j*(88) -0 + j*(68) -399 + j*(282) -127 + j*(0) -131 + j*(-514) --78 + j*(98) --330 + j*(0) --33 + j*(13) --110 + j*(31) --476 + j*(522) --1024 + j*(400) -759 + j*(741) -408 + j*(484) --39 + j*(-192) -102 + j*(5) -0 + j*(-135) -0 + j*(-140) -203 + j*(58) --274 + j*(-617) --539 + j*(610) --473 + j*(215) --190 + j*(99) -160 + j*(430) -0 + j*(68) --99 + j*(26) -206 + j*(67) -422 + j*(678) -82 + j*(51) --578 + j*(209) -97 + j*(18) -156 + j*(19) --550 + j*(579) --49 + j*(753) -286 + j*(99) -78 + j*(563) -693 + j*(1023) -621 + j*(-192) --298 + j*(144) -407 + j*(249) -60 + j*(72) --199 + j*(57) -524 + j*(-203) -168 + j*(-46) --146 + j*(-1024) --372 + j*(-462) --143 + j*(0) -62 + j*(41) --267 + j*(-21) -156 + j*(0) -182 + j*(119) -186 + j*(-493) -259 + j*(-365) --85 + j*(-189) --253 + j*(58) --219 + j*(270) -7 + j*(638) --145 + j*(0) --186 + j*(218) -0 + j*(26) --187 + j*(-351) -276 + j*(0) -68 + j*(-694) -153 + j*(37) --110 + j*(189) -467 + j*(226) -299 + j*(155) -217 + j*(0) --42 + j*(622) --21 + j*(-428) --369 + j*(101) -807 + j*(570) -656 + j*(-95) --226 + j*(-7) -631 + j*(1023) --127 + j*(-163) -910 + j*(-116) --669 + j*(4) -1023 + j*(0) -262 + j*(-73) --113 + j*(1023) -912 + j*(785) -660 + j*(-13) --927 + j*(-316) --115 + j*(291) -177 + j*(601) --661 + j*(864) -475 + j*(1023) -1023 + j*(288) --760 + j*(878) --234 + j*(1023) -1023 + j*(243) -1023 + j*(-1024) -36 + j*(-1024) --1024 + j*(-471) --1024 + j*(823) -274 + j*(-1024) --1024 + j*(-429) --1024 + j*(653) -412 + j*(-1024) --1024 + j*(-88) --1024 + j*(188) -267 + j*(-1024) --1024 + j*(-1024) --1024 + j*(492) -625 + j*(-1024) --1024 + j*(-1024) --971 + j*(9) --682 + j*(1023) --307 + j*(8) -271 + j*(1023) -852 + j*(-210) --532 + j*(249) -0 + j*(1023) -519 + j*(406) --1024 + j*(-119) --70 + j*(980) -115 + j*(1023) --1024 + j*(0) --68 + j*(1023) -0 + j*(1023) --1024 + j*(-535) --845 + j*(486) -37 + j*(1023) -1023 + j*(1023) -1023 + j*(-79) -124 + j*(-1024) --646 + j*(-994) -1023 + j*(-224) -1023 + j*(-1024) --592 + j*(-802) -863 + j*(-318) --128 + j*(-791) --1023 + j*(-332) -645 + j*(-596) --1001 + j*(-1024) --1024 + j*(-367) -624 + j*(-865) -267 + j*(-1024) --1024 + j*(0) --1024 + j*(1023) -61 + j*(1023) -1023 + j*(0) -1023 + j*(-606) -0 + j*(1023) -499 + j*(1023) -1023 + j*(-44) --916 + j*(810) -174 + j*(1023) -1023 + j*(596) --1024 + j*(270) -0 + j*(1023) -0 + j*(950) --1024 + j*(-110) --295 + j*(0) -0 + j*(1023) -0 + j*(726) -1023 + j*(-7) -1023 + j*(-654) --478 + j*(-1024) -1023 + j*(819) -1023 + j*(-516) -81 + j*(-1024) -1023 + j*(1023) -943 + j*(970) -1023 + j*(-1024) -795 + j*(1023) -1023 + j*(-481) -1023 + j*(-656) -858 + j*(1023) -1023 + j*(71) -723 + j*(-506) --13 + j*(-1018) --860 + j*(-185) -347 + j*(534) -1023 + j*(714) --1024 + j*(993) --133 + j*(1023) -1023 + j*(677) --1024 + j*(336) -117 + j*(991) -1023 + j*(687) --1024 + j*(931) --58 + j*(1023) -800 + j*(1023) --1024 + j*(888) --1024 + j*(712) -377 + j*(907) -396 + j*(536) -677 + j*(-911) --45 + j*(-206) --700 + j*(882) --792 + j*(-1024) --1024 + j*(380) --422 + j*(1023) --1024 + j*(-765) --745 + j*(354) -214 + j*(1023) --1024 + j*(-790) --1024 + j*(543) -310 + j*(1023) --1024 + j*(-764) --1024 + j*(325) -245 + j*(1023) -341 + j*(711) -1023 + j*(-350) --302 + j*(-1024) --592 + j*(-1024) -1023 + j*(-323) -156 + j*(-989) --57 + j*(-1024) -1023 + j*(339) -434 + j*(134) -219 + j*(-1024) -195 + j*(1023) -1023 + j*(915) -1023 + j*(-4) --435 + j*(1023) -1023 + j*(1023) -1023 + j*(914) -1023 + j*(-1024) -512 + j*(-1024) --1024 + j*(-649) --1024 + j*(820) --263 + j*(-1024) --1024 + j*(-1024) --1024 + j*(670) -915 + j*(-1024) --1024 + j*(-865) --1024 + j*(-21) -726 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-54) -783 + j*(-1024) --786 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --455 + j*(1023) -1023 + j*(1023) -981 + j*(-753) --116 + j*(1023) -1023 + j*(1023) -1023 + j*(-576) -118 + j*(723) -1023 + j*(501) -570 + j*(-720) --501 + j*(1023) -1023 + j*(1023) -1023 + j*(433) --663 + j*(1023) --330 + j*(1023) -1023 + j*(-36) --142 + j*(-843) --586 + j*(-1024) --1024 + j*(419) --1024 + j*(1023) --665 + j*(-1024) --1024 + j*(-1023) --1024 + j*(1023) --150 + j*(-1024) --1024 + j*(-327) --1024 + j*(1023) -518 + j*(-1024) --1024 + j*(-1024) --1024 + j*(102) -782 + j*(-1024) --865 + j*(-1024) --1024 + j*(-279) --1024 + j*(1023) -93 + j*(1023) -1023 + j*(839) -871 + j*(-315) --120 + j*(247) --834 + j*(1023) -524 + j*(320) -269 + j*(-478) --1024 + j*(455) --939 + j*(-37) --329 + j*(-818) --824 + j*(-1024) --1024 + j*(712) -260 + j*(-1024) --1024 + j*(-1024) --1024 + j*(249) --1024 + j*(1023) -923 + j*(1023) -1023 + j*(1023) -1023 + j*(-605) --698 + j*(1023) -1023 + j*(1023) -1023 + j*(222) --1024 + j*(1023) -90 + j*(1023) -1023 + j*(1023) --1024 + j*(448) --1004 + j*(1023) -42 + j*(1023) --1024 + j*(-441) --1024 + j*(158) --823 + j*(1023) --195 + j*(1023) -1023 + j*(751) -794 + j*(-1024) --312 + j*(-1024) -1023 + j*(1023) -1023 + j*(-458) -324 + j*(-828) -822 + j*(-23) -1023 + j*(620) --326 + j*(-438) --551 + j*(343) --452 + j*(1023) -539 + j*(1023) --886 + j*(-332) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(902) -1023 + j*(-1024) --635 + j*(-1024) -1023 + j*(833) -1023 + j*(-1024) --251 + j*(-1024) -1023 + j*(1023) -1023 + j*(-88) -85 + j*(-1024) -1023 + j*(1023) -1023 + j*(-528) -1023 + j*(-1024) -1023 + j*(1023) -1023 + j*(-153) -514 + j*(-1024) --786 + j*(-1024) --1024 + j*(-626) --38 + j*(1023) -931 + j*(1023) --1024 + j*(731) --826 + j*(1023) -1019 + j*(1023) --1024 + j*(-631) --267 + j*(1023) -198 + j*(1023) --1024 + j*(-349) --1024 + j*(1023) -516 + j*(1023) --1024 + j*(-705) --1024 + j*(1023) --112 + j*(1023) -1023 + j*(1023) -1023 + j*(-579) -1023 + j*(-1024) --487 + j*(-1021) -1023 + j*(677) -1023 + j*(142) -18 + j*(-818) -197 + j*(-333) -930 + j*(-862) --423 + j*(170) --319 + j*(225) --472 + j*(-23) -449 + j*(1023) --756 + j*(-303) --1024 + j*(1007) -191 + j*(1023) -1023 + j*(58) -1023 + j*(-766) -1023 + j*(-1024) --826 + j*(-1024) -1023 + j*(754) -1023 + j*(-1024) --530 + j*(-1024) -1023 + j*(291) --259 + j*(-320) --529 + j*(-1024) -1023 + j*(1002) -1023 + j*(180) -1023 + j*(-1024) -1023 + j*(982) -1023 + j*(345) --85 + j*(-1024) --1024 + j*(-223) --1024 + j*(950) -71 + j*(1023) -605 + j*(815) --1024 + j*(440) --1024 + j*(971) -288 + j*(794) --1024 + j*(-523) -589 + j*(121) --391 + j*(1023) --223 + j*(-597) --574 + j*(-768) --1024 + j*(105) -336 + j*(-775) -554 + j*(-1024) --1024 + j*(-678) --1024 + j*(636) --654 + j*(1023) -1023 + j*(888) -1023 + j*(-858) --167 + j*(1023) -624 + j*(1023) -1023 + j*(-684) --922 + j*(1023) -1023 + j*(1023) -1023 + j*(-387) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(420) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(990) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf1.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf1.m deleted file mode 100644 index 7b02fd2cdf..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH1_sync_4xf1.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch1_sync_f_4x1 = [-1024 + j*(-437) -1023 + j*(-1024) --77 + j*(-1024) --1024 + j*(95) --834 + j*(487) -78 + j*(1023) -1023 + j*(168) -913 + j*(-554) -428 + j*(1023) -1015 + j*(201) -1023 + j*(-407) -631 + j*(-240) --142 + j*(448) --460 + j*(-43) --345 + j*(585) --397 + j*(29) --153 + j*(855) --515 + j*(-177) --867 + j*(-89) --184 + j*(537) -1023 + j*(950) -1023 + j*(-400) -853 + j*(-1024) --564 + j*(-1024) -1023 + j*(803) -1023 + j*(-1024) --91 + j*(-1024) -1023 + j*(323) -1023 + j*(-1024) --540 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) -683 + j*(-1024) -1023 + j*(1023) -1023 + j*(-967) -766 + j*(-1024) --346 + j*(-1024) --1024 + j*(1023) --1024 + j*(1023) -819 + j*(733) --1024 + j*(938) -497 + j*(1023) -1023 + j*(209) --970 + j*(-267) -63 + j*(-796) -104 + j*(978) --482 + j*(1023) -728 + j*(1023) -1023 + j*(6) --517 + j*(1023) -713 + j*(788) -579 + j*(969) -1023 + j*(-1024) --352 + j*(-706) --837 + j*(-1024) --850 + j*(737) -787 + j*(-1024) --655 + j*(-1024) --513 + j*(172) --47 + j*(-555) --525 + j*(-1024) --251 + j*(480) -255 + j*(666) -877 + j*(386) -955 + j*(-654) --155 + j*(986) -858 + j*(824) -1023 + j*(1023) -93 + j*(-1024) -933 + j*(-1024) --1024 + j*(-1024) --1024 + j*(963) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(574) -980 + j*(-1024) --979 + j*(-1024) --1024 + j*(-360) -1023 + j*(-1024) -152 + j*(-1024) --1024 + j*(-858) -1023 + j*(-907) -647 + j*(-1024) --1024 + j*(503) --628 + j*(1023) -667 + j*(1023) -1023 + j*(-48) -692 + j*(-581) -1023 + j*(1023) -1023 + j*(-389) -640 + j*(-855) -1023 + j*(274) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) -404 + j*(-1024) -1023 + j*(1013) -1023 + j*(-456) -44 + j*(-1024) --989 + j*(-879) --1024 + j*(743) --603 + j*(1023) -1023 + j*(1023) --1024 + j*(358) --577 + j*(1023) -1023 + j*(1023) --1024 + j*(-755) --453 + j*(1023) --484 + j*(1023) --1024 + j*(65) --1024 + j*(1023) -31 + j*(1023) --1024 + j*(-345) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(245) -763 + j*(-1024) --555 + j*(-1024) -1023 + j*(682) -1023 + j*(-1024) -219 + j*(-1024) -1023 + j*(599) -1023 + j*(-1024) --89 + j*(-960) -580 + j*(1023) -1023 + j*(712) -1023 + j*(-1024) --114 + j*(1023) -1023 + j*(1023) -1023 + j*(460) -1023 + j*(-1024) -215 + j*(-1024) --1024 + j*(-918) --1024 + j*(661) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-204) -1023 + j*(-835) --1024 + j*(-1024) --1024 + j*(-866) -1023 + j*(92) -1011 + j*(-1024) --585 + j*(-1024) -1023 + j*(775) -1023 + j*(-1024) -216 + j*(-1024) --456 + j*(-1024) --1024 + j*(173) --1024 + j*(1023) -142 + j*(1023) --1024 + j*(-1024) --1024 + j*(663) --389 + j*(910) -308 + j*(-473) --423 + j*(-1024) --889 + j*(-221) -694 + j*(-169) -294 + j*(-1024) --1024 + j*(-1024) -1023 + j*(487) -1023 + j*(-783) --398 + j*(-1024) --610 + j*(-926) --1024 + j*(-291) --997 + j*(1023) -482 + j*(1023) --1024 + j*(-1024) --1024 + j*(583) -6 + j*(1023) --370 + j*(-1024) --529 + j*(-386) --1024 + j*(697) --509 + j*(-1024) --1024 + j*(-1024) --1024 + j*(475) -537 + j*(-1024) --492 + j*(-1024) --1024 + j*(-579) --1024 + j*(620) --714 + j*(1023) -1004 + j*(1023) -1023 + j*(-38) --1024 + j*(1023) -996 + j*(1023) -1023 + j*(713) --569 + j*(-34) --247 + j*(1023) --658 + j*(652) --853 + j*(-44) --471 + j*(-113) --647 + j*(65) --1 + j*(-508) --1024 + j*(-497) --1024 + j*(547) --191 + j*(1023) -1023 + j*(1023) -1023 + j*(212) -1023 + j*(-402) --207 + j*(1023) -1023 + j*(803) -1023 + j*(109) --1 + j*(1023) -28 + j*(88) -257 + j*(386) --1024 + j*(1023) -719 + j*(1023) -1023 + j*(952) --1024 + j*(1023) --205 + j*(339) -138 + j*(394) -520 + j*(-227) -622 + j*(141) --132 + j*(-361) --646 + j*(950) --794 + j*(-1024) --1024 + j*(184) --248 + j*(1023) --545 + j*(-510) --192 + j*(159) --549 + j*(1023) --1024 + j*(-610) --1024 + j*(1023) --180 + j*(1023) --1024 + j*(-593) --1024 + j*(763) --144 + j*(1023) -1023 + j*(1023) -1023 + j*(-9) -657 + j*(-1024) --831 + j*(-630) -1023 + j*(-1) --1 + j*(-1024) --604 + j*(-421) -1023 + j*(422) -777 + j*(-269) --383 + j*(-655) -413 + j*(-222) --34 + j*(-652) --366 + j*(-647) -495 + j*(-489) --1024 + j*(-505) --85 + j*(1023) --284 + j*(1023) -1023 + j*(61) -1023 + j*(699) -960 + j*(-735) -177 + j*(1023) -1023 + j*(1023) -1023 + j*(-541) --207 + j*(1023) -1023 + j*(455) -1023 + j*(-452) --1014 + j*(1023) -1023 + j*(1023) -1023 + j*(335) --1021 + j*(1023) --1 + j*(1023) -1023 + j*(625) --1 + j*(-506) -506 + j*(-1024) --1024 + j*(-75) --939 + j*(562) -116 + j*(-1024) --1 + j*(-1024) --606 + j*(439) -797 + j*(-89) -829 + j*(-1024) --182 + j*(-218) --836 + j*(-289) --79 + j*(98) -70 + j*(1023) --893 + j*(-323) --1024 + j*(119) --1 + j*(985) -101 + j*(-139) -1023 + j*(-101) --334 + j*(-1024) --959 + j*(-1024) -1023 + j*(-542) -1023 + j*(-1024) --675 + j*(-1024) -1023 + j*(589) -503 + j*(-1024) --119 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) -320 + j*(-1024) -975 + j*(1023) -973 + j*(-679) -114 + j*(-1024) --425 + j*(-673) --649 + j*(1023) --261 + j*(400) -498 + j*(660) --91 + j*(658) -690 + j*(724) -641 + j*(281) --645 + j*(1008) -1023 + j*(-150) -1023 + j*(12) --606 + j*(803) -578 + j*(1023) -1023 + j*(-126) --852 + j*(1023) -472 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -169 + j*(-1024) --1024 + j*(-1024) --1024 + j*(851) --363 + j*(-1024) --1024 + j*(-227) --1024 + j*(779) -101 + j*(-517) --75 + j*(-1024) --574 + j*(152) --51 + j*(-750) --462 + j*(-29) --478 + j*(152) --12 + j*(-116) --223 + j*(-778) -186 + j*(-492) --807 + j*(-506) --959 + j*(377) --253 + j*(16) --370 + j*(343) -213 + j*(-226) --96 + j*(-757) --385 + j*(337) -461 + j*(70) -8 + j*(-469) --412 + j*(-161) --200 + j*(-177) -86 + j*(360) --1 + j*(-728) --202 + j*(-66) --1 + j*(557) --1 + j*(-169) --626 + j*(-1) -350 + j*(-197) --1 + j*(883) --406 + j*(162) -489 + j*(-242) --139 + j*(-370) --539 + j*(353) -1003 + j*(419) --175 + j*(-916) --219 + j*(-1016) --157 + j*(-351) -196 + j*(-183) --1 + j*(-381) --75 + j*(-54) -1023 + j*(76) -484 + j*(-717) -396 + j*(-419) --959 + j*(-1) --277 + j*(-1024) --226 + j*(149) --163 + j*(-1) --479 + j*(-879) --327 + j*(373) --79 + j*(410) --1 + j*(-399) -115 + j*(-146) --347 + j*(-255) --18 + j*(-230) --323 + j*(-174) --260 + j*(-24) -16 + j*(696) -501 + j*(109) -69 + j*(-282) --1 + j*(-132) -935 + j*(23) --378 + j*(67) --1 + j*(97) --121 + j*(-667) --486 + j*(238) -681 + j*(-31) -715 + j*(-928) --577 + j*(-828) --179 + j*(-294) -332 + j*(265) --291 + j*(-1024) --146 + j*(-33) -1023 + j*(-466) -739 + j*(-1) --893 + j*(-151) -372 + j*(34) -678 + j*(-382) --301 + j*(74) -129 + j*(-1) --2 + j*(-266) --432 + j*(252) -149 + j*(630) --808 + j*(-978) -204 + j*(-510) --226 + j*(-311) --247 + j*(-842) --664 + j*(-111) --193 + j*(-65) --1 + j*(-54) -19 + j*(56) --1024 + j*(580) --1 + j*(129) -560 + j*(-1) --325 + j*(6) --1 + j*(-96) -338 + j*(-119) --462 + j*(156) --422 + j*(704) -300 + j*(-93) -511 + j*(-56) --148 + j*(-292) --240 + j*(-796) --131 + j*(335) --150 + j*(-38) -230 + j*(227) -578 + j*(-409) --428 + j*(-230) --851 + j*(-699) -170 + j*(239) --308 + j*(45) -4 + j*(29) -229 + j*(-160) --442 + j*(-1) --1 + j*(270) -878 + j*(70) --169 + j*(-149) -221 + j*(-120) --1 + j*(-887) --231 + j*(-10) --137 + j*(-119) --1 + j*(-233) -1023 + j*(141) --87 + j*(562) -725 + j*(-444) --21 + j*(45) --273 + j*(-61) -70 + j*(316) -529 + j*(-208) --420 + j*(94) -554 + j*(1023) --224 + j*(-40) -784 + j*(-812) --186 + j*(-313) -433 + j*(808) -437 + j*(119) --234 + j*(-99) --5 + j*(291) -430 + j*(384) -790 + j*(278) -845 + j*(383) -669 + j*(-366) --393 + j*(-117) -127 + j*(290) --160 + j*(290) --512 + j*(-185) -206 + j*(449) -692 + j*(-351) --55 + j*(-667) --31 + j*(-204) -227 + j*(-890) --708 + j*(-331) --28 + j*(-109) -325 + j*(-1) --305 + j*(-590) -110 + j*(-91) -121 + j*(-1) -265 + j*(659) --184 + j*(-62) -128 + j*(414) -467 + j*(-1) --360 + j*(54) -239 + j*(693) -46 + j*(335) -388 + j*(-652) --170 + j*(-294) --1 + j*(392) -132 + j*(158) --245 + j*(-89) -179 + j*(177) -1023 + j*(352) -510 + j*(-485) -455 + j*(-856) --887 + j*(227) --404 + j*(-118) -800 + j*(-205) --129 + j*(-264) --620 + j*(-62) -532 + j*(565) --48 + j*(-79) -415 + j*(-951) -77 + j*(-447) --222 + j*(371) --366 + j*(-533) --47 + j*(-199) --476 + j*(-862) --341 + j*(-913) --742 + j*(680) --111 + j*(478) -1023 + j*(175) --225 + j*(-179) -20 + j*(602) -441 + j*(136) --83 + j*(-88) --548 + j*(277) -581 + j*(429) -314 + j*(-167) -30 + j*(-360) -55 + j*(645) -200 + j*(-159) --89 + j*(-185) -1021 + j*(23) -19 + j*(-19) -774 + j*(-1024) -50 + j*(-39) --59 + j*(397) --196 + j*(-247) -261 + j*(452) -432 + j*(162) --361 + j*(-221) --63 + j*(1023) --274 + j*(715) -904 + j*(-535) -24 + j*(-213) -699 + j*(607) -901 + j*(62) --160 + j*(-54) -210 + j*(135) -183 + j*(949) --598 + j*(-157) -545 + j*(399) --901 + j*(0) --367 + j*(-166) -0 + j*(-159) -161 + j*(0) --623 + j*(0) -68 + j*(115) -114 + j*(-237) --178 + j*(-17) -102 + j*(-151) -18 + j*(-831) -168 + j*(0) -34 + j*(-247) -22 + j*(-543) --799 + j*(0) -564 + j*(-231) --8 + j*(876) --46 + j*(-84) --108 + j*(-304) -140 + j*(107) -203 + j*(15) --170 + j*(-344) --294 + j*(1023) -461 + j*(-98) -1023 + j*(-290) -136 + j*(-28) -32 + j*(699) -371 + j*(-418) --126 + j*(-82) -656 + j*(609) --160 + j*(1023) -422 + j*(-878) -511 + j*(-765) --538 + j*(-452) --316 + j*(-247) --723 + j*(-227) --137 + j*(-75) --554 + j*(-328) --63 + j*(390) --428 + j*(-75) -463 + j*(-139) -312 + j*(-399) -151 + j*(-70) -567 + j*(-237) -89 + j*(-245) -87 + j*(848) -879 + j*(629) -242 + j*(-473) -521 + j*(-613) -396 + j*(-626) --46 + j*(-349) -555 + j*(0) -196 + j*(-436) --177 + j*(-410) -55 + j*(96) -584 + j*(230) -0 + j*(401) -178 + j*(-164) -881 + j*(-56) -0 + j*(-530) --50 + j*(-118) -638 + j*(0) -29 + j*(279) -549 + j*(-381) -281 + j*(-1) -477 + j*(-469) --138 + j*(-354) -288 + j*(267) -14 + j*(-134) --276 + j*(-480) -0 + j*(329) -638 + j*(572) -218 + j*(-235) -236 + j*(-102) -245 + j*(53) -534 + j*(0) --59 + j*(-45) -197 + j*(755) -861 + j*(-61) -1023 + j*(-384) --134 + j*(-287) --143 + j*(-1) --271 + j*(-281) -0 + j*(603) --169 + j*(0) --326 + j*(-199) --513 + j*(527) --447 + j*(-809) -555 + j*(104) -378 + j*(-402) --206 + j*(142) -287 + j*(0) -167 + j*(-344) -324 + j*(158) --810 + j*(-144) --172 + j*(450) -16 + j*(915) -354 + j*(0) -110 + j*(-598) --12 + j*(642) -751 + j*(201) -23 + j*(-680) --513 + j*(1023) -671 + j*(-533) -1023 + j*(-296) -392 + j*(200) -0 + j*(682) -619 + j*(21) -69 + j*(167) -298 + j*(823) --92 + j*(224) -776 + j*(0) --809 + j*(-440) -0 + j*(-540) --67 + j*(-188) -659 + j*(34) --427 + j*(-117) --207 + j*(-392) --396 + j*(260) --918 + j*(349) -555 + j*(-64) -249 + j*(-170) -620 + j*(0) --301 + j*(0) --10 + j*(-198) --863 + j*(-849) -421 + j*(551) -1023 + j*(-163) -502 + j*(-199) --244 + j*(129) --41 + j*(-543) --491 + j*(363) -461 + j*(754) --123 + j*(-782) --204 + j*(812) -975 + j*(-129) -1023 + j*(-435) -467 + j*(39) -763 + j*(0) -277 + j*(-498) -117 + j*(-118) -589 + j*(-1000) -771 + j*(-713) --1024 + j*(-707) --353 + j*(-70) -189 + j*(372) -79 + j*(-527) -436 + j*(227) -968 + j*(-463) --121 + j*(-513) --94 + j*(280) -1023 + j*(-510) -209 + j*(-175) -747 + j*(457) -418 + j*(-561) -0 + j*(-489) -321 + j*(353) -788 + j*(-34) -0 + j*(-1024) --812 + j*(-1024) --1024 + j*(0) --506 + j*(236) -145 + j*(-422) -114 + j*(197) -648 + j*(0) -113 + j*(-1024) --961 + j*(377) --204 + j*(140) -641 + j*(327) -1023 + j*(732) -1023 + j*(-788) -325 + j*(-1024) -855 + j*(706) -827 + j*(-1024) -0 + j*(-476) --1024 + j*(-314) -474 + j*(0) -0 + j*(1023) -858 + j*(429) --1024 + j*(85) -210 + j*(1023) -584 + j*(193) --1024 + j*(983) --836 + j*(1023) -1023 + j*(1023) --634 + j*(676) -1023 + j*(952) -977 + j*(924) --849 + j*(880) -884 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -1023 + j*(-1024) --1024 + j*(-1024) --616 + j*(503) --998 + j*(-979) --619 + j*(41) --386 + j*(147) --975 + j*(-47) --1024 + j*(1023) -1023 + j*(811) --118 + j*(148) -5 + j*(919) -1023 + j*(204) --471 + j*(511) --31 + j*(1023) -1023 + j*(197) -471 + j*(-443) -142 + j*(-1024) --1024 + j*(-176) --995 + j*(835) -100 + j*(-1024) --1024 + j*(-477) --1024 + j*(772) --738 + j*(-1024) --1024 + j*(-116) --1023 + j*(1023) -503 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) -614 + j*(-1024) --163 + j*(-1024) --1024 + j*(0) --1024 + j*(0) -86 + j*(1023) -536 + j*(1021) -1023 + j*(-636) -115 + j*(555) -311 + j*(932) -812 + j*(-153) --1024 + j*(0) --56 + j*(1023) -397 + j*(1023) --1024 + j*(91) --208 + j*(810) -0 + j*(1023) --1024 + j*(-634) --1024 + j*(747) -7 + j*(1023) -1023 + j*(1023) -1023 + j*(-16) -27 + j*(-1024) --47 + j*(-1024) -1023 + j*(736) -1023 + j*(58) -765 + j*(-1024) --618 + j*(1023) -918 + j*(518) -1023 + j*(-36) -253 + j*(1023) -1023 + j*(1023) -1023 + j*(-171) --508 + j*(1023) -923 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -159 + j*(-1024) --1024 + j*(-401) --725 + j*(328) --353 + j*(-1024) --801 + j*(-416) --558 + j*(40) --629 + j*(-483) --1024 + j*(-427) -225 + j*(788) --151 + j*(-447) --809 + j*(89) -409 + j*(933) --620 + j*(-589) --880 + j*(457) --578 + j*(1023) -1023 + j*(876) -1023 + j*(233) -1023 + j*(-1024) --700 + j*(-1024) -1023 + j*(394) -1023 + j*(-1024) --464 + j*(-1024) -1023 + j*(-170) --341 + j*(-1024) --334 + j*(-750) -1023 + j*(928) -1023 + j*(-641) -336 + j*(-1024) -1023 + j*(721) -1023 + j*(0) -767 + j*(-609) --342 + j*(-454) --560 + j*(0) --591 + j*(768) -971 + j*(650) --1024 + j*(148) --197 + j*(1023) -1016 + j*(730) --1024 + j*(405) --550 + j*(685) -1023 + j*(1023) --1024 + j*(208) --1024 + j*(1023) -664 + j*(1023) --1024 + j*(-434) --1024 + j*(1023) --872 + j*(1023) -1023 + j*(536) -1023 + j*(208) -785 + j*(-1024) --73 + j*(-1024) -1023 + j*(1023) -1023 + j*(-677) -732 + j*(-1024) -175 + j*(821) -1023 + j*(777) -1023 + j*(-437) -241 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --417 + j*(1023) -1023 + j*(1023) -1023 + j*(-387) -146 + j*(-1024) --878 + j*(-1024) --1024 + j*(145) --530 + j*(356) --178 + j*(-1024) --897 + j*(-134) -2 + j*(-260) --785 + j*(-749) --1024 + j*(1023) -203 + j*(1023) --71 + j*(857) -327 + j*(1023) -1023 + j*(527) --584 + j*(845) --189 + j*(1023) -1023 + j*(1023) -237 + j*(-1024) -49 + j*(-1024) --1024 + j*(-1000) --873 + j*(582) --66 + j*(-1024) --1024 + j*(-917) --716 + j*(384) --987 + j*(-1024) --1024 + j*(-353) --473 + j*(1023) --209 + j*(-642) --1024 + j*(538) --322 + j*(1023) --530 + j*(-696) --1024 + j*(1023) --631 + j*(1023) -1023 + j*(776) -1023 + j*(63) -1023 + j*(-1024) --303 + j*(-1024) -1023 + j*(742) -1023 + j*(-1024) -325 + j*(-1024) -137 + j*(481) --602 + j*(658) -881 + j*(367) -381 + j*(1023) -1023 + j*(1023) -1023 + j*(-753) --423 + j*(1023) -322 + j*(1023) -1023 + j*(1023) -1023 + j*(-270) -1023 + j*(-1024) --924 + j*(-1024) --1024 + j*(548) -726 + j*(-1024) --1024 + j*(-1024) --955 + j*(284) --40 + j*(-1024) --915 + j*(-1024) --839 + j*(1023) --7 + j*(-767) --1024 + j*(588) --847 + j*(1023) --453 + j*(-791) --1024 + j*(827) --836 + j*(1023) -786 + j*(1023) -1023 + j*(548) -567 + j*(-1024) --655 + j*(-1024) -1023 + j*(-521) -1023 + j*(-1024) --387 + j*(-1024) -152 + j*(-509) --514 + j*(-231) --88 + j*(894) -643 + j*(213) --782 + j*(150) --322 + j*(906) --166 + j*(-327) --1024 + j*(827) --313 + j*(1023) -793 + j*(1023) -1023 + j*(-1024) -839 + j*(-1024) --707 + j*(-1024) -1023 + j*(610) -1023 + j*(-1024) --469 + j*(-1024) -1023 + j*(-509) -1023 + j*(-633) --1024 + j*(-1024) -1023 + j*(1023) -1023 + j*(-822) -319 + j*(-1024) -1023 + j*(1023) -1023 + j*(-262) -590 + j*(-1024) -86 + j*(-1024) --1024 + j*(596) --781 + j*(1023) -810 + j*(718) --1024 + j*(468) --497 + j*(1023) -946 + j*(499) --841 + j*(-585) --1024 + j*(-1024) --150 + j*(1014) --742 + j*(300) --1024 + j*(1023) -470 + j*(1023) --706 + j*(-316) --1024 + j*(1009) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(-384) -1023 + j*(-1024) --32 + j*(-1024) -1023 + j*(1023) -1023 + j*(-861) -901 + j*(-1024) -347 + j*(751) -1023 + j*(738) -704 + j*(-308) -617 + j*(1023) -1023 + j*(890) -1023 + j*(-933) --362 + j*(1023) -1023 + j*(1023) -1023 + j*(744) -1023 + j*(-1024) -282 + j*(-1024) --1024 + j*(-980) --925 + j*(195) -1023 + j*(-1024) --468 + j*(-1024) --355 + j*(-788) -932 + j*(-1024) -898 + j*(-892) --820 + j*(-155) -711 + j*(1023) -1023 + j*(580) -1023 + j*(-1024) --68 + j*(1023) -1023 + j*(1023) -961 + j*(-353) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-1010) --1024 + j*(630) -558 + j*(-1024) --1024 + j*(-1024) --895 + j*(-142) -478 + j*(-855) --1024 + j*(-1024) --817 + j*(174) -725 + j*(489) -888 + j*(-424) -366 + j*(-1024) -73 + j*(868) -1023 + j*(862) -340 + j*(282) -1023 + j*(-1001) --506 + j*(-1024) --893 + j*(-1024) --1024 + j*(898) -86 + j*(-1024) --1024 + j*(-1024) --1024 + j*(501) -812 + j*(-1024) --1024 + j*(-1024) --1024 + j*(780) -1023 + j*(-1024) --1024 + j*(-1024) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf0.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf0.m deleted file mode 100644 index 320646567e..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf0.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch2_sync_f_4x0 = [-1024 + j*(-1024) --1024 + j*(-321) --960 + j*(788) -724 + j*(899) --1024 + j*(2) --545 + j*(48) -467 + j*(650) --684 + j*(-367) --315 + j*(-453) --234 + j*(68) -111 + j*(303) -264 + j*(302) -206 + j*(-1024) -556 + j*(555) --42 + j*(-886) --1024 + j*(-1024) --1024 + j*(226) --1024 + j*(1023) -335 + j*(1023) -952 + j*(947) --1024 + j*(672) --85 + j*(1023) -1023 + j*(1023) --1024 + j*(839) --1024 + j*(668) -1023 + j*(1023) --1024 + j*(776) --54 + j*(1023) -1023 + j*(1023) --1024 + j*(816) --820 + j*(1023) -1023 + j*(1023) -1023 + j*(-691) -969 + j*(-1024) --1024 + j*(-1024) --1006 + j*(658) -83 + j*(-1024) --1024 + j*(-986) --1024 + j*(308) -1023 + j*(-1024) --282 + j*(-1024) --1024 + j*(-1024) -755 + j*(-309) -997 + j*(-1024) --934 + j*(-1024) -818 + j*(321) -1023 + j*(-1024) --358 + j*(-1024) --1024 + j*(-683) --1024 + j*(1023) -396 + j*(1023) -752 + j*(1023) --1024 + j*(626) --89 + j*(1023) -709 + j*(1023) --1024 + j*(-182) --892 + j*(-584) -142 + j*(1023) --1024 + j*(282) -115 + j*(619) -1023 + j*(491) --841 + j*(548) -301 + j*(545) -878 + j*(224) --107 + j*(-281) --349 + j*(-1024) --1024 + j*(755) --689 + j*(1023) --1024 + j*(-1024) --1024 + j*(-28) --815 + j*(1023) --1024 + j*(-1024) --1024 + j*(-434) --674 + j*(1023) --1024 + j*(-1024) --1024 + j*(70) --654 + j*(1023) --839 + j*(-1024) --1024 + j*(450) --1024 + j*(1023) -502 + j*(1023) -1023 + j*(184) -1023 + j*(-1024) --758 + j*(-969) -1023 + j*(-121) -987 + j*(-1024) --796 + j*(-1024) -1023 + j*(347) -1023 + j*(-1024) --484 + j*(-1024) -1023 + j*(258) -1023 + j*(-1024) --85 + j*(-1024) -1023 + j*(562) -1023 + j*(-1024) -506 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-379) --1024 + j*(1023) -1004 + j*(1023) --1024 + j*(-466) --1024 + j*(1023) -874 + j*(1023) --1024 + j*(-69) --1024 + j*(1023) -932 + j*(1023) --1024 + j*(-627) --1024 + j*(1023) --59 + j*(1023) --1024 + j*(-778) --1024 + j*(522) --672 + j*(1023) -1023 + j*(963) -1023 + j*(-31) --143 + j*(-1024) --539 + j*(-1007) -1023 + j*(445) -1023 + j*(-1024) -13 + j*(-1024) -966 + j*(404) -1023 + j*(-779) -303 + j*(-964) -210 + j*(1023) -1023 + j*(1023) -1023 + j*(-643) --357 + j*(1023) -1023 + j*(1023) -1023 + j*(-99) -1023 + j*(-395) -72 + j*(-1024) --1024 + j*(-1012) --1024 + j*(848) -98 + j*(-1024) --1024 + j*(-1024) --1024 + j*(610) -547 + j*(-1024) -370 + j*(-1024) --1024 + j*(40) -766 + j*(-1024) --1024 + j*(-1024) --1024 + j*(34) -819 + j*(-934) -654 + j*(-1024) --1024 + j*(-1024) --1024 + j*(510) --589 + j*(1023) -652 + j*(1023) -968 + j*(-487) --463 + j*(1023) -945 + j*(1023) -1023 + j*(-413) --916 + j*(880) -1023 + j*(1023) -969 + j*(333) --554 + j*(1023) -818 + j*(1023) -1023 + j*(-16) --698 + j*(1023) -863 + j*(1023) -1023 + j*(-959) --1024 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --1024 + j*(694) --704 + j*(-1024) --1024 + j*(-425) --1024 + j*(278) -530 + j*(-254) --978 + j*(97) --258 + j*(-411) -894 + j*(-450) -341 + j*(-987) --384 + j*(-1024) -897 + j*(278) -1023 + j*(-83) -1023 + j*(-1024) --641 + j*(-1024) --1024 + j*(-611) --1024 + j*(1023) -602 + j*(1023) --1024 + j*(-777) --1024 + j*(1023) -317 + j*(1023) --1024 + j*(-1024) --1024 + j*(1023) --277 + j*(1023) --1024 + j*(-1024) --1024 + j*(863) --373 + j*(1023) --1024 + j*(-1024) --1024 + j*(-1) --849 + j*(-1) -458 + j*(1023) -20 + j*(375) -302 + j*(-794) --855 + j*(-808) -927 + j*(-1024) -110 + j*(-910) --915 + j*(-552) -1023 + j*(-580) -230 + j*(-875) --1024 + j*(-553) -666 + j*(-721) -183 + j*(-1024) --1024 + j*(232) -581 + j*(-777) --657 + j*(-1024) --773 + j*(-684) --1024 + j*(1023) -451 + j*(1023) -1023 + j*(670) -915 + j*(-982) -843 + j*(1023) -1023 + j*(661) -1023 + j*(-1024) --70 + j*(1023) -1023 + j*(612) -1023 + j*(-810) --608 + j*(1023) -1023 + j*(1023) -1023 + j*(-126) --845 + j*(1023) --1 + j*(1023) -1023 + j*(1023) -150 + j*(-1) -1023 + j*(-1024) --411 + j*(-886) --724 + j*(366) -101 + j*(-865) --66 + j*(-368) --309 + j*(9) --458 + j*(474) -795 + j*(52) -873 + j*(158) --154 + j*(609) -509 + j*(816) -1023 + j*(-45) --483 + j*(865) -880 + j*(1023) -1023 + j*(112) -1023 + j*(-539) --926 + j*(-1024) --1024 + j*(-523) --934 + j*(781) -62 + j*(-1024) --1024 + j*(-851) --913 + j*(574) --42 + j*(-875) --778 + j*(-1024) --216 + j*(242) --84 + j*(-209) --45 + j*(277) -905 + j*(-129) --366 + j*(437) -379 + j*(149) -1023 + j*(0) --1 + j*(-1024) --9 + j*(-1006) --1024 + j*(-1) --1024 + j*(1023) --1 + j*(-1024) --1024 + j*(-705) --1024 + j*(1023) --297 + j*(-1024) --1024 + j*(-449) --1024 + j*(1023) -581 + j*(-1024) --1024 + j*(-1024) --1024 + j*(476) -827 + j*(-1024) --572 + j*(-1024) --1024 + j*(26) --357 + j*(783) -111 + j*(1023) -1023 + j*(114) -1004 + j*(-159) --40 + j*(1023) -1023 + j*(433) -920 + j*(499) --724 + j*(404) -101 + j*(1023) -737 + j*(742) --1024 + j*(-404) --1024 + j*(1023) -242 + j*(1023) --1024 + j*(-776) --1024 + j*(753) --222 + j*(958) -809 + j*(1023) -938 + j*(-691) -1023 + j*(-402) --577 + j*(-677) -21 + j*(-314) -396 + j*(-1) --259 + j*(-173) --1 + j*(-567) -559 + j*(-1) --559 + j*(-1) --1 + j*(-116) -253 + j*(-1) --572 + j*(-87) --623 + j*(-339) --372 + j*(271) --769 + j*(714) --269 + j*(-407) -902 + j*(545) -766 + j*(-1024) --902 + j*(-652) -761 + j*(32) --1 + j*(-923) --732 + j*(-268) -360 + j*(171) -43 + j*(-724) --81 + j*(-1) -497 + j*(127) -53 + j*(-466) -437 + j*(-1) -399 + j*(161) --1 + j*(-1024) -461 + j*(509) --579 + j*(-101) -859 + j*(-589) --102 + j*(-1006) --224 + j*(-199) -740 + j*(154) -13 + j*(-127) --302 + j*(-419) -229 + j*(-167) -115 + j*(288) --248 + j*(-1) -392 + j*(103) -300 + j*(-193) --59 + j*(-1) -89 + j*(109) --1 + j*(400) -306 + j*(423) -874 + j*(359) --1 + j*(-358) --566 + j*(-1024) --352 + j*(-132) -753 + j*(84) -871 + j*(-1018) --455 + j*(-319) -709 + j*(59) -475 + j*(-395) --81 + j*(-335) -444 + j*(-86) -798 + j*(-633) -99 + j*(-655) -192 + j*(-29) -1023 + j*(-398) -225 + j*(57) --275 + j*(-141) -237 + j*(169) -11 + j*(636) --169 + j*(-192) -165 + j*(-385) --504 + j*(-8) --227 + j*(-356) -886 + j*(30) -968 + j*(-248) --166 + j*(-944) -334 + j*(121) -410 + j*(-1) -245 + j*(-1) -102 + j*(147) -675 + j*(1023) -685 + j*(343) -727 + j*(-43) --361 + j*(-687) --200 + j*(-753) --297 + j*(-23) -897 + j*(-671) -30 + j*(-1024) --409 + j*(-189) -524 + j*(-646) --553 + j*(196) --794 + j*(-270) -369 + j*(-100) --1 + j*(-898) --271 + j*(-1) -165 + j*(3) --1 + j*(-676) -383 + j*(-36) --224 + j*(-309) --1 + j*(-523) --530 + j*(51) --243 + j*(-40) --178 + j*(-93) --579 + j*(265) --418 + j*(-153) -265 + j*(-753) --864 + j*(-1024) --890 + j*(-101) -400 + j*(-245) -503 + j*(-1024) --542 + j*(-745) -264 + j*(-168) -454 + j*(-165) --372 + j*(-1) -5 + j*(744) --1 + j*(763) -1023 + j*(98) -5 + j*(-190) --1 + j*(426) -192 + j*(248) --50 + j*(-231) --165 + j*(455) --970 + j*(-30) -378 + j*(406) -210 + j*(12) --24 + j*(224) --3 + j*(-1) -123 + j*(-36) -187 + j*(408) --453 + j*(-340) -148 + j*(36) -48 + j*(229) -231 + j*(-17) --62 + j*(-235) -322 + j*(-347) --1 + j*(-383) --87 + j*(-385) -916 + j*(357) -450 + j*(-315) -268 + j*(-1018) -341 + j*(144) -124 + j*(445) --1 + j*(-583) -171 + j*(163) -442 + j*(-1) --1 + j*(284) --1 + j*(-457) -337 + j*(-1) --201 + j*(722) --81 + j*(-20) -85 + j*(-188) -124 + j*(1023) --136 + j*(-157) --220 + j*(-584) --367 + j*(-305) --479 + j*(390) -220 + j*(42) --525 + j*(533) -27 + j*(200) -95 + j*(46) --351 + j*(22) --541 + j*(408) --423 + j*(-311) -742 + j*(-1) -82 + j*(171) --127 + j*(-134) -41 + j*(-1) -139 + j*(250) --182 + j*(-312) -767 + j*(324) -1023 + j*(-527) -123 + j*(-968) -409 + j*(124) -511 + j*(-675) -294 + j*(-590) -274 + j*(158) -120 + j*(-145) -1023 + j*(-559) --851 + j*(-281) --1 + j*(-958) --370 + j*(1023) -42 + j*(72) --995 + j*(-278) --647 + j*(831) --41 + j*(31) --346 + j*(-783) --142 + j*(272) --733 + j*(427) -139 + j*(59) --479 + j*(196) --333 + j*(292) -111 + j*(83) --291 + j*(-598) --141 + j*(369) -20 + j*(-717) -738 + j*(-37) --357 + j*(-1) -38 + j*(48) --1 + j*(-351) --360 + j*(-50) -43 + j*(14) --57 + j*(491) -538 + j*(482) -699 + j*(80) -4 + j*(78) --1 + j*(252) --11 + j*(-23) --99 + j*(57) --1 + j*(708) -809 + j*(-657) -1023 + j*(-1) --670 + j*(-629) --48 + j*(-666) --163 + j*(-41) -210 + j*(-502) --489 + j*(-537) --147 + j*(-94) -283 + j*(-657) --631 + j*(-1) --582 + j*(47) -60 + j*(-2) --1 + j*(-32) -42 + j*(-1) --61 + j*(-2) --32 + j*(-309) -590 + j*(-1) --148 + j*(762) -5 + j*(-333) -174 + j*(157) --221 + j*(-148) --303 + j*(-3) -54 + j*(-52) --236 + j*(-261) -704 + j*(-78) -957 + j*(-1024) --256 + j*(-429) -277 + j*(35) -9 + j*(-680) --482 + j*(-916) -113 + j*(55) -41 + j*(76) --652 + j*(-831) -219 + j*(25) --63 + j*(434) -109 + j*(6) --123 + j*(-66) --36 + j*(-23) --333 + j*(7) --179 + j*(-181) -5 + j*(-918) --712 + j*(-1024) --633 + j*(-28) -254 + j*(19) -672 + j*(0) -0 + j*(-564) -138 + j*(52) -819 + j*(0) -0 + j*(-378) -2 + j*(690) --625 + j*(0) -446 + j*(277) --76 + j*(7) --84 + j*(-153) -139 + j*(-161) --168 + j*(-43) --66 + j*(256) -27 + j*(350) --84 + j*(35) -151 + j*(-151) --395 + j*(-59) --368 + j*(-336) -99 + j*(-156) --131 + j*(0) --733 + j*(0) -0 + j*(-43) --2 + j*(801) -695 + j*(-596) -22 + j*(-252) -887 + j*(728) -808 + j*(-934) --62 + j*(-550) -826 + j*(376) -1023 + j*(-990) --128 + j*(-1024) -245 + j*(163) -222 + j*(107) -626 + j*(-492) -125 + j*(48) -123 + j*(617) -194 + j*(639) --196 + j*(-496) --371 + j*(601) --79 + j*(-31) -40 + j*(-171) --71 + j*(-164) -0 + j*(352) -55 + j*(-293) --74 + j*(374) -11 + j*(828) -416 + j*(-137) -209 + j*(200) -335 + j*(-203) -254 + j*(-334) -139 + j*(132) -114 + j*(-49) --736 + j*(-282) -485 + j*(0) --1 + j*(33) -620 + j*(0) -110 + j*(-92) -0 + j*(276) -1023 + j*(-62) -187 + j*(-212) -560 + j*(238) -672 + j*(626) -137 + j*(-712) -52 + j*(356) -749 + j*(-408) -740 + j*(-505) --29 + j*(282) -697 + j*(-307) -1023 + j*(-139) --214 + j*(-335) --225 + j*(-1024) --1012 + j*(0) --127 + j*(67) -0 + j*(-648) --568 + j*(-145) --100 + j*(-28) --182 + j*(-408) --707 + j*(-389) --437 + j*(257) -146 + j*(43) --346 + j*(-432) --136 + j*(-136) -137 + j*(72) -183 + j*(702) --370 + j*(0) -133 + j*(-225) -0 + j*(-297) --392 + j*(0) -98 + j*(28) -0 + j*(232) -361 + j*(146) -110 + j*(-12) --307 + j*(613) -0 + j*(-270) -653 + j*(192) --8 + j*(100) -0 + j*(70) -0 + j*(-80) -24 + j*(54) -572 + j*(149) -590 + j*(98) -205 + j*(-1024) --87 + j*(-76) --584 + j*(1018) -158 + j*(-17) --293 + j*(0) --460 + j*(-130) -277 + j*(-10) -51 + j*(288) -142 + j*(880) -291 + j*(-53) --218 + j*(246) --820 + j*(0) -0 + j*(-179) --201 + j*(144) --291 + j*(15) --413 + j*(1023) -0 + j*(1023) -473 + j*(-69) -833 + j*(-201) --44 + j*(-6) -209 + j*(302) -1023 + j*(-106) -98 + j*(-17) -620 + j*(126) -767 + j*(687) -111 + j*(-473) --166 + j*(167) -996 + j*(34) -0 + j*(24) --181 + j*(114) -1023 + j*(133) -0 + j*(-411) -179 + j*(11) --558 + j*(0) -450 + j*(258) --44 + j*(49) --493 + j*(23) -297 + j*(815) -84 + j*(111) --90 + j*(-489) -281 + j*(248) --451 + j*(99) --291 + j*(12) -163 + j*(-84) -266 + j*(76) --246 + j*(-54) --217 + j*(-252) --398 + j*(-950) -297 + j*(0) -0 + j*(-279) --263 + j*(372) -108 + j*(-7) -0 + j*(-323) -0 + j*(458) -381 + j*(84) --594 + j*(429) -556 + j*(536) -738 + j*(511) --594 + j*(-72) --9 + j*(1023) -1023 + j*(483) --879 + j*(-448) --706 + j*(1023) -354 + j*(1023) -1023 + j*(489) -1023 + j*(-1020) -1023 + j*(-1024) --531 + j*(-1024) -1023 + j*(502) -1023 + j*(-1024) -101 + j*(-1024) -966 + j*(1023) -184 + j*(-137) -920 + j*(-1024) -361 + j*(1023) -1023 + j*(592) -919 + j*(-1024) --406 + j*(1023) -677 + j*(0) -1023 + j*(401) -282 + j*(341) --452 + j*(-685) --676 + j*(-449) --1024 + j*(228) -559 + j*(-815) -220 + j*(-1024) --945 + j*(-339) -1023 + j*(-91) -279 + j*(-1024) --506 + j*(-1024) -1023 + j*(10) -581 + j*(-662) -176 + j*(-1024) -1023 + j*(396) -1023 + j*(-254) -226 + j*(-968) --1024 + j*(-1024) --1024 + j*(433) --1024 + j*(1003) -714 + j*(1023) --1024 + j*(-98) --1024 + j*(1023) -465 + j*(1023) --1024 + j*(-503) --1024 + j*(1023) -264 + j*(1023) --1024 + j*(-1024) --1024 + j*(1023) -362 + j*(1023) --1024 + j*(-1024) --881 + j*(127) --213 + j*(1023) -432 + j*(538) -925 + j*(0) -1023 + j*(-1024) --532 + j*(-901) -1023 + j*(0) -527 + j*(-1024) --196 + j*(-550) -196 + j*(-302) -641 + j*(-123) --374 + j*(377) --377 + j*(-121) --922 + j*(970) -218 + j*(1023) --747 + j*(-432) --1024 + j*(1023) -884 + j*(1023) -1023 + j*(-1) -1023 + j*(-1024) --13 + j*(-1024) --706 + j*(-886) -1023 + j*(-26) --10 + j*(-1024) --211 + j*(-801) -754 + j*(-22) -0 + j*(1023) --41 + j*(-260) --40 + j*(0) -0 + j*(-72) -0 + j*(1023) --635 + j*(-464) --1024 + j*(0) --694 + j*(1023) -1023 + j*(1023) -1023 + j*(-407) -663 + j*(-1024) --962 + j*(-1024) -1023 + j*(621) -1015 + j*(-1024) --763 + j*(-1024) -1023 + j*(304) -1023 + j*(-802) --327 + j*(-587) -639 + j*(104) --784 + j*(-416) --332 + j*(60) --263 + j*(-287) --963 + j*(374) --790 + j*(1023) -1023 + j*(981) -1023 + j*(141) -274 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-733) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(937) -1023 + j*(-1024) --436 + j*(-1024) -1023 + j*(63) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-298) -1023 + j*(-1024) --941 + j*(135) --329 + j*(1023) -884 + j*(1023) -1023 + j*(-891) -509 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) -639 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) -995 + j*(-1024) -1023 + j*(1023) -1023 + j*(-1024) -1023 + j*(-1024) -1023 + j*(1023) -1023 + j*(-207) -1023 + j*(-1024) --1024 + j*(-1024) --929 + j*(-798) --1024 + j*(280) -415 + j*(301) -151 + j*(354) -756 + j*(-199) -347 + j*(-675) -1023 + j*(967) -1023 + j*(-571) -578 + j*(-1024) -1023 + j*(1023) -1023 + j*(-720) -539 + j*(-1024) -874 + j*(1023) -1023 + j*(86) -1023 + j*(-1024) --91 + j*(-1024) --1024 + j*(-104) --1024 + j*(688) -596 + j*(488) --1024 + j*(200) --104 + j*(1023) -828 + j*(-65) --602 + j*(81) -21 + j*(-1024) -459 + j*(-184) --228 + j*(1023) -831 + j*(1023) -1023 + j*(-389) --472 + j*(1023) -939 + j*(1023) -1023 + j*(-995) -1023 + j*(-705) --435 + j*(-878) --1024 + j*(-799) --1024 + j*(309) -782 + j*(-1024) --120 + j*(-1024) --1024 + j*(-593) -938 + j*(-213) -400 + j*(-1024) --514 + j*(-1014) -1023 + j*(120) -1023 + j*(-1024) --432 + j*(-1024) -1023 + j*(616) -714 + j*(-912) -526 + j*(-1024) --572 + j*(-1024) --983 + j*(-621) --829 + j*(511) -339 + j*(521) --891 + j*(-3) --196 + j*(-63) --40 + j*(-61) -738 + j*(-90) --122 + j*(-1024) --408 + j*(-1024) -977 + j*(420) -1023 + j*(-1024) -147 + j*(-1024) -1023 + j*(720) -1023 + j*(-641) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(107) --1024 + j*(1023) -709 + j*(880) --1024 + j*(132) --580 + j*(1023) -454 + j*(627) --1024 + j*(608) --1024 + j*(705) -806 + j*(214) -147 + j*(234) -934 + j*(-328) --33 + j*(-1024) -634 + j*(463) -1023 + j*(-1024) --852 + j*(-1024) --1024 + j*(657) --1024 + j*(1023) -355 + j*(1023) -1023 + j*(1023) --1024 + j*(780) --1024 + j*(1023) -1023 + j*(1023) --1024 + j*(202) --704 + j*(1023) -1023 + j*(1023) --1024 + j*(-179) --1024 + j*(1023) -492 + j*(1023) --1024 + j*(-550) --1024 + j*(939) --9 + j*(1023) -1023 + j*(1023) -1023 + j*(-514) -1023 + j*(-1024) --125 + j*(-1024) -1023 + j*(1023) -1023 + j*(-316) -736 + j*(-1024) -286 + j*(1023) -1023 + j*(1023) -1023 + j*(-915) -30 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --555 + j*(1023) -1023 + j*(1023) -1023 + j*(-539) -1023 + j*(-1024) --697 + j*(-1024) --1024 + j*(-650) --905 + j*(399) -19 + j*(-1024) -13 + j*(-978) --578 + j*(-262) -599 + j*(-439) -599 + j*(-1024) -95 + j*(-521) -309 + j*(751) -1023 + j*(213) -1023 + j*(-336) --253 + j*(1023) -949 + j*(1023) -1023 + j*(-409) -1023 + j*(-1024) --187 + j*(-1024) --1024 + j*(-1024) --1024 + j*(462) -370 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-310) -1023 + j*(-1024) -13 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-117) -1023 + j*(-1024) --677 + j*(-1024) -1023 + j*(600) -1023 + j*(-717) -310 + j*(-1024) --1024 + j*(-1024) --1024 + j*(523) --1024 + j*(923) -491 + j*(1023) --1024 + j*(-66) --1024 + j*(907) -217 + j*(1023) --1024 + j*(-743) --79 + j*(601) -156 + j*(1023) --1024 + j*(-638) --741 + j*(1023) -846 + j*(1023) --920 + j*(-599) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(-310) -1023 + j*(-1024) --190 + j*(-1024) --982 + j*(-1024) -1023 + j*(-1024) -397 + j*(-1024) --911 + j*(-1024) -1023 + j*(-271) -441 + j*(-1024) --1024 + j*(-1024) -1023 + j*(919) -1023 + j*(-1024) -481 + j*(-1024) -1023 + j*(1023) -1023 + j*(-211) -1023 + j*(-830) --700 + j*(-1024) --1024 + j*(-874) --1024 + j*(699) -89 + j*(776) --1024 + j*(-1024) --1024 + j*(-440) --356 + j*(121) -590 + j*(-349) --1024 + j*(-1024) --566 + j*(-899) -1023 + j*(180) -1023 + j*(-1024) --474 + j*(-1024) -1023 + j*(617) -1023 + j*(-1024) -678 + j*(-1024) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf1.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf1.m deleted file mode 100644 index 0c1f82aec3..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH2_sync_4xf1.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch2_sync_f_4x1 = [-47 + j*(-885) -736 + j*(44) -1012 + j*(-410) --506 + j*(-871) --1024 + j*(-995) --1002 + j*(1023) --793 + j*(1023) -1023 + j*(957) --1024 + j*(236) --883 + j*(1023) -887 + j*(1023) --1024 + j*(144) --1024 + j*(1023) -1023 + j*(1023) --1024 + j*(-58) --668 + j*(1023) -1023 + j*(1023) --1024 + j*(266) --578 + j*(1023) -1023 + j*(120) -1023 + j*(-887) --1024 + j*(-770) --1024 + j*(-656) --1007 + j*(947) --1024 + j*(-1024) --1024 + j*(36) --1024 + j*(1023) --1024 + j*(-887) --1024 + j*(337) -262 + j*(1023) --611 + j*(-1024) --1024 + j*(8) --1024 + j*(1023) --795 + j*(-1024) --394 + j*(153) -100 + j*(664) -926 + j*(-278) -0 + j*(-424) -225 + j*(-1024) --918 + j*(-939) -1023 + j*(-658) --261 + j*(-1024) --1024 + j*(-856) --670 + j*(-650) --122 + j*(-217) -46 + j*(1023) -635 + j*(-1024) --1024 + j*(-465) --1017 + j*(1023) --173 + j*(-1024) --1024 + j*(-984) --1024 + j*(899) -353 + j*(1023) -1023 + j*(1023) -1023 + j*(-895) --1024 + j*(-1024) -1023 + j*(401) -636 + j*(-1024) --1009 + j*(-1024) -1023 + j*(688) -1023 + j*(-1024) -258 + j*(-1024) -1023 + j*(167) -1023 + j*(-1024) --917 + j*(-1024) -1023 + j*(462) -1023 + j*(-1024) -391 + j*(-1024) --957 + j*(-1024) --1024 + j*(614) --783 + j*(1023) -409 + j*(241) --1024 + j*(95) --570 + j*(692) --345 + j*(-516) --92 + j*(-90) -416 + j*(1023) -354 + j*(-411) -1023 + j*(-75) -1023 + j*(-1024) --416 + j*(-1024) -1023 + j*(326) -1023 + j*(-605) --172 + j*(-1024) --1024 + j*(-1024) --1024 + j*(223) --882 + j*(1023) -418 + j*(843) --1024 + j*(-1023) --1024 + j*(1023) --408 + j*(654) --1024 + j*(-1024) --1024 + j*(1001) --1024 + j*(1023) -554 + j*(-1024) --1024 + j*(-1024) --1024 + j*(403) -780 + j*(-1024) --978 + j*(-1024) --1024 + j*(44) --1024 + j*(952) -498 + j*(1023) -1023 + j*(359) -1023 + j*(-1024) --17 + j*(1023) -1023 + j*(657) -1023 + j*(-1024) --130 + j*(1023) -888 + j*(1023) -1023 + j*(-805) -89 + j*(1023) -1023 + j*(1023) -1023 + j*(-600) --413 + j*(1023) -1023 + j*(1023) -1023 + j*(972) -1023 + j*(-1024) --512 + j*(-1024) --1024 + j*(-1024) --990 + j*(169) -892 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-794) -378 + j*(-1000) --1024 + j*(-166) --478 + j*(-343) -1023 + j*(-125) -1023 + j*(-1024) --788 + j*(-1024) -1023 + j*(399) -1023 + j*(-772) --1024 + j*(-998) --1024 + j*(-79) --980 + j*(1023) --331 + j*(760) -944 + j*(748) --1024 + j*(899) -17 + j*(1023) -735 + j*(355) --757 + j*(172) -198 + j*(1002) -1023 + j*(502) --139 + j*(484) -406 + j*(1023) -977 + j*(854) --312 + j*(613) -179 + j*(1018) -833 + j*(1023) -1023 + j*(-1024) -497 + j*(-609) --1024 + j*(-666) --1013 + j*(515) -743 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-271) -437 + j*(-1024) --359 + j*(-1024) --988 + j*(-245) -1023 + j*(-759) -417 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-23) -1023 + j*(-996) --348 + j*(-1024) --1024 + j*(-1024) --1024 + j*(689) --690 + j*(1023) -823 + j*(918) --1024 + j*(190) --1024 + j*(1023) -146 + j*(635) --1024 + j*(-260) --1024 + j*(885) -174 + j*(1023) -699 + j*(-455) -120 + j*(-25) --614 + j*(-153) -1023 + j*(-7) -456 + j*(-632) -947 + j*(-844) --1024 + j*(-1024) --1024 + j*(-278) --594 + j*(1023) -889 + j*(1023) --1024 + j*(-667) --1024 + j*(1023) -269 + j*(1023) --1024 + j*(-1024) --1024 + j*(451) --283 + j*(1023) --375 + j*(-1024) --1024 + j*(-601) --724 + j*(474) -405 + j*(-1024) --1024 + j*(-688) --1024 + j*(-176) --749 + j*(1023) -486 + j*(1023) -1023 + j*(518) -1023 + j*(-261) --1024 + j*(1023) -730 + j*(1023) -1023 + j*(448) --1024 + j*(431) --388 + j*(1023) -1023 + j*(1023) --1024 + j*(306) --991 + j*(1000) -741 + j*(1023) --1024 + j*(-481) --834 + j*(1023) --18 + j*(1023) -1023 + j*(960) -1023 + j*(-312) -129 + j*(-175) -63 + j*(-985) -678 + j*(550) -1023 + j*(61) -779 + j*(-1013) --541 + j*(68) --717 + j*(1023) -1023 + j*(762) -132 + j*(1023) -1023 + j*(1023) -1023 + j*(161) --343 + j*(1023) -406 + j*(1023) -1023 + j*(752) -121 + j*(-451) --210 + j*(-1024) --1024 + j*(-1) --498 + j*(780) --314 + j*(-1024) --1024 + j*(-1) --395 + j*(492) --987 + j*(-1024) --1024 + j*(813) --801 + j*(1023) --353 + j*(-878) --1024 + j*(-423) --427 + j*(1023) --643 + j*(-994) --1024 + j*(-38) --124 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --1 + j*(-1024) --386 + j*(-953) -1023 + j*(-1) --1 + j*(-1024) --1 + j*(-942) -1023 + j*(-292) -510 + j*(-87) -121 + j*(-325) -930 + j*(367) -186 + j*(36) -28 + j*(-1024) -10 + j*(747) -1023 + j*(1023) -1023 + j*(60) -1023 + j*(-1024) --419 + j*(-1024) --815 + j*(-1024) --1024 + j*(411) -928 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-461) -1023 + j*(-1006) --659 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-228) -339 + j*(-1024) --1024 + j*(-911) -1023 + j*(301) -777 + j*(-1024) --759 + j*(-1024) --1024 + j*(-783) --1024 + j*(1023) --333 + j*(1023) -761 + j*(1023) --1024 + j*(-848) --883 + j*(982) -427 + j*(1023) --1024 + j*(-569) --1024 + j*(352) -203 + j*(1023) --1024 + j*(-916) --1024 + j*(742) --194 + j*(1023) --848 + j*(-1006) --1024 + j*(234) -241 + j*(1023) -210 + j*(1023) -1023 + j*(-257) -249 + j*(-1024) --644 + j*(-820) -1023 + j*(-360) -51 + j*(-1024) --361 + j*(-1024) -1023 + j*(-1024) --326 + j*(-1024) --1024 + j*(-241) -1023 + j*(-701) --796 + j*(-1024) --1024 + j*(-1) -1023 + j*(-769) --446 + j*(-1024) --1024 + j*(-230) --1024 + j*(677) --1 + j*(752) -1023 + j*(1023) -1023 + j*(-583) -326 + j*(499) -1023 + j*(14) -701 + j*(-282) -227 + j*(-448) -342 + j*(-542) --518 + j*(337) -558 + j*(225) -601 + j*(-251) --195 + j*(-673) -544 + j*(369) -736 + j*(104) --223 + j*(-985) --1010 + j*(57) --1024 + j*(407) -53 + j*(1023) -519 + j*(134) --750 + j*(-226) --484 + j*(-215) -651 + j*(-86) --270 + j*(-195) --817 + j*(1023) -0 + j*(757) -263 + j*(449) -281 + j*(-609) --491 + j*(-701) -363 + j*(106) -804 + j*(-617) --418 + j*(-1012) --719 + j*(-834) --1024 + j*(646) -338 + j*(1023) -487 + j*(18) --596 + j*(247) --1 + j*(107) -731 + j*(-126) -410 + j*(-428) --826 + j*(773) --337 + j*(341) -104 + j*(591) --1 + j*(-749) -211 + j*(-1) -178 + j*(205) -88 + j*(-1024) --28 + j*(127) --716 + j*(-862) --1 + j*(477) --1024 + j*(-1) -301 + j*(7) --1 + j*(129) --1024 + j*(-1) -600 + j*(-171) -109 + j*(-51) --525 + j*(373) --1 + j*(61) -152 + j*(647) -258 + j*(30) --125 + j*(82) -179 + j*(300) --1 + j*(663) --49 + j*(-379) -690 + j*(-1) --803 + j*(582) --1 + j*(-49) -219 + j*(84) -295 + j*(-1) --1 + j*(-445) -210 + j*(46) -693 + j*(-585) --670 + j*(-453) --715 + j*(163) -233 + j*(246) --597 + j*(-1) --1 + j*(-298) -162 + j*(347) --15 + j*(-1) --1 + j*(-841) --1 + j*(988) -910 + j*(-1) -202 + j*(403) -129 + j*(132) --131 + j*(-1) -184 + j*(426) -409 + j*(-76) -745 + j*(210) -323 + j*(238) --1 + j*(-414) -203 + j*(644) -316 + j*(273) --1 + j*(-154) -225 + j*(422) -766 + j*(-55) --388 + j*(241) --56 + j*(-353) -178 + j*(586) -394 + j*(-946) -79 + j*(288) -890 + j*(-862) --99 + j*(-646) -271 + j*(102) -784 + j*(-17) -429 + j*(-281) --155 + j*(-601) -240 + j*(462) -325 + j*(-95) --14 + j*(105) -353 + j*(335) -897 + j*(59) --1 + j*(516) -14 + j*(-856) --185 + j*(-1) --202 + j*(-307) -245 + j*(403) --191 + j*(-234) --993 + j*(-1) -17 + j*(142) --393 + j*(-669) --702 + j*(-1024) --228 + j*(746) --28 + j*(312) -86 + j*(-198) --246 + j*(-1) -226 + j*(150) --1 + j*(-587) --1 + j*(-134) --339 + j*(-109) -60 + j*(-898) --266 + j*(242) -343 + j*(242) --99 + j*(-209) --268 + j*(422) -612 + j*(297) -159 + j*(-184) --804 + j*(-87) -146 + j*(-43) --257 + j*(468) --81 + j*(1018) --296 + j*(214) --11 + j*(228) --74 + j*(904) --429 + j*(481) -372 + j*(-72) --392 + j*(-277) -92 + j*(-232) -158 + j*(130) --1 + j*(861) -733 + j*(123) -177 + j*(-135) -303 + j*(-130) -1023 + j*(406) --137 + j*(-55) --1 + j*(713) -431 + j*(-136) -48 + j*(-1) --2 + j*(425) --1 + j*(852) -765 + j*(-33) -584 + j*(-1) --1 + j*(-1024) --118 + j*(-64) -7 + j*(281) -427 + j*(-428) --372 + j*(-665) -286 + j*(239) -825 + j*(-1024) -592 + j*(300) --1024 + j*(141) --79 + j*(512) --259 + j*(-258) -212 + j*(-82) -94 + j*(398) -108 + j*(-122) -44 + j*(-139) --16 + j*(-726) -576 + j*(-166) -38 + j*(-96) -46 + j*(375) -524 + j*(-648) -326 + j*(-798) -272 + j*(393) -798 + j*(-442) --789 + j*(-1024) --845 + j*(-26) --178 + j*(406) --111 + j*(-896) --1024 + j*(-117) -54 + j*(332) -88 + j*(-617) --1024 + j*(-82) --623 + j*(889) --795 + j*(697) -890 + j*(592) -42 + j*(365) --291 + j*(100) -152 + j*(510) -187 + j*(410) -876 + j*(142) -283 + j*(471) --619 + j*(-1006) --72 + j*(385) -710 + j*(-157) --286 + j*(-885) -26 + j*(333) -1023 + j*(-1024) -872 + j*(-905) --780 + j*(-1024) --1024 + j*(535) --989 + j*(480) -19 + j*(412) --412 + j*(44) --1024 + j*(6) -204 + j*(533) -0 + j*(270) --257 + j*(0) --253 + j*(20) --309 + j*(256) --585 + j*(221) -608 + j*(36) --6 + j*(234) -118 + j*(567) -404 + j*(-330) -37 + j*(-151) --9 + j*(-1024) --354 + j*(-140) -68 + j*(353) --431 + j*(-730) --13 + j*(-277) -163 + j*(568) -158 + j*(519) -276 + j*(450) -361 + j*(-170) --510 + j*(146) --19 + j*(-379) --521 + j*(551) --186 + j*(218) --467 + j*(168) -1023 + j*(373) -918 + j*(-313) -673 + j*(-579) --747 + j*(503) --67 + j*(212) --156 + j*(657) --34 + j*(941) -361 + j*(363) -905 + j*(165) -69 + j*(165) --178 + j*(-533) --422 + j*(433) -439 + j*(464) -494 + j*(-909) --234 + j*(395) --81 + j*(848) -253 + j*(269) -911 + j*(-378) -354 + j*(-667) -327 + j*(-595) --329 + j*(249) -67 + j*(-511) -238 + j*(-451) --622 + j*(-4) -901 + j*(-336) --21 + j*(-480) --1024 + j*(-608) -39 + j*(314) -74 + j*(-681) --493 + j*(-33) --24 + j*(396) -42 + j*(-715) -1023 + j*(-65) --1024 + j*(90) -0 + j*(946) -198 + j*(126) --262 + j*(485) -744 + j*(-383) --53 + j*(-134) --229 + j*(623) -208 + j*(-502) -335 + j*(-434) --881 + j*(114) --244 + j*(-33) --398 + j*(-565) --815 + j*(-15) -16 + j*(159) -0 + j*(-1024) --1024 + j*(0) --16 + j*(-419) -0 + j*(1023) -358 + j*(54) --106 + j*(392) --75 + j*(236) -310 + j*(768) --71 + j*(646) -116 + j*(-93) --48 + j*(346) --382 + j*(127) --446 + j*(-45) -547 + j*(-690) --124 + j*(-586) --158 + j*(75) -648 + j*(-341) -0 + j*(707) --150 + j*(-209) -874 + j*(0) -4 + j*(-694) --178 + j*(199) -835 + j*(0) -0 + j*(-272) -40 + j*(338) -1023 + j*(358) -587 + j*(-3) --180 + j*(-1024) --397 + j*(68) -354 + j*(-120) -0 + j*(-884) --195 + j*(164) -257 + j*(232) -0 + j*(668) -972 + j*(11) -835 + j*(-253) -124 + j*(-927) --284 + j*(168) -753 + j*(216) --41 + j*(-548) --250 + j*(290) -1023 + j*(827) -982 + j*(-973) --112 + j*(-1024) --149 + j*(88) -347 + j*(-695) -245 + j*(-170) --185 + j*(189) -79 + j*(127) -1023 + j*(-1024) -418 + j*(-402) --1024 + j*(-960) -330 + j*(1023) --350 + j*(114) --216 + j*(-399) --17 + j*(-37) --290 + j*(240) -866 + j*(664) --57 + j*(713) --72 + j*(-1024) --244 + j*(126) -600 + j*(-216) -62 + j*(-962) --207 + j*(277) -1023 + j*(1023) -1023 + j*(-75) -398 + j*(-661) --431 + j*(-1024) -0 + j*(-624) --540 + j*(77) -737 + j*(0) --97 + j*(-558) --516 + j*(67) -1023 + j*(857) -1023 + j*(-855) -289 + j*(-1024) -52 + j*(137) -964 + j*(0) --231 + j*(-369) --15 + j*(405) -226 + j*(410) -347 + j*(0) -392 + j*(-341) --146 + j*(-628) --1024 + j*(0) --647 + j*(220) -0 + j*(-514) --550 + j*(-202) --857 + j*(115) -776 + j*(-497) -25 + j*(-610) --616 + j*(-1008) -367 + j*(-129) -1023 + j*(-769) --88 + j*(-1024) -269 + j*(262) -93 + j*(-113) -1023 + j*(-1024) -76 + j*(247) --183 + j*(-954) --1024 + j*(0) --560 + j*(54) -52 + j*(-981) --620 + j*(-399) --945 + j*(-285) -342 + j*(-596) -226 + j*(-743) --1014 + j*(-313) -1023 + j*(103) -463 + j*(-1024) --1024 + j*(-1024) -1023 + j*(649) -766 + j*(-1024) --171 + j*(-1024) --1024 + j*(0) --1024 + j*(775) -127 + j*(1023) -329 + j*(928) --386 + j*(-11) -642 + j*(228) -9 + j*(639) --53 + j*(1023) -1023 + j*(372) -558 + j*(-242) -74 + j*(-34) -1023 + j*(-507) -18 + j*(-980) -527 + j*(536) -833 + j*(450) -991 + j*(-488) --603 + j*(-599) --877 + j*(3) --1024 + j*(1023) -296 + j*(1014) --1024 + j*(604) --495 + j*(1023) -19 + j*(911) --85 + j*(297) --35 + j*(-71) -21 + j*(-424) --326 + j*(-85) -745 + j*(-432) -149 + j*(-1024) -278 + j*(548) -1023 + j*(-307) -197 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-123) --870 + j*(1023) -504 + j*(1023) --1024 + j*(-95) --341 + j*(1023) -478 + j*(1023) --1024 + j*(420) --6 + j*(1023) -1023 + j*(110) --1024 + j*(-36) --113 + j*(1023) -1023 + j*(148) --1024 + j*(579) --80 + j*(1023) -1023 + j*(459) -567 + j*(-458) --235 + j*(-736) --1024 + j*(-514) --1024 + j*(1023) --113 + j*(-1024) --1024 + j*(-394) --1024 + j*(1023) -317 + j*(-1024) --1024 + j*(-1024) --1024 + j*(292) --102 + j*(-1024) --1024 + j*(-1024) --1024 + j*(885) -393 + j*(-1024) --1000 + j*(12) --884 + j*(-733) --511 + j*(588) --705 + j*(279) -1023 + j*(847) -659 + j*(-184) --1017 + j*(175) --286 + j*(872) -497 + j*(782) --338 + j*(719) --402 + j*(641) -713 + j*(301) --854 + j*(-615) --1024 + j*(537) -171 + j*(963) --908 + j*(-686) --1024 + j*(233) --1024 + j*(561) -249 + j*(983) -661 + j*(217) -1023 + j*(0) --927 + j*(-784) -767 + j*(877) -882 + j*(-1008) --693 + j*(-691) -769 + j*(1023) -849 + j*(453) -900 + j*(-736) -330 + j*(598) -696 + j*(76) -1023 + j*(-409) --356 + j*(932) -0 + j*(1023) -1023 + j*(0) -1023 + j*(-730) -0 + j*(-1024) --1024 + j*(-979) --1024 + j*(556) -73 + j*(-1024) --1024 + j*(-1024) --1024 + j*(141) -744 + j*(-418) --303 + j*(-16) --534 + j*(-1024) -841 + j*(-1024) -827 + j*(-753) --273 + j*(-1024) -871 + j*(-95) -1023 + j*(-283) -543 + j*(-1024) --373 + j*(-1024) --1024 + j*(-659) --615 + j*(1013) --145 + j*(1023) --1024 + j*(-1024) --881 + j*(-15) --879 + j*(1023) --807 + j*(-696) --1024 + j*(653) --804 + j*(621) --156 + j*(-1024) --1024 + j*(-1024) --1024 + j*(672) -300 + j*(-1024) --519 + j*(-1024) --1024 + j*(-193) --180 + j*(1023) -1023 + j*(1023) -1023 + j*(-429) -207 + j*(-731) -228 + j*(1023) -1023 + j*(-105) --431 + j*(-296) -90 + j*(1023) -735 + j*(-44) -390 + j*(-608) -352 + j*(-950) --22 + j*(-874) --1024 + j*(-231) -456 + j*(-897) --1024 + j*(-1024) --1024 + j*(1011) --627 + j*(833) -1023 + j*(1023) -1023 + j*(-27) -554 + j*(-1024) -799 + j*(1023) -1023 + j*(229) -370 + j*(-1024) -633 + j*(1023) -1023 + j*(1023) -787 + j*(-1024) -792 + j*(869) -1023 + j*(-173) -824 + j*(-1024) -719 + j*(899) -1023 + j*(-23) -76 + j*(-1024) --909 + j*(-1024) --1024 + j*(-26) --855 + j*(1023) -729 + j*(755) --1024 + j*(687) --609 + j*(1023) -673 + j*(829) --1006 + j*(1023) -686 + j*(1023) -1023 + j*(63) --1024 + j*(363) -1023 + j*(1023) -1023 + j*(128) --1024 + j*(657) -1023 + j*(1023) -1023 + j*(233) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-352) --1024 + j*(720) --247 + j*(-1024) --1024 + j*(-928) --1024 + j*(591) -526 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-454) -490 + j*(-1024) --1024 + j*(-1024) --1024 + j*(0) -680 + j*(-1024) --51 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -375 + j*(1023) -1023 + j*(1023) -1023 + j*(-865) --507 + j*(1023) -1023 + j*(1023) -1023 + j*(-922) --668 + j*(1023) -1023 + j*(1023) -1023 + j*(-438) --950 + j*(968) -1023 + j*(1023) -1023 + j*(367) -1023 + j*(-708) --686 + j*(-1024) --1024 + j*(-1024) --995 + j*(86) --144 + j*(-2) --168 + j*(31) --924 + j*(-308) -237 + j*(1023) -922 + j*(280) -1023 + j*(-927) -63 + j*(145) -844 + j*(722) -1023 + j*(-451) --641 + j*(624) -108 + j*(1023) -1023 + j*(-300) -1023 + j*(-217) --495 + j*(-1024) --1024 + j*(-991) --1024 + j*(124) -858 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-393) -1023 + j*(-323) -1023 + j*(-999) --411 + j*(-1024) -1023 + j*(-833) -1023 + j*(-1024) --953 + j*(-1024) -1023 + j*(251) -1023 + j*(-1024) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-92) --1024 + j*(1023) -28 + j*(1023) --1024 + j*(-1024) --1024 + j*(987) --793 + j*(1023) --1024 + j*(-921) --1024 + j*(333) --357 + j*(1023) --648 + j*(-1024) --1024 + j*(223) --967 + j*(1023) --776 + j*(-1024) --1024 + j*(144) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(508) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-16) -1 + j*(-1024) --1024 + j*(-1024) -1023 + j*(294) -407 + j*(-1024) --258 + j*(-1024) -1023 + j*(-242) -1023 + j*(-1024) --419 + j*(-1024) -1023 + j*(422) -1023 + j*(-545) -1023 + j*(-1024) --918 + j*(-1024) --1024 + j*(-801) --1024 + j*(1023) -184 + j*(417) --1024 + j*(-395) --842 + j*(453) --741 + j*(-203) -70 + j*(335) --527 + j*(329) -219 + j*(-990) -1023 + j*(-424) -1023 + j*(-1024) --314 + j*(-1024) -1023 + j*(209) -1023 + j*(-1024) --726 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --481 + j*(1023) -311 + j*(543) --821 + j*(-40) --327 + j*(453) --477 + j*(106) -24 + j*(71) -788 + j*(285) -108 + j*(-988) -990 + j*(-444) -706 + j*(-1024) --413 + j*(-1024) -1006 + j*(180) -1023 + j*(-853) -185 + j*(-1024) --472 + j*(-1024) --1024 + j*(-49) --1024 + j*(592) -549 + j*(773) --1024 + j*(189) --1024 + j*(440) --50 + j*(571) --1024 + j*(306) --614 + j*(509) -1023 + j*(577) -290 + j*(-527) -43 + j*(67) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf0.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf0.m deleted file mode 100644 index ffdb5f8781..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf0.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch3_sync_f_4x0 = [1023 + j*(-1024) -658 + j*(-1024) --1024 + j*(-1024) --801 + j*(607) --51 + j*(-1024) --718 + j*(-640) --485 + j*(626) --68 + j*(-221) --470 + j*(1023) -301 + j*(140) --856 + j*(-447) -49 + j*(1023) -166 + j*(349) --1024 + j*(-501) --1024 + j*(1023) -93 + j*(1023) -1023 + j*(1023) -1023 + j*(-923) -433 + j*(-1024) --827 + j*(-1024) -1023 + j*(-133) -1023 + j*(-1024) --336 + j*(-1024) -1023 + j*(-65) -482 + j*(-1024) --159 + j*(-1024) -559 + j*(1023) -1023 + j*(153) -1023 + j*(-864) --202 + j*(1023) -1023 + j*(759) -1023 + j*(-209) -710 + j*(-1024) --704 + j*(-1024) --1024 + j*(-837) --1024 + j*(758) -594 + j*(-1024) --1024 + j*(-1024) --1024 + j*(584) -369 + j*(-1024) --1024 + j*(-1024) --1024 + j*(438) -608 + j*(-1024) --769 + j*(-1024) --1024 + j*(-145) -607 + j*(-1024) --1024 + j*(-229) --60 + j*(-719) --189 + j*(1023) --574 + j*(-299) -1023 + j*(356) -800 + j*(-735) --48 + j*(1023) -1023 + j*(569) -1010 + j*(-354) -43 + j*(591) -777 + j*(346) -383 + j*(6) --855 + j*(441) --648 + j*(1023) -1023 + j*(1023) --960 + j*(-218) --1024 + j*(1023) -25 + j*(1023) -1023 + j*(216) -1023 + j*(692) -980 + j*(-1024) --506 + j*(-1024) -1023 + j*(950) -1023 + j*(-1024) -115 + j*(-1024) -582 + j*(1023) -1023 + j*(-1024) -916 + j*(-697) -459 + j*(1023) -1023 + j*(1023) -1023 + j*(-928) --363 + j*(1023) -574 + j*(1023) -1023 + j*(502) -1023 + j*(-213) -6 + j*(-1024) --1024 + j*(-1024) --1024 + j*(224) -737 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-286) -1023 + j*(-687) --6 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-985) --328 + j*(-1024) --1024 + j*(-855) -1009 + j*(-807) --784 + j*(-1024) --1024 + j*(-824) --1024 + j*(1023) -786 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -716 + j*(1023) -1023 + j*(825) -1023 + j*(-1024) --73 + j*(1023) -1023 + j*(1023) -1023 + j*(-835) --125 + j*(1023) -1023 + j*(1023) -1023 + j*(-528) --515 + j*(1023) -1023 + j*(1023) -1023 + j*(-292) -1023 + j*(-1024) -207 + j*(-1024) --750 + j*(-1024) --623 + j*(160) -740 + j*(-310) -449 + j*(-1024) --161 + j*(-443) -291 + j*(765) -1023 + j*(831) -1023 + j*(-521) -32 + j*(1023) -1023 + j*(1023) -1023 + j*(-527) --582 + j*(1023) -465 + j*(1023) -1023 + j*(11) -1023 + j*(-437) --9 + j*(-1024) --1024 + j*(-535) --1024 + j*(186) -829 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-596) -1023 + j*(-748) -1023 + j*(-844) --731 + j*(-1024) -953 + j*(522) -1023 + j*(113) -1023 + j*(-1024) -84 + j*(1023) -1023 + j*(1023) -1023 + j*(-659) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-1024) --1024 + j*(699) -846 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-133) -1023 + j*(-1024) --436 + j*(-1024) --1024 + j*(-513) -1023 + j*(-885) -495 + j*(-1024) --576 + j*(-1024) -1023 + j*(122) -1023 + j*(-1024) --480 + j*(-1024) --1024 + j*(-918) --1024 + j*(621) --710 + j*(1023) -42 + j*(1023) --1024 + j*(-1024) --1024 + j*(1022) --986 + j*(1020) -442 + j*(-1024) --713 + j*(-255) --1024 + j*(-107) -650 + j*(-1024) --1000 + j*(-1024) --1024 + j*(-98) -884 + j*(-1024) --126 + j*(-1024) --1024 + j*(-637) -216 + j*(717) --359 + j*(1023) -955 + j*(-848) -465 + j*(-687) -708 + j*(1023) -940 + j*(-651) -79 + j*(-1017) -1023 + j*(128) -1023 + j*(-1024) --634 + j*(-1024) -1023 + j*(639) -1023 + j*(-1024) --58 + j*(-1024) -1023 + j*(813) -1023 + j*(-684) --50 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-1) --189 + j*(1023) -617 + j*(1023) --1024 + j*(-184) --788 + j*(529) -75 + j*(812) --494 + j*(414) -1023 + j*(469) -385 + j*(-180) -392 + j*(-182) -370 + j*(-560) --466 + j*(-876) -812 + j*(340) -1023 + j*(-613) --457 + j*(-788) --267 + j*(-1024) --1024 + j*(563) --1024 + j*(-141) -483 + j*(1023) --734 + j*(-441) --1024 + j*(-242) --91 + j*(887) --74 + j*(-1024) --1024 + j*(159) --1024 + j*(267) -10 + j*(-1024) --596 + j*(-388) --1024 + j*(-250) -501 + j*(-1024) --1 + j*(-743) --1024 + j*(-538) --220 + j*(1023) --741 + j*(1023) -1023 + j*(589) -1023 + j*(-365) --683 + j*(1023) -1023 + j*(776) -912 + j*(-104) --1024 + j*(1023) --27 + j*(403) -988 + j*(435) -148 + j*(392) -1023 + j*(374) -512 + j*(-771) -633 + j*(397) -777 + j*(322) -1023 + j*(-287) --75 + j*(-220) --271 + j*(-902) --1024 + j*(534) -955 + j*(1023) --1024 + j*(305) --1024 + j*(1023) -605 + j*(1023) --504 + j*(-481) --650 + j*(-1) --113 + j*(866) --908 + j*(-1024) --1024 + j*(-1) --921 + j*(1023) --90 + j*(-1024) --1024 + j*(-621) --385 + j*(-876) --336 + j*(266) --414 + j*(191) -371 + j*(1023) -1023 + j*(-170) --1024 + j*(622) --1 + j*(1023) -1023 + j*(609) --1024 + j*(271) --1 + j*(1023) -889 + j*(1023) --1024 + j*(15) --621 + j*(1023) --1 + j*(1023) --1024 + j*(-505) --1024 + j*(537) --727 + j*(1023) -1023 + j*(959) -1023 + j*(433) -774 + j*(-1024) --27 + j*(-825) -1023 + j*(765) -1023 + j*(-1) -593 + j*(-327) --216 + j*(1023) -168 + j*(-1) -1023 + j*(298) --715 + j*(307) -117 + j*(976) -723 + j*(751) --941 + j*(-392) --702 + j*(844) --365 + j*(490) -514 + j*(1023) -961 + j*(616) -425 + j*(-1024) --420 + j*(-1024) -1023 + j*(822) -1023 + j*(-812) -409 + j*(-1024) -1023 + j*(1023) -1023 + j*(-332) -958 + j*(-1024) -346 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --382 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-579) --1024 + j*(693) -254 + j*(-1024) --566 + j*(-1024) --1024 + j*(314) --47 + j*(-1024) --769 + j*(-1024) --1024 + j*(424) -467 + j*(-631) --231 + j*(-1024) --735 + j*(-1) -319 + j*(-262) --49 + j*(85) -488 + j*(-1) --1 + j*(469) --1 + j*(-1024) -131 + j*(-1) -82 + j*(-39) --9 + j*(-637) --386 + j*(-1) -41 + j*(-30) -410 + j*(-225) -136 + j*(519) --200 + j*(-603) --23 + j*(55) -1023 + j*(-110) --1 + j*(-68) --68 + j*(53) -78 + j*(238) -1023 + j*(-725) -649 + j*(356) --784 + j*(-263) -251 + j*(-327) --152 + j*(5) -631 + j*(-1) -428 + j*(-383) --182 + j*(-43) -34 + j*(-174) -8 + j*(395) --177 + j*(-112) -150 + j*(-76) -284 + j*(-482) --191 + j*(-200) -121 + j*(-22) --388 + j*(-208) --421 + j*(-727) --583 + j*(432) --404 + j*(281) -992 + j*(408) -92 + j*(51) -56 + j*(228) -719 + j*(48) -88 + j*(98) --323 + j*(118) -223 + j*(113) -95 + j*(194) --144 + j*(-27) -96 + j*(-83) -132 + j*(-143) --114 + j*(-57) -378 + j*(-225) -123 + j*(-786) --434 + j*(-214) --638 + j*(-277) --204 + j*(469) --44 + j*(-92) -127 + j*(-594) -163 + j*(-262) -4 + j*(-96) --422 + j*(-441) --336 + j*(1003) --255 + j*(522) -10 + j*(81) --238 + j*(-84) -191 + j*(-1) --32 + j*(70) --107 + j*(-220) --866 + j*(-1) -297 + j*(301) --1 + j*(260) -351 + j*(-250) --77 + j*(56) --1 + j*(98) --16 + j*(-82) --102 + j*(59) --113 + j*(41) -11 + j*(81) -39 + j*(208) -16 + j*(-123) --509 + j*(-1) --414 + j*(472) -33 + j*(-100) --530 + j*(-383) --356 + j*(-330) -669 + j*(358) --118 + j*(9) -190 + j*(-1024) -84 + j*(-38) -811 + j*(-168) -97 + j*(-771) -114 + j*(18) -320 + j*(-5) --1 + j*(-823) --38 + j*(-144) --114 + j*(29) -17 + j*(394) -864 + j*(179) --134 + j*(-52) --175 + j*(1023) -52 + j*(-250) -252 + j*(-53) -456 + j*(149) -280 + j*(114) --83 + j*(-122) -58 + j*(111) -80 + j*(-329) --55 + j*(-136) --209 + j*(112) -483 + j*(-74) --32 + j*(255) -94 + j*(20) --589 + j*(-206) --253 + j*(233) -61 + j*(-1) --181 + j*(-221) --1 + j*(556) --402 + j*(-417) -311 + j*(-1) -453 + j*(-243) -76 + j*(-14) -176 + j*(-1) -108 + j*(-596) -100 + j*(17) --570 + j*(245) --599 + j*(1009) -319 + j*(546) --112 + j*(13) --547 + j*(-80) --496 + j*(43) --97 + j*(-56) --657 + j*(148) --383 + j*(520) -425 + j*(886) -224 + j*(175) -234 + j*(187) -5 + j*(-159) --43 + j*(-1) -81 + j*(112) -97 + j*(-179) --229 + j*(428) -425 + j*(-990) -401 + j*(249) --16 + j*(200) -508 + j*(-1) --1 + j*(84) --89 + j*(129) -255 + j*(350) -1021 + j*(969) -201 + j*(-1024) -1002 + j*(-927) --1024 + j*(-654) --135 + j*(-35) -255 + j*(-913) --683 + j*(-480) --135 + j*(-129) -571 + j*(117) -879 + j*(-996) --108 + j*(-502) -152 + j*(64) -341 + j*(-382) --608 + j*(-646) -88 + j*(87) -1023 + j*(-320) --1 + j*(-824) --948 + j*(-933) --1024 + j*(-1) --122 + j*(8) -9 + j*(51) --542 + j*(18) --105 + j*(-46) -0 + j*(9) --264 + j*(379) -224 + j*(447) -421 + j*(170) -24 + j*(40) --51 + j*(0) -61 + j*(-387) -16 + j*(55) -1023 + j*(109) -1023 + j*(-481) --846 + j*(-687) --749 + j*(-208) --1024 + j*(995) --15 + j*(27) --953 + j*(-235) --270 + j*(344) --18 + j*(33) -207 + j*(432) --642 + j*(-804) -402 + j*(-444) -66 + j*(74) --84 + j*(-7) -0 + j*(-27) -54 + j*(120) -1023 + j*(306) -327 + j*(-579) --174 + j*(-404) --138 + j*(-541) --290 + j*(-975) --23 + j*(183) -24 + j*(-1) --575 + j*(-217) --91 + j*(196) --360 + j*(-452) --1024 + j*(122) --294 + j*(295) --23 + j*(-188) --59 + j*(-381) --348 + j*(-208) -46 + j*(-132) -112 + j*(0) --95 + j*(4) -0 + j*(-71) --144 + j*(491) -69 + j*(71) -119 + j*(-30) -14 + j*(229) -470 + j*(372) -141 + j*(16) -95 + j*(828) -603 + j*(126) -807 + j*(-238) --103 + j*(74) -0 + j*(-154) -84 + j*(286) --78 + j*(44) --591 + j*(-939) -62 + j*(170) --899 + j*(867) -424 + j*(321) -0 + j*(742) --46 + j*(25) -190 + j*(0) -394 + j*(-243) --34 + j*(13) -914 + j*(-30) -395 + j*(704) --187 + j*(-944) -17 + j*(89) -1023 + j*(292) -747 + j*(-200) -18 + j*(56) -1023 + j*(1023) -59 + j*(-586) -1023 + j*(-1024) --1024 + j*(298) --1024 + j*(-173) --20 + j*(136) --302 + j*(-957) --1024 + j*(-717) --65 + j*(172) --595 + j*(-111) --958 + j*(-269) -117 + j*(548) --63 + j*(-164) -69 + j*(407) --93 + j*(-31) --11 + j*(-120) -291 + j*(-85) -19 + j*(-285) --472 + j*(94) --222 + j*(682) -677 + j*(601) -32 + j*(-36) -0 + j*(633) -339 + j*(547) -33 + j*(-5) -274 + j*(213) --11 + j*(-169) -249 + j*(-318) --15 + j*(26) -32 + j*(189) --14 + j*(-865) --9 + j*(47) --2 + j*(27) -0 + j*(918) -124 + j*(765) -760 + j*(-330) -869 + j*(-552) --65 + j*(127) -89 + j*(29) -542 + j*(-313) --149 + j*(158) -158 + j*(-725) --79 + j*(0) --738 + j*(57) -42 + j*(-243) --566 + j*(0) -0 + j*(-114) -118 + j*(-167) --496 + j*(0) -0 + j*(-376) --10 + j*(552) -389 + j*(0) -0 + j*(986) -184 + j*(39) -87 + j*(0) -0 + j*(104) -162 + j*(168) --145 + j*(143) --514 + j*(649) -224 + j*(52) --227 + j*(-40) -314 + j*(252) -0 + j*(-94) --139 + j*(-132) -306 + j*(6) --57 + j*(633) --37 + j*(-106) -1023 + j*(-17) -385 + j*(-763) --28 + j*(-92) -122 + j*(898) -467 + j*(-32) --20 + j*(-45) -444 + j*(-342) --207 + j*(904) --408 + j*(-409) -24 + j*(-42) -252 + j*(-100) -0 + j*(-132) -37 + j*(-39) --501 + j*(908) --250 + j*(13) -454 + j*(436) -8 + j*(0) --359 + j*(393) -51 + j*(62) -105 + j*(0) --909 + j*(-160) -7 + j*(150) --385 + j*(-356) --249 + j*(542) --197 + j*(553) --110 + j*(-191) --656 + j*(-109) -20 + j*(504) --32 + j*(-202) -8 + j*(572) --327 + j*(286) -490 + j*(-138) --34 + j*(-63) --186 + j*(-433) -101 + j*(-130) -1023 + j*(0) --37 + j*(-14) -0 + j*(-86) -370 + j*(-207) --11 + j*(84) --163 + j*(-378) -0 + j*(34) -293 + j*(0) --76 + j*(0) --137 + j*(52) -10 + j*(40) -68 + j*(0) -0 + j*(-394) -0 + j*(165) --307 + j*(0) --209 + j*(50) --96 + j*(-473) --527 + j*(-109) --301 + j*(46) -62 + j*(-866) --315 + j*(-207) --759 + j*(190) -185 + j*(-257) --613 + j*(150) -0 + j*(334) -177 + j*(-110) --233 + j*(998) -361 + j*(340) -1023 + j*(-389) -595 + j*(-461) --1024 + j*(-801) --77 + j*(276) --242 + j*(-949) --1024 + j*(-396) --468 + j*(498) --213 + j*(-614) --569 + j*(-392) --842 + j*(537) -141 + j*(-1024) --583 + j*(-893) --1024 + j*(-333) -484 + j*(-1024) -55 + j*(-1024) --1024 + j*(-316) --356 + j*(316) --424 + j*(1023) -1023 + j*(347) -1023 + j*(-754) --402 + j*(1023) -1023 + j*(1023) -1023 + j*(-292) --758 + j*(1012) -640 + j*(1023) -998 + j*(504) --1024 + j*(638) --854 + j*(1023) -857 + j*(1023) --1024 + j*(-129) --695 + j*(721) -538 + j*(1023) -1023 + j*(758) -714 + j*(-818) -1023 + j*(-1024) --758 + j*(-999) -1023 + j*(-322) -734 + j*(-1024) --637 + j*(-1024) -1023 + j*(510) -864 + j*(-1024) --337 + j*(-1024) -1023 + j*(764) -1023 + j*(-1024) -28 + j*(-1024) -1023 + j*(908) -1023 + j*(-1024) -395 + j*(-1024) --1024 + j*(-990) --746 + j*(-434) -0 + j*(1023) -793 + j*(616) --1024 + j*(86) -267 + j*(1023) -716 + j*(228) --215 + j*(1007) -1023 + j*(1023) -951 + j*(-763) -156 + j*(756) -1015 + j*(86) -1023 + j*(-1024) -498 + j*(852) -1023 + j*(-511) -750 + j*(-1024) --1024 + j*(-1024) --1024 + j*(843) --814 + j*(1023) -888 + j*(951) --711 + j*(879) --209 + j*(1009) -1023 + j*(707) --1024 + j*(198) --175 + j*(1023) -1023 + j*(1023) --1024 + j*(610) --32 + j*(1023) -1023 + j*(779) --1006 + j*(795) -240 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --308 + j*(-1024) --1024 + j*(3) --739 + j*(1023) --529 + j*(-1024) --1024 + j*(31) --721 + j*(1023) --370 + j*(-1024) --1024 + j*(-245) --1024 + j*(875) --65 + j*(-1024) --1024 + j*(-375) --1024 + j*(78) -328 + j*(-1024) --420 + j*(-1024) --1024 + j*(-131) --870 + j*(1023) -56 + j*(1023) -1023 + j*(-22) -1023 + j*(-384) --414 + j*(1023) -532 + j*(1023) -1023 + j*(485) --1024 + j*(656) --927 + j*(1023) -856 + j*(1023) --1024 + j*(198) --496 + j*(1023) -430 + j*(1023) --1024 + j*(-409) --1024 + j*(1023) --239 + j*(1023) -1023 + j*(471) -1023 + j*(318) -10 + j*(-968) --360 + j*(-723) -494 + j*(-48) -313 + j*(-1024) -292 + j*(-539) --55 + j*(824) -754 + j*(-1024) -973 + j*(0) --220 + j*(603) -325 + j*(626) -351 + j*(-94) --565 + j*(704) -815 + j*(230) -333 + j*(920) -241 + j*(-787) -105 + j*(-396) --788 + j*(-228) --759 + j*(845) --816 + j*(-888) --1024 + j*(456) --788 + j*(1023) --611 + j*(-763) --1024 + j*(436) --251 + j*(1023) --905 + j*(-1024) --1024 + j*(427) --1024 + j*(1023) --954 + j*(-1024) --1024 + j*(721) --636 + j*(1023) -1023 + j*(1023) -1023 + j*(-518) -1023 + j*(-1024) --1024 + j*(-926) -1023 + j*(-548) -692 + j*(-1024) --1024 + j*(-934) -1023 + j*(-1024) --73 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-994) -129 + j*(-1024) --1024 + j*(-875) -1023 + j*(-936) --496 + j*(-1024) --799 + j*(-440) --1024 + j*(1023) -571 + j*(1023) -1023 + j*(831) -1023 + j*(-806) -302 + j*(1023) -1023 + j*(1023) -1023 + j*(-652) --687 + j*(1023) -1023 + j*(1023) -1023 + j*(1) --716 + j*(1023) -1023 + j*(1023) -1023 + j*(132) --861 + j*(1023) -1000 + j*(1023) -1023 + j*(329) -994 + j*(-895) -25 + j*(-1024) --1024 + j*(-122) --1024 + j*(602) --22 + j*(-1024) --1024 + j*(-655) --1024 + j*(487) -351 + j*(-1024) --1024 + j*(-1024) --1024 + j*(532) -693 + j*(-1024) --1024 + j*(-1024) --1024 + j*(246) -795 + j*(-1024) --902 + j*(-1024) --1024 + j*(-921) --1024 + j*(1023) --904 + j*(1023) -1023 + j*(1023) -976 + j*(-265) --845 + j*(1023) -580 + j*(1023) -967 + j*(353) --981 + j*(828) --782 + j*(417) -834 + j*(1023) --1024 + j*(-236) --1024 + j*(1023) --42 + j*(1023) --1024 + j*(-758) --1024 + j*(831) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(-26) -1023 + j*(-1024) --676 + j*(-1024) -1023 + j*(-19) -968 + j*(-1024) --639 + j*(-1024) -1023 + j*(582) -1023 + j*(-488) --444 + j*(-1024) -1023 + j*(-205) --684 + j*(-1024) --1024 + j*(-576) -784 + j*(-575) --1024 + j*(-1024) --1024 + j*(701) --231 + j*(1023) -1023 + j*(1023) -1023 + j*(-18) -785 + j*(-1024) -861 + j*(1023) -1023 + j*(181) -980 + j*(-1024) -1023 + j*(1023) -1023 + j*(-528) -1023 + j*(-1024) -1023 + j*(1023) -1023 + j*(-685) -1023 + j*(-1024) -1023 + j*(1023) -693 + j*(-94) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-656) --837 + j*(1023) -1023 + j*(872) --1024 + j*(746) -632 + j*(1023) -1023 + j*(880) --1024 + j*(1023) -118 + j*(1023) -1023 + j*(1023) --1024 + j*(1011) --74 + j*(1023) -1023 + j*(682) --1024 + j*(793) --464 + j*(1023) -1023 + j*(594) -1023 + j*(-638) --78 + j*(-1024) --1024 + j*(-78) --1001 + j*(584) -3 + j*(-1024) --1024 + j*(-941) --1024 + j*(568) -704 + j*(-1024) -81 + j*(289) --1024 + j*(-135) -298 + j*(-1024) --1024 + j*(-855) --1024 + j*(683) -514 + j*(-983) --1024 + j*(-1024) --1024 + j*(1023) --994 + j*(529) -1023 + j*(1023) -1023 + j*(-461) -1023 + j*(-675) -902 + j*(1023) -1023 + j*(919) -1023 + j*(-448) --654 + j*(1023) -384 + j*(1023) -1023 + j*(-67) --884 + j*(1023) -1023 + j*(1023) -1023 + j*(222) --875 + j*(1023) --172 + j*(1023) -1023 + j*(1023) -1023 + j*(-614) -374 + j*(-1024) --918 + j*(-1024) --823 + j*(745) --552 + j*(-1024) --1024 + j*(-863) --949 + j*(816) --282 + j*(-1024) --500 + j*(-383) --912 + j*(804) -23 + j*(-1024) --1024 + j*(-843) --1024 + j*(265) -350 + j*(-1024) --867 + j*(-914) --1024 + j*(-859) --1024 + j*(505) --835 + j*(1023) -1023 + j*(1023) -1023 + j*(-594) --936 + j*(1023) -1023 + j*(1023) -1023 + j*(-17) --659 + j*(1023) -771 + j*(529) -1023 + j*(378) --1024 + j*(652) --186 + j*(1023) -1023 + j*(1023) --1024 + j*(-131) --657 + j*(1023) -303 + j*(868) -686 + j*(-357) -748 + j*(141) -831 + j*(-870) --38 + j*(-1024) -945 + j*(1023) -1023 + j*(-51) -865 + j*(-1024) --77 + j*(1023) -820 + j*(842) -1023 + j*(-305) --427 + j*(1023) -1023 + j*(1023) -1023 + j*(24) --837 + j*(1023) -1015 + j*(1023) -1023 + j*(895) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf1.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf1.m deleted file mode 100644 index 63b254c87d..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/CHSCH3_sync_4xf1.m +++ /dev/null @@ -1,1025 +0,0 @@ -chsch3_sync_f_4x1 = [1023 + j*(-31) --778 + j*(781) -419 + j*(1023) -1023 + j*(-71) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-1024) --1024 + j*(133) -262 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-610) -812 + j*(-418) -1023 + j*(-673) --382 + j*(-988) -1023 + j*(-219) -832 + j*(-1024) --64 + j*(-1024) -1023 + j*(409) -1023 + j*(-1024) -1023 + j*(-1024) --1024 + j*(-981) --1024 + j*(-1024) --877 + j*(791) -703 + j*(628) --701 + j*(220) -34 + j*(507) -639 + j*(415) --1024 + j*(377) -913 + j*(1023) -955 + j*(461) --607 + j*(620) -612 + j*(508) -1023 + j*(316) --802 + j*(806) --394 + j*(1023) -1023 + j*(299) -1023 + j*(-899) --77 + j*(-1024) --1024 + j*(-299) --1024 + j*(444) --25 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-67) --235 + j*(-586) --1024 + j*(640) -88 + j*(54) -426 + j*(-45) -1023 + j*(838) -1023 + j*(-494) --237 + j*(568) -1023 + j*(1023) -1023 + j*(-1024) -844 + j*(-1024) --589 + j*(-1024) --1024 + j*(-898) --1024 + j*(408) --30 + j*(-1024) --1024 + j*(-991) --1024 + j*(-388) -769 + j*(-1024) -341 + j*(-1024) --871 + j*(-963) -1023 + j*(-802) -762 + j*(-1024) --1014 + j*(-1024) -1023 + j*(124) -1023 + j*(-779) -841 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-703) --1024 + j*(1023) -546 + j*(897) --1024 + j*(-587) --1024 + j*(1023) -78 + j*(720) --1024 + j*(53) --352 + j*(1023) -721 + j*(632) --292 + j*(-71) -227 + j*(423) -837 + j*(655) --483 + j*(422) --127 + j*(-78) -412 + j*(1023) -871 + j*(-1024) -591 + j*(-1024) --1024 + j*(-970) --1024 + j*(564) -970 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-79) -458 + j*(-1024) -691 + j*(-1024) --1024 + j*(-99) -1023 + j*(-1017) -370 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-67) -1023 + j*(-1024) --469 + j*(-1024) --730 + j*(-1024) --1024 + j*(147) --612 + j*(1023) -165 + j*(1023) --1024 + j*(-505) --1024 + j*(1023) --832 + j*(864) --1024 + j*(-1024) --1024 + j*(92) --762 + j*(1015) -841 + j*(-1024) --845 + j*(-1003) --872 + j*(-749) -1023 + j*(-121) -1012 + j*(-539) --452 + j*(-1024) --1024 + j*(-1024) --876 + j*(852) --887 + j*(1023) -299 + j*(1023) --1024 + j*(-1024) --1024 + j*(1023) --828 + j*(1023) --1024 + j*(-1024) --1024 + j*(-374) --1024 + j*(1023) --197 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) -537 + j*(-1024) --1024 + j*(-1024) --1024 + j*(958) --1024 + j*(1023) -709 + j*(1023) -1023 + j*(1023) -1023 + j*(-61) --1024 + j*(1023) -485 + j*(1023) -805 + j*(801) --1024 + j*(262) --1024 + j*(236) -819 + j*(1023) --1024 + j*(-939) --1024 + j*(899) --478 + j*(1023) --1024 + j*(-1024) --1024 + j*(456) --444 + j*(1023) -378 + j*(1023) -684 + j*(-537) -1023 + j*(-1024) --894 + j*(-849) -1023 + j*(-315) -328 + j*(-982) --1024 + j*(-789) --227 + j*(-1024) --514 + j*(-935) --1024 + j*(911) -1023 + j*(-1024) --830 + j*(-1024) --1024 + j*(-693) -1023 + j*(-1024) --1024 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1023) --350 + j*(1023) -1023 + j*(1023) -883 + j*(-825) -154 + j*(1023) -1023 + j*(659) -426 + j*(-703) --1024 + j*(63) -101 + j*(-422) -296 + j*(1023) -682 + j*(-457) --1024 + j*(-1024) --1024 + j*(-31) -776 + j*(-907) --983 + j*(-1024) --1024 + j*(-789) --1024 + j*(584) -904 + j*(1023) -933 + j*(1023) -1023 + j*(-1024) --212 + j*(1023) -1023 + j*(1013) -898 + j*(-1024) --490 + j*(377) -311 + j*(312) -168 + j*(257) -675 + j*(1017) -1001 + j*(-463) --1 + j*(-732) -782 + j*(962) -1023 + j*(-1024) -367 + j*(-832) --1024 + j*(-821) --1024 + j*(267) --1024 + j*(1023) -1023 + j*(1023) --1024 + j*(1023) --1024 + j*(1023) -1023 + j*(1023) --1024 + j*(495) --1024 + j*(-191) -1023 + j*(1023) --1024 + j*(-309) --1024 + j*(1023) -63 + j*(1023) --1024 + j*(-757) --1024 + j*(735) -841 + j*(1023) -555 + j*(-30) -1023 + j*(-1024) --235 + j*(-1024) --271 + j*(-968) -1017 + j*(-14) -69 + j*(-646) -257 + j*(-850) -338 + j*(241) --411 + j*(-1024) -346 + j*(-8) --258 + j*(224) -44 + j*(135) -322 + j*(30) --701 + j*(-409) -287 + j*(249) -1023 + j*(655) -471 + j*(1023) -573 + j*(-793) -1023 + j*(-466) --438 + j*(-1024) -1023 + j*(1023) -1023 + j*(-966) -12 + j*(-1024) -450 + j*(647) -1023 + j*(-608) -934 + j*(-411) -1023 + j*(1023) -1023 + j*(896) -1023 + j*(-1024) -30 + j*(1023) -1023 + j*(956) -1023 + j*(143) -566 + j*(-1024) -52 + j*(-1024) --1024 + j*(-1024) --972 + j*(133) -1023 + j*(-339) -44 + j*(-1024) --955 + j*(-904) -852 + j*(-760) --238 + j*(-996) --1024 + j*(-195) -1023 + j*(-14) -606 + j*(-1024) --1011 + j*(-1024) -1023 + j*(451) -1023 + j*(-1024) -229 + j*(-1024) --1006 + j*(-1024) --1024 + j*(-243) --1024 + j*(706) -658 + j*(950) --541 + j*(-297) --1024 + j*(58) -65 + j*(701) --93 + j*(-1024) --1024 + j*(251) --595 + j*(1023) --81 + j*(-950) --931 + j*(5) --359 + j*(-33) -432 + j*(-1024) --961 + j*(14) -55 + j*(304) --1024 + j*(1023) -272 + j*(519) -1023 + j*(379) -1023 + j*(-931) --368 + j*(1023) -1023 + j*(1023) -1023 + j*(-633) --328 + j*(1023) --143 + j*(1023) -1023 + j*(-134) --509 + j*(1023) -1023 + j*(1023) -1023 + j*(15) --683 + j*(1023) -287 + j*(1023) -1023 + j*(-1) -910 + j*(-472) --99 + j*(-1024) --1024 + j*(-1) --507 + j*(445) --1 + j*(-1024) --964 + j*(-477) --11 + j*(-138) --169 + j*(-800) --485 + j*(-89) --40 + j*(504) -92 + j*(873) -1023 + j*(1023) -1023 + j*(15) --315 + j*(978) -190 + j*(1023) -1023 + j*(-1) -953 + j*(-1024) --1 + j*(-1024) --1024 + j*(-730) --983 + j*(756) --1 + j*(-1024) --843 + j*(-1024) --1024 + j*(408) -630 + j*(-1024) --567 + j*(-1024) --1024 + j*(-1) -735 + j*(-698) --1 + j*(-470) --91 + j*(306) -551 + j*(-307) -711 + j*(-977) --224 + j*(-572) --742 + j*(-447) --721 + j*(-1) --1 + j*(-352) -99 + j*(165) --139 + j*(-93) --1024 + j*(-1) --57 + j*(48) --1 + j*(-1024) --353 + j*(-684) --906 + j*(-1) -385 + j*(-143) -89 + j*(-177) --918 + j*(-1) -354 + j*(-133) -150 + j*(-487) --353 + j*(-1) --1 + j*(-236) --1 + j*(-282) -6 + j*(-1) -208 + j*(47) --148 + j*(-226) --177 + j*(-325) -212 + j*(-67) --388 + j*(-645) --982 + j*(510) --312 + j*(748) -242 + j*(139) --711 + j*(-25) --419 + j*(32) -213 + j*(20) --75 + j*(96) -9 + j*(-110) --1024 + j*(-935) --366 + j*(-1) --1 + j*(45) -133 + j*(20) --157 + j*(-1) --1 + j*(-1006) --71 + j*(133) -637 + j*(-838) --1024 + j*(-1) --794 + j*(-115) -270 + j*(-1) --52 + j*(-495) --1 + j*(239) -219 + j*(176) --239 + j*(-118) --1 + j*(-379) --645 + j*(-363) --181 + j*(-1) -194 + j*(411) -85 + j*(134) --856 + j*(150) --113 + j*(82) -158 + j*(-53) --356 + j*(-814) --493 + j*(-125) --754 + j*(697) -284 + j*(255) --6 + j*(-565) --8 + j*(-215) -263 + j*(174) --284 + j*(-276) --1 + j*(147) --789 + j*(-1) -651 + j*(-1) -261 + j*(327) -136 + j*(205) --341 + j*(-1) --314 + j*(106) -202 + j*(66) -80 + j*(243) --855 + j*(409) -118 + j*(18) -186 + j*(220) --519 + j*(-1) --81 + j*(441) -226 + j*(142) --950 + j*(492) --47 + j*(-180) --415 + j*(16) --1 + j*(122) -742 + j*(67) -158 + j*(222) -249 + j*(111) -17 + j*(434) -240 + j*(139) -152 + j*(-333) --932 + j*(363) --266 + j*(-57) -88 + j*(191) -366 + j*(-159) --57 + j*(416) -175 + j*(97) --828 + j*(-34) --1 + j*(72) --21 + j*(628) -568 + j*(78) --88 + j*(-3) -187 + j*(188) --107 + j*(-1) --369 + j*(-122) -317 + j*(158) --499 + j*(-1024) --36 + j*(-595) --788 + j*(974) --38 + j*(233) --36 + j*(-363) --270 + j*(70) -59 + j*(95) --1 + j*(-228) -111 + j*(-23) -131 + j*(182) --1 + j*(-560) --29 + j*(-140) -64 + j*(41) -3 + j*(-523) -446 + j*(-164) -73 + j*(-277) -112 + j*(-265) --1 + j*(-503) --166 + j*(-1) --1 + j*(242) -529 + j*(-122) --769 + j*(-170) -21 + j*(192) -328 + j*(-247) -424 + j*(578) -265 + j*(-1) -420 + j*(-220) -287 + j*(-731) --9 + j*(145) -334 + j*(-230) --721 + j*(-177) -150 + j*(61) -256 + j*(-839) --99 + j*(-804) --664 + j*(208) -87 + j*(306) --791 + j*(-232) --438 + j*(-330) -119 + j*(237) -306 + j*(-1) -6 + j*(260) --304 + j*(-415) -309 + j*(-581) --1 + j*(906) --14 + j*(273) --255 + j*(-1) --177 + j*(592) -65 + j*(220) -14 + j*(-197) --879 + j*(-1024) --219 + j*(340) -83 + j*(131) -97 + j*(-1) --1 + j*(251) -192 + j*(115) --1024 + j*(-1) --1 + j*(670) --477 + j*(-642) -707 + j*(-1) --334 + j*(-131) -117 + j*(275) -750 + j*(-956) --855 + j*(-163) --162 + j*(175) -588 + j*(-991) --1024 + j*(-1024) --1024 + j*(220) -9 + j*(59) -18 + j*(-1024) --1024 + j*(-344) -91 + j*(34) -1023 + j*(-1024) --674 + j*(-1024) --1024 + j*(477) --1024 + j*(-1) --395 + j*(401) -126 + j*(166) --974 + j*(-438) --53 + j*(392) -251 + j*(240) -372 + j*(-504) --510 + j*(-1) --578 + j*(-107) --135 + j*(183) --467 + j*(-1) -0 + j*(30) -30 + j*(81) --369 + j*(394) --140 + j*(1023) --111 + j*(972) -959 + j*(-32) -98 + j*(915) -79 + j*(140) --458 + j*(0) --266 + j*(712) -228 + j*(206) -734 + j*(-654) --779 + j*(28) --988 + j*(-595) --137 + j*(223) -790 + j*(312) --439 + j*(-573) -10 + j*(125) -388 + j*(556) --509 + j*(0) --929 + j*(561) --139 + j*(649) -724 + j*(415) -32 + j*(137) --705 + j*(190) --775 + j*(632) -181 + j*(182) -705 + j*(-1024) --211 + j*(-443) --1024 + j*(-126) --154 + j*(265) --399 + j*(-159) --173 + j*(565) -27 + j*(188) --849 + j*(36) --506 + j*(499) -151 + j*(1023) -957 + j*(-114) --109 + j*(-734) --12 + j*(203) -323 + j*(-12) -0 + j*(-599) -99 + j*(241) -1023 + j*(-751) --363 + j*(-873) --1024 + j*(-802) --74 + j*(194) -258 + j*(-797) --408 + j*(-415) -81 + j*(185) -390 + j*(-237) --235 + j*(-757) --458 + j*(0) --453 + j*(61) -0 + j*(372) -25 + j*(277) -259 + j*(0) --327 + j*(-550) -0 + j*(363) -1000 + j*(-618) -1019 + j*(-905) --1024 + j*(-804) -17 + j*(30) -64 + j*(-178) --1024 + j*(-220) -66 + j*(109) -53 + j*(-1024) --209 + j*(0) --941 + j*(546) -0 + j*(194) --312 + j*(0) -90 + j*(260) -0 + j*(-386) --619 + j*(-190) -182 + j*(412) -743 + j*(225) -142 + j*(-171) --227 + j*(-709) --301 + j*(102) -250 + j*(-39) -25 + j*(-336) --63 + j*(84) -131 + j*(-220) -1010 + j*(-273) --872 + j*(-822) --463 + j*(-847) --323 + j*(799) -30 + j*(177) --123 + j*(0) --358 + j*(-139) -0 + j*(326) -979 + j*(160) -937 + j*(52) --209 + j*(-1024) --66 + j*(25) -125 + j*(0) --144 + j*(-259) --129 + j*(172) -574 + j*(0) -1023 + j*(-768) --1024 + j*(0) --468 + j*(-1024) -155 + j*(0) --97 + j*(208) -0 + j*(107) -29 + j*(-626) -15 + j*(304) -964 + j*(-291) -241 + j*(-950) --842 + j*(-1024) --207 + j*(144) -1023 + j*(100) -586 + j*(-1024) --117 + j*(194) -1023 + j*(185) -451 + j*(-891) -288 + j*(-918) --1024 + j*(-301) --452 + j*(0) --175 + j*(255) -0 + j*(-953) -0 + j*(688) --102 + j*(169) --167 + j*(-262) --35 + j*(850) --316 + j*(9) --226 + j*(0) -0 + j*(-964) --11 + j*(589) --100 + j*(193) --617 + j*(0) -30 + j*(788) -110 + j*(193) -413 + j*(-73) -441 + j*(-168) --261 + j*(325) --264 + j*(115) --46 + j*(-44) --274 + j*(444) -99 + j*(-90) --741 + j*(-995) --116 + j*(-185) --167 + j*(-107) -0 + j*(292) --27 + j*(0) --35 + j*(111) -0 + j*(476) --186 + j*(0) -1023 + j*(229) --107 + j*(-1024) --540 + j*(-555) --268 + j*(377) --63 + j*(-1024) --1024 + j*(-1024) --372 + j*(560) -1022 + j*(-570) --393 + j*(-1024) --970 + j*(-784) --204 + j*(-318) --867 + j*(-164) --265 + j*(-103) --52 + j*(-50) --823 + j*(-228) --287 + j*(-469) --540 + j*(207) --433 + j*(0) -322 + j*(-352) --323 + j*(314) -135 + j*(-472) --353 + j*(-592) --501 + j*(549) -384 + j*(-458) --914 + j*(-973) --941 + j*(-121) --178 + j*(-485) --388 + j*(-664) --412 + j*(-40) --82 + j*(-166) --207 + j*(-572) --461 + j*(151) --144 + j*(-64) -463 + j*(502) --655 + j*(92) --582 + j*(259) -482 + j*(-193) -8 + j*(-12) --684 + j*(328) -570 + j*(-408) -1016 + j*(4) --869 + j*(-384) -506 + j*(-1024) --903 + j*(-1024) --1024 + j*(7) -648 + j*(-1024) --977 + j*(-973) --1024 + j*(-1024) --165 + j*(73) --216 + j*(1023) -612 + j*(238) -403 + j*(-517) -0 + j*(610) -432 + j*(268) -10 + j*(-178) -0 + j*(317) -670 + j*(-1024) --24 + j*(0) -244 + j*(-457) --230 + j*(-236) --1024 + j*(0) -602 + j*(-625) --768 + j*(-1024) --933 + j*(399) -379 + j*(607) -889 + j*(514) -1023 + j*(-614) -745 + j*(-864) -1023 + j*(1023) -1023 + j*(173) -746 + j*(-966) -227 + j*(1023) -1023 + j*(-227) -796 + j*(-769) -677 + j*(1023) -1023 + j*(772) -614 + j*(-1024) -826 + j*(1023) -1023 + j*(526) -244 + j*(-1024) --825 + j*(-988) --1024 + j*(260) --115 + j*(1023) -610 + j*(859) --604 + j*(463) --222 + j*(774) -328 + j*(682) --114 + j*(-63) --108 + j*(-950) --467 + j*(-32) --619 + j*(-694) --272 + j*(-193) --703 + j*(630) -223 + j*(-858) --597 + j*(-1024) --805 + j*(1023) --1024 + j*(46) -1023 + j*(796) -856 + j*(69) -1023 + j*(-791) -628 + j*(1023) -1023 + j*(149) -1023 + j*(-587) -1023 + j*(1023) -948 + j*(-619) -733 + j*(-1024) --55 + j*(1023) -1023 + j*(244) -1023 + j*(-655) -297 + j*(1023) -809 + j*(-728) -524 + j*(-955) --1024 + j*(-826) --465 + j*(1023) --928 + j*(1023) -1023 + j*(1023) --1024 + j*(1023) -0 + j*(1023) -1023 + j*(1023) --1024 + j*(937) -379 + j*(1023) -1023 + j*(888) --1024 + j*(1011) --724 + j*(1023) -1023 + j*(1023) --1024 + j*(929) --589 + j*(1023) -1023 + j*(1023) -452 + j*(-331) -168 + j*(-1024) -0 + j*(-499) --445 + j*(1023) --772 + j*(13) --644 + j*(209) -74 + j*(1023) --1024 + j*(-80) --1024 + j*(780) -578 + j*(1023) --1024 + j*(-400) --940 + j*(828) -180 + j*(1023) --1024 + j*(-716) --1024 + j*(234) -237 + j*(1023) -1023 + j*(537) -1023 + j*(-398) -147 + j*(-1024) --762 + j*(-746) -1023 + j*(119) -869 + j*(-1024) --394 + j*(-226) -467 + j*(493) -1023 + j*(362) -285 + j*(-165) --790 + j*(-273) --967 + j*(972) -252 + j*(1023) --1024 + j*(-490) --1024 + j*(357) -326 + j*(1023) -1023 + j*(227) -1023 + j*(-381) -248 + j*(-1024) --794 + j*(-1024) -1023 + j*(-15) -1023 + j*(-630) --284 + j*(-1024) -1023 + j*(842) -1023 + j*(-169) -299 + j*(-1024) -420 + j*(1023) -1023 + j*(655) -1023 + j*(-944) --396 + j*(1023) -1023 + j*(983) -1023 + j*(571) -1023 + j*(-1024) -517 + j*(-1024) --1024 + j*(-1016) --1024 + j*(314) -1023 + j*(-1024) --839 + j*(-1024) --1024 + j*(-371) -1023 + j*(-305) --707 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-335) -1023 + j*(-1024) --415 + j*(-1024) -1023 + j*(488) -1023 + j*(-1024) -437 + j*(-1024) --1024 + j*(-1008) --1024 + j*(75) --137 + j*(1023) -495 + j*(1023) --1024 + j*(834) -182 + j*(1023) -244 + j*(1023) --339 + j*(993) -119 + j*(1023) -940 + j*(-649) --1024 + j*(3) -1023 + j*(1023) -1023 + j*(671) --950 + j*(536) -843 + j*(1023) -1023 + j*(109) --675 + j*(-482) -365 + j*(-1024) --1024 + j*(290) --1024 + j*(1023) --218 + j*(-1024) --1024 + j*(-1024) --1024 + j*(1008) --124 + j*(-1024) --806 + j*(-1024) --1024 + j*(306) -510 + j*(-1024) --1024 + j*(-1024) --1024 + j*(58) -700 + j*(-1024) --1024 + j*(-1024) --1024 + j*(63) --1024 + j*(1023) --4 + j*(1023) -1023 + j*(-804) -499 + j*(-418) -661 + j*(956) -112 + j*(66) --80 + j*(190) --405 + j*(1023) -1023 + j*(377) -910 + j*(-204) --89 + j*(-1024) --426 + j*(-990) --1024 + j*(602) -317 + j*(-1024) --1024 + j*(-1024) --1024 + j*(200) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(1023) -1023 + j*(-588) --687 + j*(1023) -793 + j*(1023) -1023 + j*(125) --1024 + j*(1023) -790 + j*(1023) -1023 + j*(399) --1024 + j*(221) --294 + j*(1023) -1023 + j*(1023) --1024 + j*(-406) -46 + j*(967) -447 + j*(1023) -1023 + j*(340) -1023 + j*(-250) -1023 + j*(-1024) --532 + j*(-1024) -1023 + j*(1023) -1023 + j*(-630) -110 + j*(-1024) -327 + j*(1023) -1023 + j*(705) -1023 + j*(-883) -33 + j*(1023) -1023 + j*(1023) -1023 + j*(-72) --692 + j*(1023) --228 + j*(1023) -1023 + j*(317) -1023 + j*(-449) -533 + j*(-1024) --1024 + j*(-891) --1024 + j*(477) -287 + j*(-1024) --1024 + j*(-1024) --1024 + j*(388) -114 + j*(-306) --1024 + j*(326) -45 + j*(50) --287 + j*(-1024) --1024 + j*(353) --609 + j*(1023) --807 + j*(-898) --1024 + j*(566) --462 + j*(1023) -1023 + j*(1023) -1023 + j*(-664) -1016 + j*(-1024) --1024 + j*(-1024) -1023 + j*(-50) -1023 + j*(-1024) --1024 + j*(-1024) -1023 + j*(674) -1023 + j*(-1024) --143 + j*(-1024) -1023 + j*(512) -1023 + j*(-1024) -456 + j*(-1024) -1023 + j*(798) -1023 + j*(-1024) -1023 + j*(-1024) --1024 + j*(-1024) --600 + j*(96) --1024 + j*(730) -39 + j*(687) --1024 + j*(-748) --947 + j*(176) --791 + j*(453) --809 + j*(-601) --1024 + j*(-1024) --468 + j*(668) -548 + j*(-1024) --321 + j*(-1024) --1024 + j*(16) -672 + j*(-1024) --953 + j*(-1024) --1024 + j*(743) --1024 + j*(1023) -1023 + j*(1023) -1023 + j*(299) -1023 + j*(-1024) -717 + j*(1023) -1023 + j*(1001) -1023 + j*(-1024) -279 + j*(1023) -754 + j*(920) -1023 + j*(-1024) --87 + j*(1023) -1023 + j*(1023) -1023 + j*(-1024) --626 + j*(1023) -373 + j*(1023) -1023 + j*(-233) -941 + j*(-1024) --162 + j*(-1024) --1024 + j*(-44) --1024 + j*(40) -801 + j*(-1024) --752 + j*(-1024) --1024 + j*(-761) -1023 + j*(-211) -10 + j*(-813) --213 + j*(-1024) -1023 + j*(44) -1023 + j*(-796) -88 + j*(-1024) -1023 + j*(552) -989 + j*(-231) -1023 + j*(-914) --673 + j*(504) --962 + j*(-1024) -1023 + j*(784) -796 + j*(547) --1024 + j*(1023) -70 + j*(706) -714 + j*(284) --1020 + j*(882) -978 + j*(1023) -1023 + j*(334) --594 + j*(708) -466 + j*(1023) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf.m deleted file mode 100644 index df5b8af71b..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch0_sync_f = [-23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf_tx.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf_tx.m deleted file mode 100644 index 9d01d50674..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch0_syncf_tx.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch0_sync_f_tx = [-725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf.m deleted file mode 100644 index 96ee450354..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch1_sync_f = [23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf_tx.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf_tx.m deleted file mode 100644 index 6f2acf9aee..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch1_syncf_tx.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch1_sync_f_tx = [724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf.m deleted file mode 100644 index d61eb1e21e..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch2_sync_f = [-23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf_tx.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf_tx.m deleted file mode 100644 index 3e00f59078..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch2_syncf_tx.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch2_sync_f_tx = [-725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf.m deleted file mode 100644 index 46b53806ee..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch3_sync_f = [23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(-23170) --23170 + j*(23170) --23170 + j*(-23170) -23170 + j*(23170) -23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(-23170) -23170 + j*(23170) --23170 + j*(-23170) --23170 + j*(23170) -23170 + j*(23170) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf_tx.m b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf_tx.m deleted file mode 100644 index 9384d49359..0000000000 --- a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/chsch3_syncf_tx.m +++ /dev/null @@ -1,257 +0,0 @@ -chsch3_sync_f_tx = [724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) -724 + j*(-725) -0 + j*(0) -724 + j*(-725) -0 + j*(0) --725 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -724 + j*(724) -0 + j*(0) --725 + j*(724) -0 + j*(0) -]; diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/rx_frame.dat b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/rx_frame.dat deleted file mode 100644 index fe3357f5e7843b68f11af5b9e275f089dd0fd04a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163840 zcmeIuF#!Mo0K%a4Pwiz3h(KY$fB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj JFkryI2L^y100961 diff --git a/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/rx_frame_2streams.dat b/openair1/USERSPACE_TOOLS/OCTAVE/PHY_SIM/rx_frame_2streams.dat deleted file mode 100644 index d7a95ce98ed4de94b92c4939b272dd7f0a7bac04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 163840 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 hwp( - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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. - - This program 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 this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/Makefile b/openair1/USERSPACE_TOOLS/OPENAIR_RF/Makefile deleted file mode 100755 index 71bce12294..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -include $(OPENAIR_HOME)/common/utils/Makefile.inc - -TOP_DIR = ../.. -OPENAIR2_DIR = ../../../openair2 -OPENAIR2_TOP = $(OPENAIR2_DIR) - -CFLAGS += -DNODE_RG -DUSER_MODE -DPC_TARGET -DPC_DSP -DMAX_MODULES=1 -DPHY_CONTEXT=1 -I$(TOP_DIR) -I/usr/realtime/include/ -I$(OPENAIR2_DIR)/RRC/LITE/MESSAGES -#-DICC - -include $(OPENAIR2_DIR)/LAYER2/Makefile.inc -include $(OPENAIR2_DIR)/UTIL/Makefile.inc -CFLAGS += $(L2_incl) $(UTIL_incl) - -ifdef DEBUGPHY -CFLAGS += -DDEBUG_PHY -endif - -ifeq ($(CBMIMO1),1) -CFLAGS += -DHW_PREFIX_REMOVAL -DCBMIMO1 -DNB_ANTENNAS_RX=2 -DOPEN_OUTPUT_FILE -endif - -ifeq ($(OPENAIR_LTE), 1) -CFLAGS += -DOPENAIR_LTE -DIFFT_FPGA -FNAME = cbmimo1_lte -else -FNAME = cbmimo1 -endif - -CFLAGS += -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 -DNB_ANTENNAS_TXRX=2 - -ifeq ($(EMOS),1) -CFLAGS += -DEMOS -endif - -# PHY Initialization routines -ifeq ($(OPENAIR_LTE), 0) -PHY_OBJS +=$(TOP_DIR)/PHY/INIT/init.o -else -PHY_OBJS +=$(TOP_DIR)/PHY/INIT/lte_parms.o -#PHY_OBJS +=$(TOP_DIR)/PHY/INIT/lte_init.o -endif - -# PHY TOOLS routines -#PHY_OBJS +=$(TOP_DIR)/PHY/TOOLS/fft.o - -USERRFOBJS += $(PHY_OBJS) openair_rf.o #openair_generate_ofdm.o - -all: openair_rf - -$(USERRFOBJS) : %.o : %.c - $(CCC) -c $(CFLAGS) -o $@ $< - -openair_rf: $(USERRFOBJS) - $(CCC) -o openair_rf_$(FNAME) $(CFLAGS) $(USERRFOBJS) -lm - -read_rx_sig: read_rx_sig.c - $(CCC) -o read_rx_sig $(CFLAGS) read_rx_sig.c - -clean: - rm -f $(USERRFOBJS) - - diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/affich.m b/openair1/USERSPACE_TOOLS/OPENAIR_RF/affich.m deleted file mode 100644 index eacd366407..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/affich.m +++ /dev/null @@ -1,47 +0,0 @@ -clear all -close all - -fd = fopen('rx_frame.dat','r'); -temp = fread(fd,'int16'); -fclose(fd); - -rxs = temp(1:2:length(temp)) + sqrt(-1)*temp(2:2:length(temp)); -rxs = reshape(rxs,[],2); -%rxs = rxs(:,1); - -% estimate frequency offset (for a fs/4 signal) -fs = 7680e3; -s_phase = unwrap(angle(rxs(1:4:length(rxs),1).')); -s_phase2 = unwrap(angle(rxs(1:4:length(rxs),2).')); -s_phase = s_phase - s_phase(1,1); -s_phase2 = s_phase2 - s_phase2(1,1); - -f_off = mean(s_phase(2:length(s_phase))*fs/4./(1:(length(s_phase)-1))/2/pi) -f_off2 = mean(s_phase2(2:length(s_phase2))*fs/4./(1:(length(s_phase2)-1))/2/pi) - - -figure(1) -plot(real(rxs)) -print('rx_frame_time.esp','-depsc2') - -figure(2) -plot(20*log10(abs(fftshift(fft(rxs))))) -print('rx_frame_freq.esp','-depsc2') - -%% -fd = fopen('tx_frame.dat','r'); -temp = fread(fd,'uint8'); -fclose(fd); - -%txs(:,1) = temp(1:4:length(temp)) + sqrt(-1)*temp(2:4:length(temp)); -%txs(:,2) = temp(3:4:length(temp)) + sqrt(-1)*temp(4:4:length(temp)); - -load('../../PHY/LTE_REFSIG/mod_table.mat') - -for i=1:length(temp) - txs(i) = table(temp(i)+1); -end - -figure(3) -plot(real(txs)) - diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/fft_test.c b/openair1/USERSPACE_TOOLS/OPENAIR_RF/fft_test.c deleted file mode 100644 index 88e9a22930..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/fft_test.c +++ /dev/null @@ -1,413 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include "openair_device.h" - - -#define PI 3.14159265359 -#define MAXPOW 24 - - -FILE *rx_frame_file; -FILE *fid; - -struct complex { - double r; - double i; -}; - -struct complex_fixed { - short r; - short i; -}; - -int pow_2[MAXPOW]; -int pow_4[MAXPOW]; - - -void twiddle(struct complex *W, int N, double stuff) -{ - W->r=cos(stuff*2.0*PI/(double)N); - W->i=-sin(stuff*2.0*PI/(double)N); -} - - -void bit_r4_reorder(struct complex *W, int N) -{ - int bits, i, j, k; - double tempr, tempi; - - for (i=0; ii) { /** Only make "up" swaps */ - tempr=W[i].r; - tempi=W[i].i; - W[i].r=W[j].r; - W[i].i=W[j].i; - W[j].r=tempr; - W[j].i=tempi; - } - } -} - - -/** RADIX-4 FFT ALGORITHM */ -void radix4(struct complex *x, int N) -{ - int n2, k1, N1, N2; - struct complex W, bfly[4]; - - N1=4; - N2=N/4; - - /** Do 4 Point DFT */ - for (n2=0; n2 *maxSNR) { - *maxSNR = SNR; - memcpy(maxscale,scale,7); - } - - - -} - -void fft_test(char *dma_buffer_local, char log2N, char test, int openair_fd) -{ - - int N=pow(2,log2N), radix=4; //,test=0; - int i; - char maxscale[7],MAXSHIFT; - char *scale; //scale[7] - double maxSNR,input_dB; - struct complex *data; - struct complex_fixed *data_fixed; - - - - set_taus_seed(); - - if ((data=malloc(sizeof(struct complex)*(size_t)N))==NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - - // data_fixed = &((struct complex_fixed *)dma_buffer_local)[2]; - scale = &((char *)dma_buffer_local)[0]; - - - if ((data_fixed=malloc(sizeof(struct complex_fixed)*(size_t)N))==NULL) { - fprintf(stderr, "Out of memory!\n"); - exit(1); - } - - - /** Set up power of two arrays */ - pow_2[0]=1; - - for (i=1; i. - - 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 - - *******************************************************************************/ -/* fix_fft.c - Fixed-point Fast Fourier Transform */ -/* - fix_fft() perform FFT or inverse FFT - window() applies a Hanning window to the (time) input - fix_loud() calculates the loudness of the signal, for - each freq point. Result is an integer array, - units are dB (values will be negative). - iscale() scale an integer value by (numer/denom). - fix_mpy() perform fixed-point multiplication. - Sinewave[1024] sinewave normalized to 32767 (= 1.0). - Loudampl[100] Amplitudes for lopudnesses from 0 to -99 dB. - Low_pass Low-pass filter, cutoff at sample_freq / 4. - - - All data are fixed-point short integers, in which - -32768 to +32768 represent -1.0 to +1.0. Integer arithmetic - is used for speed, instead of the more natural floating-point. - - For the forward FFT (time -> freq), fixed scaling is - performed to prevent arithmetic overflow, and to map a 0dB - sine/cosine wave (i.e. amplitude = 32767) to two -6dB freq - coefficients; the one in the lower half is reported as 0dB - by fix_loud(). The return value is always 0. - - For the inverse FFT (freq -> time), fixed scaling cannot be - done, as two 0dB coefficients would sum to a peak amplitude of - 64K, overflowing the 32k range of the fixed-point integers. - Thus, the fix_fft() routine performs variable scaling, and - returns a value which is the number of bits LEFT by which - the output must be shifted to get the actual amplitude - (i.e. if fix_fft() returns 3, each value of fr[] and fi[] - must be multiplied by 8 (2**3) for proper scaling. - Clearly, this cannot be done within the fixed-point short - integers. In practice, if the result is to be used as a - filter, the scale_shift can usually be ignored, as the - result will be approximately correctly normalized as is. - - - TURBO C, any memory model; uses inline assembly for speed - and for carefully-scaled arithmetic. - - Written by: Tom Roberts 11/8/89 - Made portable: Malcolm Slaney 12/15/94 malcolm@interval.com - - Timing on a Macintosh PowerBook 180.... (using Symantec C6.0) - fix_fft (1024 points) 8 ticks - fft (1024 points - Using SANE) 112 Ticks - fft (1024 points - Using FPU) 11 - -*/ - -/* FIX_MPY() - fixed-point multiplication macro. - This macro is a statement, not an expression (uses asm). - BEWARE: make sure _DX is not clobbered by evaluating (A) or DEST. - args are all of type fixed. - Scaling ensures that 32767*32767 = 32767. */ -#define dosFIX_MPY(DEST,A,B) { \ - _DX = (B); \ - _AX = (A); \ - asm imul dx; \ - asm add ax,ax; \ - asm adc dx,dx; \ - DEST = _DX; } - -#define FIX_MPY(DEST,A,B) DEST = ((long)(A) * (long)(B))>>15 - -#define N_WAVE 1024 /* dimension of Sinewave[] */ -#define LOG2_N_WAVE 10 /* log2(N_WAVE) */ -#define N_LOUD 100 /* dimension of Loudampl[] */ -#ifndef fixed -#define fixed short -#endif - -extern fixed Sinewave[N_WAVE]; /* placed at end of this file for clarity */ - -fixed fix_mpy(fixed a, fixed b); - -/* - fix_fft() - perform fast Fourier transform. - - if n>0 FFT is done, if n<0 inverse FFT is done - f[n] is a complex array, INPUT AND RESULT. - size of data = 2**m - set inverse to 0=dft, 1=idft -*/ -int fix_fft(fixed f[], int m, int inverse) -{ - int mr,nn,i,j,l,k,istep, n, scale, shift; - fixed qr,qi,tr,ti,wr,wi,t; - - n = 1< N_WAVE) - return -1; - - mr = 0; - nn = n - 1; - scale = 0; - - /* decimation in time - re-order data */ - for(m=1; m<=nn; ++m) { - l = n; - - do { - l >>= 1; - } while(mr+l > nn); - - mr = (mr & (l-1)) + l; - - if(mr <= m) continue; - - tr = f[m<<1]; - f[m<<1] = f[mr<<1]; - f[mr<<1] = tr; - ti = f[1+(m<<1)]; - f[1+(m<<1)] = f[1+(mr<<1)]; - f[1+(mr<<1)] = ti; - } - - l = 1; - k = LOG2_N_WAVE-1; - - while(l < n) { - if(inverse) { - /* variable scaling, depending upon data */ - shift = 0; - - for(i=0; i 16383 || m > 16383) { - shift = 1; - break; - } - } - - if(shift) - ++scale; - } else { - /* fixed scaling, for proper normalization - - there will be log2(n) passes, so this - results in an overall factor of 1/n, - distributed to maximize arithmetic accuracy. */ - shift = 1; - } - - /* it may not be obvious, but the shift will be performed - on each data point exactly once, during this pass. */ - istep = l << 1; - - for(m=0; m>= 1; - wi >>= 1; - } - - for(i=m; i>= 1; - qi >>= 1; - } - - f[j<<1] = qr - tr; - f[1+(j<<1)] = qi - ti; - f[i<<1] = qr + tr; - f[1+(i<<1)] = qi + ti; - } - } - - --k; - l = istep; - } - - return scale; -} - - -/* fix_loud() - compute loudness of freq-spectrum components. - n should be ntot/2, where ntot was passed to fix_fft(); - 6 dB is added to account for the omitted alias components. - scale_shift should be the result of fix_fft(), if the time-series - was obtained from an inverse FFT, 0 otherwise. - loud[] is the loudness, in dB wrt 32767; will be +10 to -N_LOUD. -*/ -/* - fix_mpy() - fixed-point multiplication -*/ -fixed fix_mpy(fixed a, fixed b) -{ - FIX_MPY(a,a,b); - return a; -} - -/* - iscale() - scale an integer value by (numer/denom) - -int iscale(int value, int numer, int denom) -{ -#ifdef DOS - asm mov ax,value - asm imul WORD PTR numer - asm idiv WORD PTR denom - - return _AX; -#else - return (long) value * (long)numer/(long)denom; -#endif -} - -*/ - -#if N_WAVE != 1024 -ERROR: -N_WAVE != 1024 -#endif -fixed Sinewave[1024] = { - 0, 201, 402, 603, 804, 1005, 1206, 1406, - 1607, 1808, 2009, 2209, 2410, 2610, 2811, 3011, - 3211, 3411, 3611, 3811, 4011, 4210, 4409, 4608, - 4807, 5006, 5205, 5403, 5601, 5799, 5997, 6195, - 6392, 6589, 6786, 6982, 7179, 7375, 7571, 7766, - 7961, 8156, 8351, 8545, 8739, 8932, 9126, 9319, - 9511, 9703, 9895, 10087, 10278, 10469, 10659, 10849, - 11038, 11227, 11416, 11604, 11792, 11980, 12166, 12353, - 12539, 12724, 12909, 13094, 13278, 13462, 13645, 13827, - 14009, 14191, 14372, 14552, 14732, 14911, 15090, 15268, - 15446, 15623, 15799, 15975, 16150, 16325, 16499, 16672, - 16845, 17017, 17189, 17360, 17530, 17699, 17868, 18036, - 18204, 18371, 18537, 18702, 18867, 19031, 19194, 19357, - 19519, 19680, 19840, 20000, 20159, 20317, 20474, 20631, - 20787, 20942, 21096, 21249, 21402, 21554, 21705, 21855, - 22004, 22153, 22301, 22448, 22594, 22739, 22883, 23027, - 23169, 23311, 23452, 23592, 23731, 23869, 24006, 24143, - 24278, 24413, 24546, 24679, 24811, 24942, 25072, 25201, - 25329, 25456, 25582, 25707, 25831, 25954, 26077, 26198, - 26318, 26437, 26556, 26673, 26789, 26905, 27019, 27132, - 27244, 27355, 27466, 27575, 27683, 27790, 27896, 28001, - 28105, 28208, 28309, 28410, 28510, 28608, 28706, 28802, - 28897, 28992, 29085, 29177, 29268, 29358, 29446, 29534, - 29621, 29706, 29790, 29873, 29955, 30036, 30116, 30195, - 30272, 30349, 30424, 30498, 30571, 30643, 30713, 30783, - 30851, 30918, 30984, 31049, - 31113, 31175, 31236, 31297, - 31356, 31413, 31470, 31525, 31580, 31633, 31684, 31735, - 31785, 31833, 31880, 31926, 31970, 32014, 32056, 32097, - 32137, 32176, 32213, 32249, 32284, 32318, 32350, 32382, - 32412, 32441, 32468, 32495, 32520, 32544, 32567, 32588, - 32609, 32628, 32646, 32662, 32678, 32692, 32705, 32717, - 32727, 32736, 32744, 32751, 32757, 32761, 32764, 32766, - 32767, 32766, 32764, 32761, 32757, 32751, 32744, 32736, - 32727, 32717, 32705, 32692, 32678, 32662, 32646, 32628, - 32609, 32588, 32567, 32544, 32520, 32495, 32468, 32441, - 32412, 32382, 32350, 32318, 32284, 32249, 32213, 32176, - 32137, 32097, 32056, 32014, 31970, 31926, 31880, 31833, - 31785, 31735, 31684, 31633, 31580, 31525, 31470, 31413, - 31356, 31297, 31236, 31175, 31113, 31049, 30984, 30918, - 30851, 30783, 30713, 30643, 30571, 30498, 30424, 30349, - 30272, 30195, 30116, 30036, 29955, 29873, 29790, 29706, - 29621, 29534, 29446, 29358, 29268, 29177, 29085, 28992, - 28897, 28802, 28706, 28608, 28510, 28410, 28309, 28208, - 28105, 28001, 27896, 27790, 27683, 27575, 27466, 27355, - 27244, 27132, 27019, 26905, 26789, 26673, 26556, 26437, - 26318, 26198, 26077, 25954, 25831, 25707, 25582, 25456, - 25329, 25201, 25072, 24942, 24811, 24679, 24546, 24413, - 24278, 24143, 24006, 23869, 23731, 23592, 23452, 23311, - 23169, 23027, 22883, 22739, 22594, 22448, 22301, 22153, - 22004, 21855, 21705, 21554, 21402, 21249, 21096, 20942, - 20787, 20631, 20474, 20317, 20159, 20000, 19840, 19680, - 19519, 19357, 19194, 19031, 18867, 18702, 18537, 18371, - 18204, 18036, 17868, 17699, 17530, 17360, 17189, 17017, - 16845, 16672, 16499, 16325, 16150, 15975, 15799, 15623, - 15446, 15268, 15090, 14911, 14732, 14552, 14372, 14191, - 14009, 13827, 13645, 13462, 13278, 13094, 12909, 12724, - 12539, 12353, 12166, 11980, 11792, 11604, 11416, 11227, - 11038, 10849, 10659, 10469, 10278, 10087, 9895, 9703, - 9511, 9319, 9126, 8932, 8739, 8545, 8351, 8156, - 7961, 7766, 7571, 7375, 7179, 6982, 6786, 6589, - 6392, 6195, 5997, 5799, 5601, 5403, 5205, 5006, - 4807, 4608, 4409, 4210, 4011, 3811, 3611, 3411, - 3211, 3011, 2811, 2610, 2410, 2209, 2009, 1808, - 1607, 1406, 1206, 1005, 804, 603, 402, 201, - 0, -201, -402, -603, -804, -1005, -1206, -1406, - -1607, -1808, -2009, -2209, -2410, -2610, -2811, -3011, - -3211, -3411, -3611, -3811, -4011, -4210, -4409, -4608, - -4807, -5006, -5205, -5403, -5601, -5799, -5997, -6195, - -6392, -6589, -6786, -6982, -7179, -7375, -7571, -7766, - -7961, -8156, -8351, -8545, -8739, -8932, -9126, -9319, - -9511, -9703, -9895, -10087, -10278, -10469, -10659, -10849, - -11038, -11227, -11416, -11604, -11792, -11980, -12166, -12353, - -12539, -12724, -12909, -13094, -13278, -13462, -13645, -13827, - -14009, -14191, -14372, -14552, -14732, -14911, -15090, -15268, - -15446, -15623, -15799, -15975, -16150, -16325, -16499, -16672, - -16845, -17017, -17189, -17360, -17530, -17699, -17868, -18036, - -18204, -18371, -18537, -18702, -18867, -19031, -19194, -19357, - -19519, -19680, -19840, -20000, -20159, -20317, -20474, -20631, - -20787, -20942, -21096, -21249, -21402, -21554, -21705, -21855, - -22004, -22153, -22301, -22448, -22594, -22739, -22883, -23027, - -23169, -23311, -23452, -23592, -23731, -23869, -24006, -24143, - -24278, -24413, -24546, -24679, -24811, -24942, -25072, -25201, - -25329, -25456, -25582, -25707, -25831, -25954, -26077, -26198, - -26318, -26437, -26556, -26673, -26789, -26905, -27019, -27132, - -27244, -27355, -27466, -27575, -27683, -27790, -27896, -28001, - -28105, -28208, -28309, -28410, -28510, -28608, -28706, -28802, - -28897, -28992, -29085, -29177, -29268, -29358, -29446, -29534, - -29621, -29706, -29790, -29873, -29955, -30036, -30116, -30195, - -30272, -30349, -30424, -30498, -30571, -30643, -30713, -30783, - -30851, -30918, -30984, -31049, -31113, -31175, -31236, -31297, - -31356, -31413, -31470, -31525, -31580, -31633, -31684, -31735, - -31785, -31833, -31880, -31926, -31970, -32014, -32056, -32097, - -32137, -32176, -32213, -32249, -32284, -32318, -32350, -32382, - -32412, -32441, -32468, -32495, -32520, -32544, -32567, -32588, - -32609, -32628, -32646, -32662, -32678, -32692, -32705, -32717, - -32727, -32736, -32744, -32751, -32757, -32761, -32764, -32766, - -32767, -32766, -32764, -32761, -32757, -32751, -32744, -32736, - -32727, -32717, -32705, -32692, -32678, -32662, -32646, -32628, - -32609, -32588, -32567, -32544, -32520, -32495, -32468, -32441, - -32412, -32382, -32350, -32318, -32284, -32249, -32213, -32176, - -32137, -32097, -32056, -32014, -31970, -31926, -31880, -31833, - -31785, -31735, -31684, -31633, -31580, -31525, -31470, -31413, - -31356, -31297, -31236, -31175, -31113, -31049, -30984, -30918, - -30851, -30783, -30713, -30643, -30571, -30498, -30424, -30349, - -30272, -30195, -30116, -30036, -29955, -29873, -29790, -29706, - -29621, -29534, -29446, -29358, -29268, -29177, -29085, -28992, - -28897, -28802, -28706, -28608, -28510, -28410, -28309, -28208, - -28105, -28001, -27896, -27790, -27683, -27575, -27466, -27355, - -27244, -27132, -27019, -26905, -26789, -26673, -26556, -26437, - -26318, -26198, -26077, -25954, -25831, -25707, -25582, -25456, - -25329, -25201, -25072, -24942, -24811, -24679, -24546, -24413, - -24278, -24143, -24006, -23869, -23731, -23592, -23452, -23311, - -23169, -23027, -22883, -22739, -22594, -22448, -22301, -22153, - -22004, -21855, -21705, -21554, -21402, -21249, -21096, -20942, - -20787, -20631, -20474, -20317, -20159, -20000, -19840, -19680, - -19519, -19357, -19194, -19031, -18867, -18702, -18537, -18371, - -18204, -18036, -17868, -17699, -17530, -17360, -17189, -17017, - -16845, -16672, -16499, -16325, -16150, -15975, -15799, -15623, - -15446, -15268, -15090, -14911, -14732, -14552, -14372, -14191, - -14009, -13827, -13645, -13462, -13278, -13094, -12909, -12724, - -12539, -12353, -12166, -11980, -11792, -11604, -11416, -11227, - -11038, -10849, -10659, -10469, -10278, -10087, -9895, -9703, - -9511, -9319, -9126, -8932, -8739, -8545, -8351, -8156, - -7961, -7766, -7571, -7375, -7179, -6982, -6786, -6589, - -6392, -6195, -5997, -5799, -5601, -5403, -5205, -5006, - -4807, -4608, -4409, -4210, -4011, -3811, -3611, -3411, - -3211, -3011, -2811, -2610, -2410, -2209, -2009, -1808, - -1607, -1406, -1206, -1005, -804, -603, -402, -201, -}; - -#if N_LOUD != 100 -ERROR: -N_LOUD != 100 -#endif - -#ifdef MAIN - -#include -#include - -#define LOG2Nfft 8 -#define Nfft (1<Nfft-BW)) { - input[i<<1] = (((i*31)%19)>=10)? AMP : -AMP; // Real input - input[1+(i<<1)] = (((i*41)%17)>=9)? AMP : -AMP; // Imag input - } else { - input[i<<1] = 0; - input[1+(i<<1)] = 0; - } - } - - - fix_fft(input, LOG2Nfft, 1); - - // write to ADAC buffers with cyclic extension - printf("sig = ["); - - for (i=0; i<(Nfft + Ncp); i++) { - if (i!=(Nfft+Ncp-1)) - printf("%d + j*(%d),\n",input[(i%Nfft)<<1],input[1+((i%Nfft)<<1)]); - else - printf("%d + j*(%d)];\n",input[(i%Nfft)<<1],input[1+((i%Nfft)<<1)]); - } - - -} -#endif /* MAIN */ diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/load.c b/openair1/USERSPACE_TOOLS/OPENAIR_RF/load.c deleted file mode 100755 index 1ee2dfe210..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/load.c +++ /dev/null @@ -1,165 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include - -#ifdef PLATON -#include "daq.h" - -int -loadFPGA2 (unsigned int daq_fd, const char *fname) -{ - int i, j; - int bitf; - char *map; - unsigned char *fpga_buf; - int fpga_size; - int pos = 0; - struct stat statbuf; - unsigned int bd; - char line[1024]; - - printf ("Loading %s\n", fname); - - if ((bitf = open (fname, O_RDONLY)) < 0) { - printf ("Could not open %s\n", fname); - return -1; - } - - if (fstat (bitf, &statbuf) == -1) { - perror ("fstat"); - exit (1); - } - - fpga_size = statbuf.st_size; - - printf ("Allocating %d bytes for FPGA config\n", fpga_size); - - /* We need 4 bytes to put the size of the buffer at the beginning */ - if ((fpga_buf = (unsigned char *) malloc (fpga_size)) == NULL) { - fprintf (stderr, "can't malloc %d bytes\n", fpga_size + 4); - exit (1); - } - - map = mmap (0, fpga_size, PROT_READ, MAP_PRIVATE, bitf, 0); - - if (map == (caddr_t) - 1) { - perror ("mmap failed"); - exit (-1); - } - - j = 0; - i = 7; /* skip first seven lines */ - - while (i) { - - if (map[j++] == '\n') - i--; - - line[j - 1] = map[j - 1]; - - } - - line[j] = 0; - puts (line); - - /* As there is some space left in fpga_buf[], put the size of the buffer - in the 4 first bytes. */ - fpga_buf[0] = fpga_size & 0x000000FF; - fpga_buf[1] = (fpga_size & 0x0000FF00) >> 8; - fpga_buf[2] = (fpga_size & 0x00FF0000) >> 16; - fpga_buf[3] = (fpga_size & 0xFF000000) >> 24; - pos = 4; /* Protect the integer value */ - /* Now fills the buffer. The method is ridiculous (we use 8 times the - size needed in the fpga_buf), but works. */ - - while (j < fpga_size) { /* size must be 1751840 for XCV300 */ - switch (map[j++]) { /* The bit */ - case '0': - fpga_buf[pos++] = 0; - break; - - case '1': - fpga_buf[pos++] = 1; - break; - - case '\n': - case '\r': - continue; - - default: - printf ("Error in file format"); - return -1; - } - } - - close (bitf); - munmap (map, fpga_size); - - printf ("%d bits read", pos - 4); - *((int *) fpga_buf) = pos - 4; - - printf ("FPGA RESET"); - - if (ioctl (daq_fd, DAQ_FPGA_RESET, 0) == -1) { - perror ("ioctl"); - } - - usleep (100000); - printf ("FPGA PROGRAMMING\n"); - - if (ioctl (daq_fd, DAQ_FPGA_PROGRAM, fpga_buf) == -1) { - perror ("ioctl"); - } - - free (fpga_buf); - return 0; -} - -int -resetFPGA2 (unsigned int daq_fd) -{ - - printf ("Resetting FPGA, ioctl=%x\n", DAQ_FPGA_RESET); - - if (ioctl (daq_fd, DAQ_FPGA_RESET) == -1) - perror ("ioctl"); - - return 0; -} -#endif PLATON diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/load_calibration_data.c b/openair1/USERSPACE_TOOLS/OPENAIR_RF/load_calibration_data.c deleted file mode 100755 index fda77ca117..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/load_calibration_data.c +++ /dev/null @@ -1,163 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#ifdef PLATON - -#include -#include -#include -#include -#include -#include "daq.h" - -// LG WARNING : the 2-3 following arrays must be the same -// as those declared in file protocol_vars.h because -// they are copied by copy_from_user() kernel routine -int inv_tx_gain_table[4][300]; -int inv_rx_gain_table[4][200]; -int rx_nf_table[4][200]; - -//------------------------------------------------------------------------------------------------ -int readln (int file_desc, int *value); -int usr_load_calibration_data (unsigned int daq_fdP, unsigned int nb_rf_cardsP, char **argvP); -//------------------------------------------------------------------------------------------------ -int -readln (int file_desc, int *value) -{ - //------------------------------------------------------------------------------------------------ - char ascii_buffer[20]; - int status; - int nb_cars = 0; - - do { - if (nb_cars >= 20) { - return -1; - } - - status = read (file_desc, &ascii_buffer[nb_cars], 1); - - if (status != 1) { - return -1; - } - } while (ascii_buffer[nb_cars++] != '\n'); - - ascii_buffer[nb_cars - 1] = 0; - *value = atoi (ascii_buffer); - printf ("[AS] loading gain %d\n", *value); - return 0; -} - -//----------------------------------------------------------------------------- -int -usr_load_calibration_data (unsigned int daq_fdP, unsigned int nb_rf_cardsP, char **argvP) -{ - //----------------------------------------------------------------------------- - HARDWARE_CONFIGURATION hardware_configuration; - char file_name[] = " "; - char file_name_start[] = "../arch/platon/rf/PLATON_"; - char file_tx_extension[] = "TX.cal"; - char file_rx_extension[] = "RX.cal"; - const char *calibration_file_tx_name; - const char *calibration_file_rx_name; - unsigned int index, offset, fd; - - - memset (inv_tx_gain_table, 0, sizeof (int) * 4 * 300); - memset (inv_rx_gain_table, 0, sizeof (int) * 4 * 200); - memset (rx_nf_table, 0, sizeof (int) * 4 * 200); - - printf ("[AS][INFO][LOAD CALIB DATA] nb_rf_cards %d \n", nb_rf_cardsP); - ioctl (daq_fdP, DAQ_GET_HARDWARE_CONFIGURATION, &hardware_configuration); - - //printf ("[AS][INFO][LOAD CALIB DATA] Configured for %d antennas, master_id = %d\n", hardware_configuration.number_of_DAQ_cards, hardware_configuration.master_id); - - //----------------------------------------------------------------------- - // WRITE GAINS - //----------------------------------------------------------------------- - for (index = 0; index < nb_rf_cardsP; index++) { - file_name[0] = '\0'; - strcat (file_name, file_name_start); - - strcat (file_name, argvP[1]); - strcat (file_name, "_"); - strcat (file_name, argvP[4 + index]); - strcat (file_name, file_tx_extension); - calibration_file_tx_name = file_name; - - - offset = 0; - printf ("[AS][INFO][LOAD CALIB DATA] Loading gains from file %s for antenna %d\n", calibration_file_tx_name, index); - - if ((fd = open (calibration_file_tx_name, O_RDONLY)) < 0) { - printf ("[AS][ERROR][LOAD CALIB DATA] Could not open %s\n", calibration_file_tx_name); - close (daq_fdP); - return(-1); - - } - - while ((readln (fd, &inv_tx_gain_table[index][offset++]) == 0) && (offset < 300)); - - close (fd); - - - file_name[0] = '\0'; - strcat (file_name, file_name_start); - - strcat (file_name, argvP[1]); - - strcat (file_name, "_"); - - strcat (file_name, argvP[4 + index]); - - strcat (file_name, file_rx_extension); - calibration_file_rx_name = file_name; - offset = 0; - printf ("[AS][INFO][LOAD CALIB DATA] Loading gains from file %s for antenna %d\n", calibration_file_rx_name, index); - - if ((fd = open (calibration_file_rx_name, O_RDONLY)) < 0) { - printf ("[AS][ERROR][LOAD CALIB DATA] Could not open %s\n", calibration_file_rx_name); - close (daq_fdP); - return (-1); - } - - while ((readln (fd, &inv_rx_gain_table[index][offset++]) == 0) && (offset < 200)); - - offset = 0; - - while ((readln (fd, &rx_nf_table[index][offset++]) == 0) && (offset < 200)); - - close (fd); - } - - ioctl (daq_fdP, DAQ_SET_CALIBRATION_TX_DATA, &inv_tx_gain_table[0][0]); - ioctl (daq_fdP, DAQ_SET_CALIBRATION_RX_DATA, &inv_rx_gain_table[0][0]); - ioctl (daq_fdP, DAQ_SET_NOISE_FACTOR_DATA, &rx_nf_table[0][0]); - printf ("[AS][INFO][LOAD CALIB DATA] DONE\n"); - return 0; -} -#endif PLATON diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_generate_ofdm.c b/openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_generate_ofdm.c deleted file mode 100644 index d9d0a42bcd..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_generate_ofdm.c +++ /dev/null @@ -1,210 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/extern.h" -#ifdef OPENAIR_LTE -#include "PHY/LTE_TRANSPORT/defs.h" -#endif - -void openair_generate_ofdm(TX_VARS *TX_vars,char format,unsigned short freq_alloc,char *pdu) -{ - - unsigned int i,l; - unsigned char level; - -#ifdef OPENAIR_LTE - mod_sym_t **txdataF; - unsigned char pbch_pdu[6]; - unsigned int rv; -#endif - - switch (format) { -#ifndef OPENAIR_LTE - - case 0 : // generate CHSCH + CHBCH (10 symbols out of 64) - printf("Generate OFDM: CHSCH0,CHSCH1 + CHBCH\n"); - phy_generate_chbch(1,0,NB_ANTENNAS_TX,pdu); - break; - - case 1: // generate all SCH 0 repeated in frame (64 symbols) - - printf("Generate OFDM: SCH (symbols 0..63)\n"); - - for (i=0; iTX_DMA_BUFFER[i*OFDM_SYMBOL_SIZE_COMPLEX_SAMPLES_NO_PREFIX*2], - (void *)&TX_vars->TX_DMA_BUFFER[0], - OFDM_SYMBOL_SIZE_SAMPLES_NO_PREFIX*2); - - break; -#else - - case 3: - - /* - lte_ue_common_vars = &(PHY_vars->lte_ue_common_vars); - lte_ue_dlsch_vars = &(PHY_vars->lte_ue_dlsch_vars[0]); - lte_ue_pbch_vars = &(PHY_vars->lte_ue_pbch_vars[0]); - */ - lte_eNB_common_vars = &PHY_vars->lte_eNB_common_vars; - lte_eNB_ulsch_vars = &(PHY_vars->lte_eNB_ulsch_vars[0]); - - phy_init_top(NB_ANTENNAS_TX); - - TX_vars->TX_DMA_BUFFER[0] = (mod_sym_t *)TX_DMA_BUFFER[0][0]; - TX_vars->TX_DMA_BUFFER[1] = (mod_sym_t *)TX_DMA_BUFFER[0][1]; - - lte_frame_parms->twiddle_fft = twiddle_fft; - lte_frame_parms->twiddle_ifft = twiddle_ifft; - lte_frame_parms->rev = rev; - - lte_gold(lte_frame_parms); - - phy_init_lte_eNB(lte_frame_parms, lte_eNB_common_vars, lte_eNB_ulsch_vars); - - generate_pss(lte_eNB_common_vars->txdataF[0], - 256, - lte_frame_parms, - 0, - 5, - 0); - - for (i=0; i<20; i++) - generate_pilots_slot(lte_eNB_common_vars->txdataF[0], - 256, - lte_frame_parms, - 0, - i); - - for (i=0; i<6; i++) - pbch_pdu[i] = i; - - generate_pbch(lte_eNB_common_vars->txdataF[0], - 256, - lte_frame_parms, - pbch_pdu); - - -#ifdef IFFT_FPGA - write_output("pilotsF.m","rsF",lte_eNB_common_vars->txdataF[0],12*lte_frame_parms->N_RB_DL*12,1,4); -#else - write_output("pilotsF.m","rsF",lte_eNB_common_vars->txdataF[0],lte_frame_parms->ofdm_symbol_size,1,1); -#endif - -#ifndef IFFT_FPGA - PHY_ofdm_mod(lte_eNB_common_vars->txdataF[0], // input - lte_eNB_common_vars->txdata[0], // output - lte_frame_parms->log2_symbol_size, // log2_fft_size - 12*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME, // number of symbols - lte_frame_parms->nb_prefix_samples, // number of prefix samples - lte_frame_parms->twiddle_ifft, // IFFT twiddle factors - lte_frame_parms->rev, // bit-reversal permutation - NONE); - - PHY_ofdm_mod(lte_eNB_common_vars->txdataF[1], // input - lte_eNB_common_vars->txdata[1], // output - lte_frame_parms->log2_symbol_size, // log2_fft_size - 12*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME, // number of symbols - lte_frame_parms->nb_prefix_samples, // number of prefix samples - lte_frame_parms->twiddle_ifft, // IFFT twiddle factors - lte_frame_parms->rev, // bit-reversal permutation - NONE); - - - //write_output("pss.m","pss0", PHY_vars->tx_vars[0].TX_DMA_BUFFER,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,1); - - - write_output("pss.m","pss0", TX_vars->TX_DMA_BUFFER[0],FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,1,5); - - free(txdataF[0]); - free(txdataF[1]); -#endif //IFFT_FPGA - free(txdataF); - break; - - case 4: - phy_init_top(2); - printf("TX_DMA_BUFFER[0] = %p, TX_DMA_BUFFER[1] = %p\n", - TX_DMA_BUFFER[0][0],TX_DMA_BUFFER[0][1]); - TX_vars->TX_DMA_BUFFER[0] = (mod_sym_t *)TX_DMA_BUFFER[0][0]; - TX_vars->TX_DMA_BUFFER[1] = (mod_sym_t *)TX_DMA_BUFFER[0][1]; - - for (l=1; l<120; l++) { - for (i=0; i<75; i+=3) { - rv = ptaus(); - rv = rv & 0x03030303; - ((unsigned char*)&rv)[0] = ((unsigned char*)&rv)[0]+1; - ((unsigned char*)&rv)[1] = ((unsigned char*)&rv)[1]+1; - ((unsigned char*)&rv)[2] = ((unsigned char*)&rv)[2]+1; - ((unsigned char*)&rv)[3] = ((unsigned char*)&rv)[3]+1; - ((unsigned int *)TX_vars->TX_DMA_BUFFER[0])[l*75+i] = rv; - ((unsigned int *)TX_vars->TX_DMA_BUFFER[1])[l*75+i] = rv; - - rv = ptaus(); - rv = rv & 0x03030303; - ((unsigned char*)&rv)[0] = ((unsigned char*)&rv)[0]+1; - ((unsigned char*)&rv)[1] = ((unsigned char*)&rv)[1]+1; - ((unsigned char*)&rv)[2] = ((unsigned char*)&rv)[2]+1; - ((unsigned char*)&rv)[3] = ((unsigned char*)&rv)[3]+1; - ((unsigned int *)TX_vars->TX_DMA_BUFFER[0])[l*75+i+1] = rv; - ((unsigned int *)TX_vars->TX_DMA_BUFFER[1])[l*75+i+1] = rv; - - rv = ptaus(); - rv = rv & 0x03030303; - ((unsigned char*)&rv)[0] = ((unsigned char*)&rv)[0]+1; - ((unsigned char*)&rv)[1] = ((unsigned char*)&rv)[1]+1; - ((unsigned char*)&rv)[2] = ((unsigned char*)&rv)[2]+1; - ((unsigned char*)&rv)[3] = ((unsigned char*)&rv)[3]+1; - ((unsigned int *)TX_vars->TX_DMA_BUFFER[0])[l*75+i+2] = rv; - ((unsigned int *)TX_vars->TX_DMA_BUFFER[1])[l*75+i+2] = rv; - - } - } - - -#endif // OPENAIR_LTE - - default: - break; - } -} - - - - diff --git a/openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_rf.c b/openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_rf.c deleted file mode 100755 index d388409fc9..0000000000 --- a/openair1/USERSPACE_TOOLS/OPENAIR_RF/openair_rf.c +++ /dev/null @@ -1,732 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/vars.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -//#include "PHY/CONFIG/vars.h" -//#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - -#include -#include -#include - -//#include -#include -//#include -//#include -#include -#include -#include -#include -#include -//#include -//#include -//#include -#include -//#include -#include -//#include -//#include - -#define PAGE_SIZE 4096 - -//PHY_CONFIG PHY_config_mem; -//PHY_CONFIG *PHY_config; - -//float estimate_freq(short *); - -//unsigned int revbits(unsigned int x); -int current_dlsch_cqi; - - -int main (int argc, char **argv) -{ - - int openair_fd,rx_sig_fifo_fd,frequency,i; - - unsigned int action; - char *dma_buffer_local; - char device_name[16]; - unsigned char temp[4]; - unsigned int tmp; - int result=-1; - - FILE *chbch_file,*rx_frame_file,*tx_frame_file; - unsigned int fc; - int ifreq, target_freq; - - char *chbch_pdu; - int chbch_size; - - TX_VARS *TX_vars; - LTE_DL_FRAME_PARMS *frame_parms; - - if (argc < 3) { - printf("[openair][INFO] Usage %s frequency(0,1,2,3) action (0-14) params . . . \n" , argv[0]); - printf("[openair][INFO] ACTION DESCRIPTIONS\n"); - printf("[openair][INFO] Action 0 : Configure PHY/MAC (Kernel module and FPGA) - param dual_tx (0/1) - param tdd (0/1) - tdd config(0-9, 254=RX only, 255=TX only)\n"); - printf("[openair][INFO] Action 1 : Start Primary Clusterhead - param 0/1 = frequency offset on/off - param NODE_ID\n"); - printf("[openair][INFO] Action 2 : Start Secondary Clusterhead - param 0/1 = frequency offset on/off - param NODE_ID\n"); - printf("[openair][INFO] Action 3 : Start Node - param 0/1 = frequency offset on/off - param NODE_ID\n"); - printf("[openair][INFO] Action 4 : Standby - param 0/1 = frequency offset on/off\n"); - printf("[openair][INFO] Action 5 : Get frame and save to rx_frame.dat - param 0/1 = frequency offset on/off\n"); - printf("[openair][INFO] Action 6 : Set TX gains - param 2394_0 (0-255),9862_TX_0(0-255),2394_1(0-255),9862_TX_1(0-255)\n"); - printf("[openair][INFO] Action 7 : Set RX gains - param 2391_0 (0-255),9862_RX_0(0-19),2391_1(0-255),9862_RX_1(0-19) (also turns off AGC)\n"); - printf("[openair][INFO] Action 8 : TX C/W @ fs/4 + offset - param 0/1 = 66 kHz frequency offset on/off\n"); - printf("[openair][INFO] Action 9 : TX OFDM/QPSK - param 0/1 = 66 kHz frequency offset on/off\n"); - printf("[openair][INFO] Action 10 : TX SCCP/QPSK param 0/1 = 66 kHz frequency offset on/off\n"); - printf("[openair][INFO] Action 11 : TX SCCP/16QAM param 0/1 = 66 kHz frequency offset on/off\n"); - printf("[openair][INFO] Action 12 : TX I/Q impulses (delay test)\n"); - printf("[openair][INFO] Action 13 : TX real C/W fs/4 + offset with DC component - param 0/1 = 66 kHz frequency offset off/on\n"); - printf("[openair][INFO] Action 14 : SET RX RF Mode - param\n"); - printf("[openair][INFO] Action 15 : SET TCXO param (set > 255 to use calibrated value)\n"); - printf("[openair][INFO] Action 16 : SET CALIBRATED RX GAIN param (also turns off AGC)\n"); - printf("[openair][INFO] Action 22 : Update SoC firmware\n"); - printf("[openair][INFO] Action 25 : SET TIMING ADVANCE param\n"); - printf("[openair][INFO] Action 26 : SET FREQ OFFSET param\n"); - printf("[openair][INFO] Action 27 : Start Primary Clusterhead in cognitive mode - param 0/1 = frequency offset on/off - param NODE_ID\n"); - printf("[openair][INFO] Action 28 : Set UE DL MCS - param 0-31\n"); - printf("[openair][INFO] Action 29 : Set UE UL MCS - param 0-31\n"); - printf("[openair][INFO] Action 30 : Start UE UL NB RB 2-9\n"); - printf("[openair][INFO] Action 31 : Start UE Rate Adaptation param 0/1\n"); - printf("[openair][INFO] Action 32 : Set DLSCH Transmission Mode param 1-7\n"); - printf("[openair][INFO] Action 33 : Set ULSCH Allocation Mode param 0-2\n"); - printf("[openair][INFO] Action 35 : Set cooperation flag (0=no coop, 1=delay diversity, 2=distrib Alamouti)\n"); - exit (-1); - } - - - frequency = atoi(argv[1]); - // printf ("[openair][INFO][START] RBT file is %s\n", argv[2]); - printf ("[openair][INFO][START] Frequency is %d\n", frequency); - // printf ("[openair][INFO][START] number of antennas is %d\n", nb_rf_cards); - - action = atoi(argv[2]); - - if (action == 0) // configure - printf("[openair][INFO][START] Action is : configuration\n"); - else if (action == 1) // start clusterhead - printf("[openair][INFO][START] Action is : start primary clusterhead\n"); - else if (action == 2) // start terminode - printf("[openair][INFO][START] Action is : start secondary clusterhead\n"); - else if (action == 3) // stop - printf("[openair][INFO][START] Action is : start node\n"); - else if (action == 4) // stop - printf("[openair][INFO][START] Action is : stop\n"); - else if (action == 5) // stop - printf("[openair][INFO][START] Action is : GET_FRAME\n"); - else if (action == 6) // stop - printf("[openair][INFO][START] Action is : SET_TX_GAIN\n"); - else if (action == 7) // stop - printf("[openair][INFO][START] Action is : SET_RX_GAIN\n"); - else if (action == 8) // stop - printf("[openair][INFO][START] Action is : START_FS4_TEST\n"); - else if (action == 9) // stop - printf("[openair][INFO][START] Action is : START_OFDM_TEST\n"); - else if (action == 11) // stop - printf("[openair][INFO][START] Action is : START_QAM16_TEST\n"); - else if (action == 10) // stop - printf("[openair][INFO][START] Action is : START_QPSK_TEST\n"); - else if (action == 12) // stop - printf("[openair][INFO][START] Action is : START_IQ_IMPULSES_TEST\n"); - else if (action == 13) // stop - printf("[openair][INFO][START] Action is : START_REAL_FS4_WITH_DC_TEST\n"); - else if (action == 14) // stop - printf("[openair][INFO][START] Action is : SET_RX_RF MODE\n"); - else if (action == 15) // stop - printf("[openair][INFO][START] Action is : SET_TCXO_DAC\n"); - else if (action == 16) // Set calibrated gain - printf("[openair][INFO][START] Action is : SET_CALIBRATED_RX_GAIN\n"); - else if (action == 22) // Update firmware - printf("[openair][INFO][START] Action is : UPDATE_FIRMWARE\n"); - else if (action == 23) // Set Topology info - printf("[openair][INFO][START] Action is : SET_TOPOLOGY_INFORMATION\n"); - else if (action == 24) // Stop_EMULATION_TX_RX for node// disconnect from CH - printf("[openair][INFO][START] Action is : STOP_EMULATION_TX_RX\n"); - else if (action == 25) // Set timing advance - printf("[openair][INFO][START] Action is : SET_TIMING_ADVANCE\n"); - else if (action == 26) // Set freq offset - printf("[openair][INFO][START] Action is : SET_FREQ_OFFSET\n"); - else if (action == 28) // - printf("[openair][INFO][START] Action is : SET_UE_DL_MCS\n"); - else if (action == 29) // - printf("[openair][INFO][START] Action is : SET_UE_UL_MCS\n"); - else if (action == 30) // - printf("[openair][INFO][START] Action is : SET_UE_UL_NB_RB\n"); - else if (action == 31) // - printf("[openair][INFO][START] Action is : SET_DLSCH_RATE_ADAPTATION\n"); - else if (action == 32) // - printf("[openair][INFO][START] Action is : SET_DLSCH_TRANSMISSION_MODE\n"); - else if (action == 33) // - printf("[openair][INFO][START] Action is : SET_ULSCH_ALLOCATION_MODE\n"); - else if (action == 39) // Send EMOS Rec flag - printf("[openair][INFO][START] Action is : START_EMOS_NODEB\n"); - else { - printf("[openair][INFO][START] Action is : unknown action %d\n",action); - } - - - printf("[openair][INFO][START] Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - //PHY_config = (PHY_CONFIG *)&PHY_config_mem; - //PHY_vars = malloc(sizeof(PHY_VARS)); - //mac_xface = malloc(sizeof(MAC_xface)); - TX_vars = malloc(sizeof(TX_VARS)); - frame_parms = malloc(sizeof(LTE_DL_FRAME_PARMS)); - - frame_parms->N_RB_DL = 25; - frame_parms->N_RB_UL = 25; - frame_parms->Nid_cell = 0; - frame_parms->Ncp = 1; - frame_parms->Ncp_UL = 1; - frame_parms->nushift = 0; - frame_parms->frame_type = 1; //TDD - frame_parms->tdd_config = 255; - frame_parms->tdd_config_S = 0; - frame_parms->mode1_flag = 1; - frame_parms->nb_antennas_tx = 2; //NB_ANTENNAS_TX; - frame_parms->nb_antennas_rx = 1; //NB_ANTENNAS_RX; - frame_parms->dual_tx = 0; - - frame_parms->phich_config_common.phich_resource = oneSixth; - frame_parms->phich_config_common.phich_duration = normal; - - frame_parms->pusch_config_common.ul_ReferenceSignalsPUSCH.cyclicShift = 0;//n_DMRS1 set to 0 - - init_frame_parms(frame_parms,1); - - printf("Initialized PHY variables\n"); - - -#ifndef OPENAIR_LTE - chbch_size = (NUMBER_OF_USEFUL_CARRIERS*NUMBER_OF_CHBCH_SYMBOLS)>>3; - chbch_pdu = malloc(chbch_size); - - for (i=0; i5) - frame_parms->tdd_config = atoi(argv[5]); - else - printf("Using TDD config %d\n",frame_parms->tdd_config); - - if (argc>4) - frame_parms->frame_type = (unsigned char) atoi(argv[4]); - else - printf("Using frame type %d\n",frame_parms->frame_type); - - if (argc>3) - frame_parms->dual_tx = (unsigned char) atoi(argv[3]); - else - printf("Using dual_tx %d\n",frame_parms->dual_tx); - - frame_parms->freq_idx = (unsigned char) frequency; - - dump_frame_parms(frame_parms); - - result=ioctl(openair_fd, openair_DUMP_CONFIG,(char *)frame_parms); - - if (result == 0) { - printf ("[openair][CONFIG][INFO] loading openair configuration in kernel space\n"); - } else { - printf ("[openair][START][INFO] loading openair configuration in kernel space failed \n"); - } - - - break; - - case 1 : - printf("[openair][START][INFO] Starting clusterhead\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) | ((atoi(argv[4])&0xFF) << 7); - printf("[openair][START][INFO] fc = %d\n",fc); - result=ioctl(openair_fd,openair_START_1ARY_CLUSTERHEAD, &fc); - - if (result == 0) { - printf ("[openair][START][INFO] primary clusterhead running\n"); - } else { - printf ("[openair][START][INFO] starting primary clusterhead failed \n"); - } - - break; - - case 2 : - printf("[openair][START][INFO] Starting secondary clusterhead\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) | ((atoi(argv[4])&0xFF) << 7); - result=ioctl(openair_fd,openair_START_2ARY_CLUSTERHEAD,&fc); - - if (result == 0) { - printf ("[openair][START][INFO] secondary clusterhead running\n"); - } else { - printf ("[openair][START][INFO] starting secondary clusterhead failed \n"); - } - - break; - - case 3 : - printf("[openair][START][INFO] Starting NODE ...(%x)\n",openair_START_NODE); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) | ((atoi(argv[4])&0xFF) << 7); - result=ioctl(openair_fd,openair_START_NODE, &fc); - - if (result == 0) { - printf ("[openair][START][INFO] ok! \n"); - } else { - printf ("[openair][START][INFO] not ok! \n"); - } - - - - break; - - case 4 : - printf("[openair][START][INFO] Stoping ...\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4); - - result=ioctl(openair_fd,openair_STOP,(void *)&fc); - - if (result == 0) { - printf ("[openair][STOP][INFO] ok! \n"); - } else { - printf ("[openair][STOP][INFO] not ok! \n"); - } - - /* - if ((rx_frame_file = fopen("rx_frame.dat","w")) == NULL) - { - printf("[openair][STOP][INFO] Cannot open rx_frame.m data file\n"); - exit(0); - } - - read(rx_sig_fifo_fd,(void *)dma_buffer_local,NB_ANTENNAS_RX*FRAME_LENGTH_BYTES); - fwrite(dma_buffer_local,4,NB_ANTENNAS_RX*FRAME_LENGTH_COMPLEX_SAMPLES,rx_frame_file); - fclose(rx_frame_file); - */ - - break; - - case 5 : - - if ((rx_frame_file = fopen("rx_frame.dat","w")) == NULL) { - printf("[openair][INFO] Cannot open rx_frame.m data file\n"); - exit(0); - } - - if ((rx_sig_fifo_fd = open("/dev/rtf59",O_RDONLY,0)) <0) { - printf("[openair][INFO] Cannot open rx_sig_fifo\n"); - exit(0); - } - - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4); - ioctl(openair_fd,openair_GET_BUFFER,(void *)&fc); - - sleep(2); - - read(rx_sig_fifo_fd,(void *)dma_buffer_local,NB_ANTENNAS_RX*FRAME_LENGTH_BYTES); - fwrite(dma_buffer_local,4,NB_ANTENNAS_RX*FRAME_LENGTH_COMPLEX_SAMPLES,rx_frame_file); - - fclose(rx_frame_file); - break; - - case 6 : - printf("[openair][START][INFO] Setting TX gains to %d,%d,%d,%d\n",atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6])); - temp[0] = atoi(argv[3]); - temp[1] = atoi(argv[4]); - temp[2] = atoi(argv[5]); - temp[3] = atoi(argv[6]); - - result=ioctl(openair_fd,openair_SET_TX_GAIN,&temp[0]); - break; - - case 7 : - printf("[openair][START][INFO] Setting RX gains to %d,%d,%d,%d\n",atoi(argv[3]),atoi(argv[4]),atoi(argv[5]),atoi(argv[6])); - temp[0] = atoi(argv[3]); - temp[1] = atoi(argv[4]); - temp[2] = atoi(argv[5]); - temp[3] = atoi(argv[6]); - - - result=ioctl(openair_fd,openair_SET_RX_GAIN,&temp[0]); - break; - - case 8 : - printf("[openair][START][INFO] TX Test FS/4\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4); - result=ioctl(openair_fd,openair_START_FS4_TEST,&fc); - break; - - case 9 : - printf("[openair][START][INFO] TX Test OFDM, first_rb %d, nb_rb %d\n",atoi(argv[4]),atoi(argv[5]) ); - /* - if ((tx_frame_file = fopen("tx_frame.dat","w")) == NULL) - { - printf("[openair][INFO] Cannot open tx_frame.dat data file\n"); - exit(0); - } - - //openair_generate_ofdm(1,0xffff,chbch_pdu); - openair_generate_ofdm(TX_vars,4,0,0); - - printf("[openair][START][INFO] TX_DMA_BUFFER = %p\n",TX_vars->TX_DMA_BUFFER[0]); - result=ioctl(openair_fd,openair_START_TX_SIG,(void *)TX_vars); - #ifdef IFFT_FPGA - fwrite(TX_vars->TX_DMA_BUFFER[0],1,NUMBER_OF_USEFUL_CARRIERS*NUMBER_OF_SYMBOLS_PER_FRAME,tx_frame_file); - #else - fwrite(TX_vars->TX_DMA_BUFFER[0],4,FRAME_LENGTH_COMPLEX_SAMPLES,tx_frame_file); - #endif - fclose(tx_frame_file); - */ - - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4) | (atoi(argv[4])<<7) | (atoi(argv[5])<<12); - result=ioctl(openair_fd,openair_START_OFDM_TEST,&fc); - - break; - - case 10 : - printf("[openair][START][INFO] TX Test QAM16\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);; - result=ioctl(openair_fd,openair_START_QAM16_TEST,&fc); - break; - - case 11 : - printf("[openair][START][INFO] TX Test QPSK\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);; - result=ioctl(openair_fd,openair_START_QPSK_TEST,&fc); - break; - - case 12 : - printf("[openair][START][INFO] TX Test I/Q Impulses\n"); - fc = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4);; - result=ioctl(openair_fd,openair_START_IQ_IMPULSES_TEST,&fc); - break; - - case 13: - //printf("[openair][START][INFO] FS4 Test with DC\n"); - printf("[openair][START][INFO] FS4 Test\n"); - fc = atoi(argv[3]); - //result=ioctl(openair_fd,openair_START_REAL_FS4_WITH_DC_TEST,&fc); - result=ioctl(openair_fd,openair_START_FS4_TEST,&fc); - break; - - case 14: // SET RX RF MODE - printf("[openair][START][INFO] SET RX RF MODE\n"); - fc = atoi(argv[3]); - result=ioctl(openair_fd,openair_RX_RF_MODE,&fc); - break; - - case 15: // SET TCXO DAC level - printf("[openair][START][INFO] SET TCXO DAC\n"); - fc = atoi(argv[3]); - result=ioctl(openair_fd,openair_SET_TCXO_DAC,&fc); - break; - - case 16: // SET Calibrated - printf("[openair][START][INFO] SET RX GAIN\n"); - fc = atoi(argv[3]); - result=ioctl(openair_fd,openair_SET_CALIBRATED_RX_GAIN,&fc); - break; - - /* - case 17: // DO SYNCHRONIZATION - printf("[openair][INFO] Do CHBCH Synchronization\n"); - ((unsigned char *)&dma_buffer_local[0])[0] = (unsigned char)((atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4)); - ((unsigned char *)&dma_buffer_local[0])[1] = (unsigned char)(atoi(argv[4])); - ioctl(openair_fd,openair_DO_SYNCH,(void *)dma_buffer_local); - break; - - case 18: // GET SIGNALS - - temp[0] = atoi(argv[4]); - - if (temp[0]==0) - printf("[openair][START][INFO] Get Synch Symbols\n"); - else if (temp[0]==1) - printf("[openair][START][INFO] Get Channel Estimate\n"); - else if (temp[0]==2) - printf("[openair][START][INFO] Get Estimated data\n"); - else if (temp[0]==3) - printf("[openair][START][INFO] Get Decoded Data\n"); - else - printf("[openair][START][INFO] Get Signals : wrong selection (choose from 0-3)\n"); - - - if ((rx_frame_file = fopen("rx_frame.dat","w")) == NULL) - { - printf("[openair][GET_SIGNALS][INFO] Cannot open rx_frame.dat data file\n"); - exit(0); - } - - ((unsigned int *)&dma_buffer_local[0])[0] = (atoi(argv[3])&1) | ((frequency&7)<<1) | ((frequency&7)<<4); - ((unsigned char *)&dma_buffer_local[0])[1] = (unsigned char)(atoi(argv[4])); - - if (temp[0] < 4) - ioctl(openair_fd,openair_GET_SIGNALS,(void *)dma_buffer_local); - // sleep(2); - - fwrite(dma_buffer_local,4,7*256,rx_frame_file); - - fclose(rx_frame_file); - break; - */ - - case 19: // SET FFT SCALE - printf("[openair][START][INFO] Set FFT Scale to %d, %d\n",atoi(argv[3]),atoi(argv[4])); - - temp[0] = atoi(argv[3]); - temp[1] = atoi(argv[4]); - result=ioctl(openair_fd,openair_SET_FFT_SCALE,&temp[0]); - break; - - - case 21: // FFT TEST - fc = atoi(argv[3]); - result=ioctl(openair_fd,openair_SET_CALIBRATED_RX_GAIN,&fc); - break; - - case 22: - result=ioctl(openair_fd, openair_UPDATE_FIRMWARE); - - if (result) printf("[openair][START][INFO] NOK, ioctl failed\n"); - - break; - - /* - //#else //PHY_EMUL_IOCTL - case 23 : - printf("[OPENAIR][START][Topology] Configuring Topology,\n",argc); - unsigned short ri=0,rj=3,Nb_inst,Nb_ch,Nb_ue,kk; - Topo_info[ri++]=atoi(argv[rj++]);//NUMBER OF EMULATION MASTER (Machines) - printf("NUMBER OF MASTER %d\n",Topo_info[ri-1]); - Topo_info[ri++]=atoi(argv[rj++]);//LOCAL MASTER ID - printf("LOCAL MASTER ID %d\n",Topo_info[ri-1]); - Nb_inst=atoi(argv[rj++]);//LOCAL NUMBER OF INSTANCES - Topo_info[ri++]=Nb_inst; - printf("NUMBER OF INSTANCE %d\n",Topo_info[ri-1]); - for(i=0;i max_f) { - max_f = tmp; - max_point = i>>1; - } - } - avg += ((float)max_point/15); - // printf("%d (%f)\n",max_point,avg); - - } - return(avg); -} - -unsigned int revbits(unsigned int x) { - - int i; - unsigned int ret = 0 ; - - - for (i=0;i<31;i++) - - ret += (((x&(1< - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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. - - This program 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 this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair1/USERSPACE_TOOLS/SCOPE/Makefile b/openair1/USERSPACE_TOOLS/SCOPE/Makefile deleted file mode 100755 index a02ed10ee8..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -include $(OPENAIR_HOME)/common/utils/Makefile.inc - -TOP_DIR = ../.. -OPENAIR2_DIR = ../../../openair2 -OPENAIR2_TOP = $(OPENAIR2_DIR) - -CFLAGS += -DNODE_RG -DUSER_MODE -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TX=2 -DNB_ANTENNAS_TXRX=2 -DWIDENS_DLC -DPHY_CONTEXT -DPC_DSP -DPC_TARGET -DMAX_MODULES=1 -DCBMIMO1 -I$(TOP_DIR) -I/usr/include/X11 -I/usr/X11R6/include -I/usr/realtime/include -I$(OPENAIR2_DIR)/RRC/LITE/MESSAGES - -include $(OPENAIR2_DIR)/LAYER2/Makefile.inc -CFLAGS += $(L2_incl) - -LTE_OBJS = lte_scope.o lte.o $(TOP_DIR)/PHY/TOOLS/file_output.o $(TOP_DIR)/PHY/INIT/init_top.o $(TOP_DIR)/PHY/TOOLS/fft.o -LTE_UL_OBJS = lte_scope_ul.o lte_ul.o $(TOP_DIR)/PHY/TOOLS/file_output.o $(TOP_DIR)/PHY/INIT/init_top.o $(TOP_DIR)/PHY/TOOLS/fft.o - -ifeq ($(EMOS),1) -CFLAGS += -DEMOS -endif - -all: lte lte_ul - -lte: $(LTE_OBJS) - $(CC) -o lte_scope $(CFLAGS) $(LTE_OBJS) -lm -L/usr/local/lib -lforms -lX11 -L/usr/X11R6/lib -lXpm -lpthread - -lte_ul: $(LTE_UL_OBJS) - $(CC) -o lte_scope_ul $(CFLAGS) $(LTE_UL_OBJS) -lm -L/usr/local/lib -lforms -lX11 -L/usr/X11R6/lib -lXpm -lpthread - - -$(LTE_OBJS) $(LTE_UL_OBJS): %.o: %.c - $(CC) -c $(DEBUG_FLAGS) $(CFLAGS) -DOPENAIR_LTE $(INCLUDE) -o $@ $< - -clean: - rm -f $(LTE_OBJS) $(LTE_UL_OBJS) - - diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch.c b/openair1/USERSPACE_TOOLS/SCOPE/chbch.c deleted file mode 100755 index bf4252f9a6..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch.c +++ /dev/null @@ -1,456 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include "forms.h" -#include "chbch_scope.h" - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -#include "PHY/CONFIG/vars.h" -#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - - -FD_chbch_scope *form; - - -//short channel[2048]; -//short channel_f[2048]; -//char demod_data[2048]; - -short *channel[4],*channel_f[4],*rx_sig[4],*rx_sig_f2[4],*rx_sig_f3[4],*sach_data,*magh[4]; -char *demod_data,*rx_sig_f4; - -int length,offset; -float avg=1; -int sach_flag; - -unsigned char nb_tx_ant; - -SACH_DIAGNOSTICS *sach_diag; - - -void chbch_scope_idle_callback(void) -{ - - int i,j,ind,k; - - float Re,Im,mag_sig[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],mag_h[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - mag_sig2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],sig_time[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_re[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],scat_sig_im[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_re2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],scat_sig_im2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8]; - - float cum_avg; - - unsigned short nb_sach_carriers; - - for (i=0; i<2*CYCLIC_PREFIX_LENGTH; i++) { - sig_time[i] = (float)i; - Re = (float)(channel[0][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 4*i]); - Im = (float)(channel[0][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 1+(4*i)]); - mag_sig[i] = 10*log10(1+Re*Re + Im*Im); - Re = (float)(channel[1][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 4*i]); - Im = (float)(channel[1][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 1+(4*i)]); - mag_sig2[i] = 10*log10(1+Re*Re + Im*Im); - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->channel_t_re,30,80); - fl_set_xyplot_ybounds(form->channel_t_im,30,80); - fl_set_xyplot_data(form->channel_t_re,sig_time,mag_sig,2*CYCLIC_PREFIX_LENGTH,"","",""); - fl_set_xyplot_data(form->channel_t_im,sig_time,mag_sig2,2*CYCLIC_PREFIX_LENGTH,"","",""); - - cum_avg = 0; - ind = 0; - - for (k=0; kscatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->channel_f,30,70); - fl_set_xyplot_data(form->channel_f,sig_time,mag_sig,NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS,"","",""); - j=0; - - if (sach_flag==0) // CHBCH or MRBCH - for (i=0; i<256*length; i+=2) { - - if ((i%256) == 236) - i+=20; - - if ((i%256) == 0) - i+=20; - - if ((i%256) == 80) - i+=96; - - - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[0][4*i])+(float)(rx_sig_f2[1][4*i]); - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[0][1+(4*i)])+(float)(rx_sig_f2[1][1+(4*i)]); - - } - else { - nb_sach_carriers = (sach_diag->nb_sach_carriers < 4096) ? sach_diag->nb_sach_carriers : 4096; - - for (i=0; i 3) { - - sig_time[j] = (float)j; - mag_sig[j] = (float)(sach_data[i]); - mag_h[j++] = (float)((magh[0][i]/2)+(magh[1][i]/2)); - mag_sig[j] = (float)(sach_data[1+i]); - mag_h[j++] = -(float)((magh[0][i]/2)+(magh[1][i]/2)); - - } - } - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->demod_out,-1024,1024); - fl_set_xyplot_data(form->demod_out,sig_time,mag_sig,j,"","",""); - fl_add_xyplot_overlay(form->demod_out,1,sig_time,mag_h,j,FL_BLUE); - - j=0; - - for (i=0; i<(length-1)*160*2; i++) { - - sig_time[j] = (float)j; - mag_sig[j++] = (float)demod_data[i]; - sig_time[j] = (float)j; - mag_sig[j++] = (float)demod_data[i]; - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->decoder_input,-10,10); - - if (length == 8) - fl_set_xyplot_data(form->decoder_input,sig_time,mag_sig,2*160*8,"","",""); - else - fl_set_xyplot_data(form->decoder_input,sig_time,&mag_sig[384],384,"","",""); - - j=0; - - if (sach_flag == 0) - for (i=0; i<256*length; i+=2) { - - if ((i%256) == 236) - i+=20; - - if ((i%256) == 0) - i+=20; - - if ((i%256) == 80) - i+=96; - - Re = .5*((float)(rx_sig_f2[0][4*i]) + (float)(rx_sig_f2[1][4*i])); - Im = .5*((float)(rx_sig_f2[0][1+(4*i)]) + (float)(rx_sig_f2[1][1+(4*i)])); - - scat_sig_re[j] = Re; - scat_sig_im[j] = Im; - - Re = .5*((float)(rx_sig_f2[0][4*(i+1)]) + (float)(rx_sig_f2[1][4*(i+1)])); - Im = .5*((float)(rx_sig_f2[0][1+(4*(i+1))]) + (float)(rx_sig_f2[1][1+(4*(i+1))])); - - scat_sig_re2[j] = Re; - scat_sig_im2[j] = Im; - - j++; - - - } - else { - - nb_sach_carriers = (sach_diag->nb_sach_carriers < 4096) ? sach_diag->nb_sach_carriers : 4096; - - for (i=0; i 3) { - Re = (float)sach_data[i]; - Im = (float)sach_data[1+i]; - - scat_sig_re[j] = Re; - scat_sig_im[j] = Im; - - Re = (float)sach_data[i+2]; - Im = (float)sach_data[i+3]; - scat_sig_re2[j] = Re; - scat_sig_im2[j] = Im; - j++; - } - } - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,j,"","",""); - fl_set_xyplot_ybounds(form->scatter_plot,-1024,1024); - fl_set_xyplot_xbounds(form->scatter_plot,-1024,1024); - fl_set_xyplot_ybounds(form->scatter_plot2,-1024,1024); - fl_set_xyplot_xbounds(form->scatter_plot2,-1024,1024); - fl_set_xyplot_data(form->scatter_plot,scat_sig_re,scat_sig_im,j,"","",""); - fl_set_xyplot_data(form->scatter_plot2,scat_sig_re2,scat_sig_im2,j,"","",""); - - - usleep(10000); -} -//----------------------------------------------------------------------------- -do_scope() -{ - - //----------------------------------------------------------------------------- - char ch; - - fl_set_idle_callback(chbch_scope_idle_callback, NULL); - fl_do_forms() ; /* SIGSCOPE */ - - - -} - -//----------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - //----------------------------------------------------------------------------- - - int openair_fd,i; - unsigned int mem_base; - unsigned int first_symbol; - char title[20]; - - if (argc<4) { - printf("Not enough arguments (transport_channel nb_tx_antennas chsch_index (only relevant for bch))\n"); - printf("0=CHBCH 1=RACH 2=DCCH/SACH 3=MRBCH\n"); - exit(-1); - } - - PHY_vars = malloc(sizeof(PHY_VARS)); - - PHY_config = malloc(sizeof(PHY_CONFIG)); - /* - if((config = fopen("./widens_config.cfg","r")) == NULL) // this can be configured - { - printf("[Main USER] The widens configuration file could not be found!"); - exit(0); - } - - if ((scenario= fopen("./widens_scenario.scn","r")) ==NULL) - { - printf("[Main USER] The widens scenario file could not be found!"); - exit(0); - } - - printf("Opened configuration files\n"); - - reconfigure_MACPHY(scenario); - */ - - printf("Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDONLY)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - printf("Getting PHY_vars ...\n"); - - ioctl(openair_fd,openair_GET_VARS,PHY_vars); - - printf("Getting PHY_vars->tx_vars[0].TX_DMA_BUFFER=%p\n",PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("Getting PHY_config ...\n"); - - ioctl(openair_fd,openair_GET_CONFIG,PHY_config); - - printf("PHY_vars chbch_data.rx_vars[0].RX_DMA_BUFFER = %p\n",PHY_vars->rx_vars[0].RX_DMA_BUFFER); - printf("PHY_vars chsch_data.chsch_channel[0] = %p\n",PHY_vars->chsch_data[1].channel[0]); - printf("PHY_vars chsch_data.chsch_channel_f[0] = %p\n",PHY_vars->chsch_data[1].channel_f[0]); - printf("PHY_vars chbch_data.rx_sig_f2[0] = %p\n",PHY_vars->chbch_data[1].rx_sig_f2[0]); - - printf("NUMBER_OF_OFDM_CARRIERS = %d\n",NUMBER_OF_OFDM_CARRIERS); - - - mem_base = mmap(0, - 2048*4096, - PROT_READ, - MAP_PRIVATE, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %p\n",mem_base); - else - msg("Could not map physical memory\n"); - - if (atoi(argv[1]) == 0) { // CHBCH - for (i=0; ichsch_data[atoi(argv[3])].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->chsch_data[atoi(argv[3])].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig[i] = (short *)(mem_base + (unsigned int)PHY_vars->rx_vars[i].RX_DMA_BUFFER-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p,rx_sig_f2[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i],i,rx_sig_f2[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 8; - sach_flag = 0; - } else if (atoi(argv[1]) == 1) { // RACH - for (i=0; isch_data[0].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[0].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - first_symbol = 2+(NUMBER_OF_SYMBOLS_PER_FRAME>>1); - rx_sig[i] = (short *)(mem_base + - (unsigned int)&PHY_vars->rx_vars[i].RX_DMA_BUFFER[(first_symbol<tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i]); - rx_sig_f3[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f3[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->sach_data[0].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 1; - sach_flag = 1; - } else if (atoi(argv[1]) == 2) { // DCCH/SACH - for (i=0; isch_data[atoi(argv[3])].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[atoi(argv[3])].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - first_symbol = 8+(NUMBER_OF_SYMBOLS_PER_FRAME>>1); - rx_sig[i] = (short *)(mem_base + - (unsigned int)&PHY_vars->rx_vars[i].RX_DMA_BUFFER[(first_symbol<tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - magh[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].mag_channel_f_16qam[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f3[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f3[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i]); - - - } - - sach_data = (short *)(mem_base + (unsigned int)PHY_vars->Sach_diagnostics[0][1].sach_demod_data-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - sach_diag = &PHY_vars->Sach_diagnostics[0][1]; - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->sach_data[1].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("demod_data = %p\n",demod_data); - - length = 20; - sach_flag = 1; - } else if (atoi(argv[1]) == 3) { // MRBCH - for (i=0; isch_data[MRSCH_INDEX].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[MRSCH_INDEX].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig[i] = (short *)(mem_base + (unsigned int)PHY_vars->rx_vars[i].RX_DMA_BUFFER-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p,rx_sig_f2[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i],i,rx_sig_f2[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 1; - sach_flag = 0; - } - - else { - printf("Unknown command %d\n",atoi(argv[1])); - close(openair_fd); - exit(-1); - - } - - nb_tx_ant = atoi(argv[2]); - - for (i=0; i<16; i++) - printf("%x\n",rx_sig[0][i]); - - sprintf(title, "CHBCH SCOPE %d %d %d", atoi(argv[1]), atoi(argv[2]), atoi(argv[3])), - - fl_initialize(&argc, argv, title, 0, 0); /* SIGSCOPE */ - form = create_form_chbch_scope(); /* SIGSCOPE */ - fl_show_form(form->chbch_scope,FL_PLACE_HOTSPOT,FL_FULLBORDER,title); /* SIGSCOPE */ - - do_scope(); - sleep(5); - close(openair_fd); - return(0); -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams.c b/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams.c deleted file mode 100644 index abd3847cb3..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams.c +++ /dev/null @@ -1,447 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include "forms.h" -#include "chbch_2streams_scope.h" - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -#include "PHY/CONFIG/vars.h" -#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - - -FD_chbch_scope *form; - - -//short channel[2048]; -//short channel_f[2048]; -//char demod_data[2048]; - -short *channel[4],*channel_f[4],*rx_sig[4],*rx_sig_f2[4],*rx_sig_f3[4]; -int *determ; -short *ideterm; -char *demod_data,*rx_sig_f4; - -int length,offset; -float avg=1; -int sach_flag; -int antenna_idx=0; //needed to read correct data for MMSE receiver - -unsigned char nb_tx_ant; - -void chbch_scope_idle_callback(void) -{ - - int i,j,ind,k; - - float Re,Im,mag_sig[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],mag_sig2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - sig_time[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],scat_sig_re[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_im[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8]; - float cum_avg; - float det[NUMBER_OF_OFDM_CARRIERS], idet[NUMBER_OF_OFDM_CARRIERS], carriers[NUMBER_OF_OFDM_CARRIERS]; - - for (i=0; i<2*CYCLIC_PREFIX_LENGTH; i++) { - sig_time[i] = (float)i; - Re = (float)(channel[0][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 4*i]); - Im = (float)(channel[0][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 1+(4*i)]); - mag_sig[i] = 10*log10(1+Re*Re + Im*Im); - Re = (float)(channel[1][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 4*i]); - Im = (float)(channel[1][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 1+(4*i)]); - mag_sig2[i] = 10*log10(1+Re*Re + Im*Im); - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->channel_t_re,30,80); - fl_set_xyplot_ybounds(form->channel_t_im,30,80); - fl_set_xyplot_data(form->channel_t_re,sig_time,mag_sig,2*CYCLIC_PREFIX_LENGTH,"","",""); - fl_set_xyplot_data(form->channel_t_im,sig_time,mag_sig2,2*CYCLIC_PREFIX_LENGTH,"","",""); - - cum_avg = 0; - ind = 0; - - for (k=0; kscatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->channel_f,30,70); - fl_set_xyplot_data(form->channel_f,sig_time,mag_sig,NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS,"","",""); - j=0; - - if (sach_flag==0) // CHBCH or MRBCH - for (i=0; i<256*length; i+=2) { - - if ((i%256) == 80) - i+=96; - - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[antenna_idx][4*i]); //+rx_sig_f2[1][4*i]); - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[antenna_idx][1+(4*i)]); //+rx_sig_f2[1][1+(4*i)]); - - } - else { - for (i=0; i<256*length; i++) { - - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[0][4*i]+rx_sig_f2[1][4*i]); - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[0][1+(4*i)]+rx_sig_f2[1][1+(4*i)]); - } - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->demod_out,-4096,4096); - fl_set_xyplot_data(form->demod_out,sig_time,mag_sig,160*length,"","",""); - - - j=0; - - for (i=0; i<(length-1)*160*2; i++) { - - sig_time[j] = (float)j; - mag_sig[j++] = (float)demod_data[i]; - sig_time[j] = (float)j; - mag_sig[j++] = (float)demod_data[i]; - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->decoder_input,-10,10); - - if (length == 8) - fl_set_xyplot_data(form->decoder_input,sig_time,mag_sig,2*160*8,"","",""); - else - fl_set_xyplot_data(form->decoder_input,sig_time,&mag_sig[384],384,"","",""); - - j=0; - - if (sach_flag == 0) - for (i=0; i<256*length; i+=2) { - - if ((i%256) == 0) - i+= 16; - - if ((i%256) == 40) - i+=226; - - - Re = .5*(float)(rx_sig_f2[antenna_idx][4*i]); // + rx_sig_f2[1][4*i]); - Im = .5*(float)(rx_sig_f2[antenna_idx][1+(4*i)]); //+ rx_sig_f2[1][1+(4*i)]); - - scat_sig_re[j] = Re; - scat_sig_im[j] = Im; - j++; - - - } - else { - for (i=0; i<256*length; i+=2) { - - if ((i%160) == 0) - i+= 16; - - if ((i%160) == 40) - i+=120; - - - Re = .5*(float)(rx_sig_f3[0][2*i] + rx_sig_f3[1][2*i]); - Im = .5*(float)(rx_sig_f3[0][1+(2*i)] + rx_sig_f3[1][1+(2*i)]); - - scat_sig_re[j] = Re; - scat_sig_im[j] = Im; - j++; - } - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,j,"","",""); - fl_set_xyplot_ybounds(form->scatter_plot,-4096,4096); - fl_set_xyplot_xbounds(form->scatter_plot,-4096,4096); - fl_set_xyplot_data(form->scatter_plot,scat_sig_re,scat_sig_im,j,"","",""); - - for (i=0; i<(NUMBER_OF_OFDM_CARRIERS+CYCLIC_PREFIX_LENGTH)*NUMBER_OF_SYMBOLS_PER_FRAME; i++) { - sig_time[i] = (float)i; - mag_sig[i] = (float)(rx_sig[0][2*i]); - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->control_miniframe,-1024,1024); - fl_set_xyplot_data(form->control_miniframe,sig_time,mag_sig,(NUMBER_OF_OFDM_CARRIERS+CYCLIC_PREFIX_LENGTH),"","",""); - - //plot inverse determinant - if(sach_flag==0) { - for (i=0; ideterm,carriers,det,NUMBER_OF_OFDM_CARRIERS,"","",""); - fl_set_xyplot_ybounds(form->determ,0,50); - fl_set_xyplot_data(form->ideterm,carriers,idet,NUMBER_OF_OFDM_CARRIERS,"","",""); - fl_set_xyplot_ybounds(form->ideterm,0,50); - } - - usleep(10000); -} -//----------------------------------------------------------------------------- -do_scope() -{ - - //----------------------------------------------------------------------------- - char ch; - - fl_set_idle_callback(chbch_scope_idle_callback, NULL); - fl_do_forms() ; /* SIGSCOPE */ - - - -} - -//----------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - //----------------------------------------------------------------------------- - - int openair_fd,i; - unsigned int mem_base; - unsigned int first_symbol; - char title[20]; - - if (argc<4) { - printf("Not enough arguments (transport_channel nb_tx_antennas chsch_index (only relevant for bch))\n"); - printf("0=CHBCH 1=RACH 2=DCCH/SACH 3=MRBCH\n"); - exit(-1); - } - - PHY_vars = malloc(sizeof(PHY_VARS)); - - PHY_config = malloc(sizeof(PHY_CONFIG)); - /* - if((config = fopen("./widens_config.cfg","r")) == NULL) // this can be configured - { - printf("[Main USER] The widens configuration file could not be found!"); - exit(0); - } - - if ((scenario= fopen("./widens_scenario.scn","r")) ==NULL) - { - printf("[Main USER] The widens scenario file could not be found!"); - exit(0); - } - - printf("Opened configuration files\n"); - - reconfigure_MACPHY(scenario); - */ - - printf("Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDONLY)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - printf("Getting PHY_vars ...\n"); - - ioctl(openair_fd,openair_GET_VARS,PHY_vars); - - printf("Getting PHY_vars->tx_vars[0].TX_DMA_BUFFER=%p\n",PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("Getting PHY_config ...\n"); - - ioctl(openair_fd,openair_GET_CONFIG,PHY_config); - - printf("PHY_vars chbch_data.rx_vars[0].RX_DMA_BUFFER = %p\n",PHY_vars->rx_vars[0].RX_DMA_BUFFER); - printf("PHY_vars chsch_data.chsch_channel[0] = %p\n",PHY_vars->chsch_data[1].channel[0]); - printf("PHY_vars chsch_data.chsch_channel_f[0] = %p\n",PHY_vars->chsch_data[1].channel_f[0]); - printf("PHY_vars chbch_data.rx_sig_f2[0] = %p\n",PHY_vars->chbch_data[1].rx_sig_f2[0]); - - printf("NUMBER_OF_OFDM_CARRIERS = %d\n",NUMBER_OF_OFDM_CARRIERS); - - - mem_base = mmap(0, - 2048*4096, - PROT_READ, - MAP_PRIVATE, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %p\n",mem_base); - else - msg("Could not map physical memory\n"); - - if (atoi(argv[1]) == 0) { // CHBCH - for (i=0; ichsch_data[atoi(argv[3])].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->chsch_data[atoi(argv[3])].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig[i] = (short *)(mem_base + (unsigned int)PHY_vars->rx_vars[i].RX_DMA_BUFFER-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p,rx_sig_f2[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i],i,rx_sig_f2[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - determ = (int *)(mem_base + (unsigned int)PHY_vars->chsch_data[1].det - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - ideterm = (short *)(mem_base + (unsigned int)PHY_vars->chsch_data[1].idet - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 8; - sach_flag = 0; - - if (atoi(argv[3])==2) - antenna_idx=1; - else - antenna_idx=0; - } else if (atoi(argv[1]) == 1) { // RACH - for (i=0; isch_data[0].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[0].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - first_symbol = 2+(NUMBER_OF_SYMBOLS_PER_FRAME>>1); - rx_sig[i] = (short *)(mem_base + - (unsigned int)&PHY_vars->rx_vars[i].RX_DMA_BUFFER[(first_symbol<tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i]); - rx_sig_f3[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f3[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->sach_data[0].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 1; - sach_flag = 1; - } else if (atoi(argv[1]) == 2) { // DCCH/SACH - for (i=0; isch_data[1].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[1].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - first_symbol = 8+(NUMBER_OF_SYMBOLS_PER_FRAME>>1); - rx_sig[i] = (short *)(mem_base + - (unsigned int)&PHY_vars->rx_vars[i].RX_DMA_BUFFER[(first_symbol<tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f3[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f3[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->sach_data[1].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("demod_data = %p\n",demod_data); - - length = 20; - sach_flag = 1; - } else if (atoi(argv[1]) == 3) { // MRBCH - for (i=0; isch_data[MRSCH_INDEX].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[MRSCH_INDEX].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig[i] = (short *)(mem_base + (unsigned int)PHY_vars->rx_vars[i].RX_DMA_BUFFER-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p,rx_sig_f2[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i],i,rx_sig_f2[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 1; - sach_flag = 0; - } - - else { - printf("Unknown command %d\n",atoi(argv[1])); - close(openair_fd); - exit(-1); - - } - - nb_tx_ant = atoi(argv[2]); - - for (i=0; i<16; i++) - printf("%x\n",rx_sig[0][i]); - - sprintf(title, "CHBCH SCOPE %d %d %d", atoi(argv[1]), atoi(argv[2]), atoi(argv[3])), - - fl_initialize(&argc, argv, title, 0, 0); /* SIGSCOPE */ - form = create_form_chbch_scope(); /* SIGSCOPE */ - fl_show_form(form->chbch_scope,FL_PLACE_HOTSPOT,FL_FULLBORDER,title); /* SIGSCOPE */ - - do_scope(); - sleep(5); - close(openair_fd); - return(0); -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_ml.c b/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_ml.c deleted file mode 100644 index 0e765d57c2..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_ml.c +++ /dev/null @@ -1,446 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include "forms.h" -#include "chbch_scope.h" - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -#include "PHY/CONFIG/vars.h" -#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - - -FD_chbch_scope *form; - - -//short channel[2048]; -//short channel_f[2048]; -//char demod_data[2048]; - -short *channel[4],*channel_f[4],*rx_sig[4],*rx_sig_f2[4],*rx_sig_f3[4],*sach_data,*magh[4]; -char *demod_data,*rx_sig_f4; - -int length,offset; -float avg=1; -int sach_flag; - -unsigned char nb_tx_ant; - -SACH_DIAGNOSTICS *sach_diag; - - -void chbch_scope_idle_callback(void) -{ - - int i,j,ind,k; - - float Re,Im,mag_sig[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],mag_h[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - mag_sig2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],sig_time[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_re[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],scat_sig_im[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_re2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8],scat_sig_im2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8]; - - float cum_avg; - - unsigned short nb_sach_carriers; - - for (i=0; i<2*CYCLIC_PREFIX_LENGTH; i++) { - sig_time[i] = (float)i; - Re = (float)(channel[0][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 4*i]); - Im = (float)(channel[0][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 1+(4*i)]); - mag_sig[i] = 10*log10(1+Re*Re + Im*Im); - Re = (float)(channel[1][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 4*i]); - Im = (float)(channel[1][4*(NUMBER_OF_OFDM_CARRIERS - 2*CYCLIC_PREFIX_LENGTH) + 1+(4*i)]); - mag_sig2[i] = 10*log10(1+Re*Re + Im*Im); - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->channel_t_re,30,80); - fl_set_xyplot_ybounds(form->channel_t_im,30,80); - fl_set_xyplot_data(form->channel_t_re,sig_time,mag_sig,2*CYCLIC_PREFIX_LENGTH,"","",""); - fl_set_xyplot_data(form->channel_t_im,sig_time,mag_sig2,2*CYCLIC_PREFIX_LENGTH,"","",""); - - cum_avg = 0; - ind = 0; - - for (k=0; kscatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->channel_f,30,70); - fl_set_xyplot_data(form->channel_f,sig_time,mag_sig,NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS,"","",""); - j=0; - - if (sach_flag==0) // CHBCH or MRBCH - for (i=0; i<256*length; i+=2) { - - if ((i%256) == 80) - i+=96; - - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[1][2*i]); - sig_time[j] = (float)j; - mag_sig[j++] = (float)(rx_sig_f2[1][1+(2*i)]); - - } - else { - nb_sach_carriers = (sach_diag->nb_sach_carriers < 4096) ? sach_diag->nb_sach_carriers : 4096; - - for (i=0; i 3) { - - sig_time[j] = (float)j; - mag_sig[j] = (float)(sach_data[i]); - mag_h[j++] = (float)((magh[0][i]/2)+(magh[1][i]/2)); - mag_sig[j] = (float)(sach_data[1+i]); - mag_h[j++] = -(float)((magh[0][i]/2)+(magh[1][i]/2)); - - } - } - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->demod_out,-1024,1024); - fl_set_xyplot_data(form->demod_out,sig_time,mag_sig,j,"","",""); - fl_add_xyplot_overlay(form->demod_out,1,sig_time,mag_h,j,FL_BLUE); - - j=0; - - for (i=0; i<(length-1)*160*2; i++) { - - sig_time[j] = (float)j; - mag_sig[j++] = (float)demod_data[i]; - sig_time[j] = (float)j; - mag_sig[j++] = (float)demod_data[i]; - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,136,"","",""); - fl_set_xyplot_ybounds(form->decoder_input,-10,10); - - if (length == 8) - fl_set_xyplot_data(form->decoder_input,sig_time,mag_sig,2*160*8,"","",""); - else - fl_set_xyplot_data(form->decoder_input,sig_time,&mag_sig[384],384,"","",""); - - j=0; - - if (sach_flag == 0) - for (i=10; i<256*length; i+=2) { - - if ((i%256) == 80) //skip the zero carriers - i+=96; - - if ((i%256) == 246) //skip the DC - i+=20; - - Re = (float)(rx_sig_f2[1][2*i]); - Im = (float)(rx_sig_f2[1][1+(2*i)]); - - scat_sig_re[j] = Re; - scat_sig_im[j] = Im; - - Re = (float)(rx_sig_f2[1][2*(i+1)]); - Im = (float)(rx_sig_f2[1][1+(2*(i+1))]); - - scat_sig_re2[j] = Re; - scat_sig_im2[j] = Im; - - j++; - - - } - else { - - nb_sach_carriers = (sach_diag->nb_sach_carriers < 4096) ? sach_diag->nb_sach_carriers : 4096; - - for (i=0; i 3) { - Re = (float)sach_data[i]; - Im = (float)sach_data[1+i]; - - scat_sig_re[j] = Re; - scat_sig_im[j] = Im; - - Re = (float)sach_data[i+2]; - Im = (float)sach_data[i+3]; - scat_sig_re2[j] = Re; - scat_sig_im2[j] = Im; - j++; - } - } - } - - //fl_set_xyplot_data(form->scatter_sig,real_mf,imag_mf,j,"","",""); - //fl_set_xyplot_ybounds(form->scatter_plot,-1024,1024); - //fl_set_xyplot_xbounds(form->scatter_plot,-1024,1024); - //fl_set_xyplot_ybounds(form->scatter_plot2,-1024,1024); - //fl_set_xyplot_xbounds(form->scatter_plot2,-1024,1024); - fl_set_xyplot_data(form->scatter_plot,scat_sig_re,scat_sig_im,j,"","",""); - fl_set_xyplot_data(form->scatter_plot2,scat_sig_re2,scat_sig_im2,j,"","",""); - - - usleep(10000); -} -//----------------------------------------------------------------------------- -do_scope() -{ - - //----------------------------------------------------------------------------- - char ch; - - fl_set_idle_callback(chbch_scope_idle_callback, NULL); - fl_do_forms() ; /* SIGSCOPE */ - - - -} - -//----------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - //----------------------------------------------------------------------------- - - int openair_fd,i; - unsigned int mem_base; - unsigned int first_symbol; - char title[20]; - - if (argc<4) { - printf("Not enough arguments (transport_channel nb_tx_antennas chsch_index (only relevant for bch))\n"); - printf("0=CHBCH 1=RACH 2=DCCH/SACH 3=MRBCH\n"); - exit(-1); - } - - PHY_vars = malloc(sizeof(PHY_VARS)); - - PHY_config = malloc(sizeof(PHY_CONFIG)); - /* - if((config = fopen("./widens_config.cfg","r")) == NULL) // this can be configured - { - printf("[Main USER] The widens configuration file could not be found!"); - exit(0); - } - - if ((scenario= fopen("./widens_scenario.scn","r")) ==NULL) - { - printf("[Main USER] The widens scenario file could not be found!"); - exit(0); - } - - printf("Opened configuration files\n"); - - reconfigure_MACPHY(scenario); - */ - - printf("Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDONLY)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - printf("Getting PHY_vars ...\n"); - - ioctl(openair_fd,openair_GET_VARS,PHY_vars); - - printf("Getting PHY_vars->tx_vars[0].TX_DMA_BUFFER=%p\n",PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("Getting PHY_config ...\n"); - - ioctl(openair_fd,openair_GET_CONFIG,PHY_config); - - printf("PHY_vars chbch_data.rx_vars[0].RX_DMA_BUFFER = %p\n",PHY_vars->rx_vars[0].RX_DMA_BUFFER); - printf("PHY_vars chsch_data.chsch_channel[0] = %p\n",PHY_vars->chsch_data[1].channel[0]); - printf("PHY_vars chsch_data.chsch_channel_f[0] = %p\n",PHY_vars->chsch_data[1].channel_f[0]); - printf("PHY_vars chbch_data.rx_sig_f2[0] = %p\n",PHY_vars->chbch_data[1].rx_sig_f2[0]); - - printf("NUMBER_OF_OFDM_CARRIERS = %d\n",NUMBER_OF_OFDM_CARRIERS); - - - mem_base = mmap(0, - 2048*4096, - PROT_READ, - MAP_PRIVATE, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %p\n",mem_base); - else - msg("Could not map physical memory\n"); - - if (atoi(argv[1]) == 0) { // CHBCH - for (i=0; ichsch_data[atoi(argv[3])].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->chsch_data[atoi(argv[3])].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig[i] = (short *)(mem_base + (unsigned int)PHY_vars->rx_vars[i].RX_DMA_BUFFER-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p,rx_sig_f2[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i],i,rx_sig_f2[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->chbch_data[atoi(argv[3])].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 8; - sach_flag = 0; - } else if (atoi(argv[1]) == 1) { // RACH - for (i=0; isch_data[0].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[0].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - first_symbol = 2+(NUMBER_OF_SYMBOLS_PER_FRAME>>1); - rx_sig[i] = (short *)(mem_base + - (unsigned int)&PHY_vars->rx_vars[i].RX_DMA_BUFFER[(first_symbol<tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i]); - rx_sig_f3[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f3[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->sach_data[0].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->sach_data[0].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 1; - sach_flag = 1; - } else if (atoi(argv[1]) == 2) { // DCCH/SACH - for (i=0; isch_data[1].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[1].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - first_symbol = 8+(NUMBER_OF_SYMBOLS_PER_FRAME>>1); - rx_sig[i] = (short *)(mem_base + - (unsigned int)&PHY_vars->rx_vars[i].RX_DMA_BUFFER[(first_symbol<tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - magh[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].mag_channel_f_16qam[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f3[i] = (short *)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f3[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i]); - - - } - - sach_data = (short *)(mem_base + (unsigned int)PHY_vars->Sach_diagnostics[0][1].sach_demod_data-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - sach_diag = &PHY_vars->Sach_diagnostics[0][1]; - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->sach_data[1].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->sach_data[1].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("demod_data = %p\n",demod_data); - - length = 20; - sach_flag = 1; - } else if (atoi(argv[1]) == 3) { // MRBCH - for (i=0; isch_data[MRSCH_INDEX].channel[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - channel_f[i] = (short*)(mem_base + (unsigned int)PHY_vars->sch_data[MRSCH_INDEX].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig[i] = (short *)(mem_base + (unsigned int)PHY_vars->rx_vars[i].RX_DMA_BUFFER-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - rx_sig_f2[i] = (short *)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].rx_sig_f2[i]-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel[%d] = %p,channel_f[%d]=%p,rx_sig[%d]=%p,rx_sig_f2[%d]=%p\n",i,channel[i],i,channel_f[i],i,rx_sig[i],i,rx_sig_f2[i]); - } - - rx_sig_f4 = (char*)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].rx_sig_f4 - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - demod_data = (char *)(mem_base + (unsigned int)PHY_vars->mrbch_data[0].demod_data - (unsigned int)PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - length = 1; - sach_flag = 0; - } - - else { - printf("Unknown command %d\n",atoi(argv[1])); - close(openair_fd); - exit(-1); - - } - - nb_tx_ant = atoi(argv[2]); - - for (i=0; i<16; i++) - printf("%x\n",rx_sig[0][i]); - - sprintf(title, "CHBCH SCOPE %d %d %d", atoi(argv[1]), atoi(argv[2]), atoi(argv[3])), - - fl_initialize(&argc, argv, title, 0, 0); /* SIGSCOPE */ - form = create_form_chbch_scope(); /* SIGSCOPE */ - fl_show_form(form->chbch_scope,FL_PLACE_HOTSPOT,FL_FULLBORDER,title); /* SIGSCOPE */ - - do_scope(); - sleep(5); - close(openair_fd); - return(0); -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.c b/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.c deleted file mode 100644 index 8979dabbde..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.c +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* Form definition file generated with fdesign. */ - -#include "forms.h" -#include -#include "chbch_2streams_scope.h" - -FD_chbch_scope *create_form_chbch_scope(void) -{ - FL_OBJECT *obj; - FD_chbch_scope *fdui = (FD_chbch_scope *) fl_calloc(1, sizeof(*fdui)); - - fdui->chbch_scope = fl_bgn_form(FL_NO_BOX, 830, 650); - obj = fl_add_box(FL_ROUNDED_BOX,0,0,830,650,""); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->control_miniframe = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,600,220,190,180,"Control Miniframe"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_DARKORANGE); - fdui->channel_t_re = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,20,20,280,100,"Time-Domain Channel (Real Component)"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->scatter_plot = obj = fl_add_xyplot(FL_POINTS_XYPLOT,600,20,190,190,"Scatter Plot"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_GREEN); - fdui->demod_out = obj = fl_add_xyplot(FL_POINTS_XYPLOT,20,420,570,180,"Demodulator Output"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fdui->channel_f = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,20,140,570,90,"Frequency Bin Response"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->channel_t_im = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,310,20,280,100,"Time-Domain Channel (Imaginaryl Component)"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->decoder_input = obj = fl_add_xyplot(FL_POINTS_XYPLOT,20,240,570,170,"Decoder Input"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_CYAN); - fdui->determ = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,600,410,190,90,"determ"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_MAGENTA); - fdui->ideterm = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,600,510,190,90,"ideterm"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_MAGENTA); - fl_end_form(); - - fdui->chbch_scope->fdui = fdui; - - return fdui; -} -/*---------------------------------------*/ - diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.fd b/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.fd deleted file mode 100644 index 0c55d9f15e..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.fd +++ /dev/null @@ -1,196 +0,0 @@ -Magic: 13000 - -Internal Form Definition File - (do not change) - -Number of forms: 1 -Unit of measure: FL_COORD_PIXEL - -=============== FORM =============== -Name: chbch_scope -Width: 830 -Height: 650 -Number of Objects: 10 - --------------------- -class: FL_BOX -type: ROUNDED_BOX -box: 0 0 830 650 -boxtype: FL_ROUNDED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 600 220 190 180 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_DARKORANGE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Control Miniframe -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: control_miniframe -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 20 20 280 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Time-Domain Channel (Real Component) -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_re -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 600 20 190 190 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 20 420 570 180 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Demodulator Output -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: demod_out -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 20 140 570 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Frequency Bin Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_f -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 310 20 280 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Time-Domain Channel (Imaginaryl Component) -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_im -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 20 240 570 170 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_CYAN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Decoder Input -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: decoder_input -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 600 410 190 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_MAGENTA -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: determ -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: determ -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 600 510 190 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_MAGENTA -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: ideterm -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: ideterm -callback: -argument: - -============================== -create_the_forms diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.h b/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.h deleted file mode 100644 index 949f4e91a5..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_2streams_scope.h +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/** Header file generated with fdesign on Tue Nov 4 16:26:49 2008.**/ - -#ifndef FD_chbch_scope_h_ -#define FD_chbch_scope_h_ - -/** Callbacks, globals and object handlers **/ - - -/**** Forms and Objects ****/ -typedef struct { - FL_FORM *chbch_scope; - void *vdata; - char *cdata; - long ldata; - FL_OBJECT *control_miniframe; - FL_OBJECT *channel_t_re; - FL_OBJECT *scatter_plot; - FL_OBJECT *demod_out; - FL_OBJECT *channel_f; - FL_OBJECT *channel_t_im; - FL_OBJECT *decoder_input; - FL_OBJECT *determ; - FL_OBJECT *ideterm; -} FD_chbch_scope; - -extern FD_chbch_scope * create_form_chbch_scope(void); - -#endif /* FD_chbch_scope_h_ */ diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.c b/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.c deleted file mode 100644 index 26de5c1299..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.c +++ /dev/null @@ -1,71 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* Form definition file generated with fdesign. */ - -#include "forms.h" -#include -#include "chbch_scope.h" - -FD_chbch_scope *create_form_chbch_scope(void) -{ - FL_OBJECT *obj; - FD_chbch_scope *fdui = (FD_chbch_scope *) fl_calloc(1, sizeof(*fdui)); - - fdui->chbch_scope = fl_bgn_form(FL_NO_BOX, 830, 650); - obj = fl_add_box(FL_ROUNDED_BOX,0,0,830,650,""); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->channel_t_re = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,20,20,280,100,"Time-Domain Channel (Real Component)"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->scatter_plot = obj = fl_add_xyplot(FL_POINTS_XYPLOT,600,20,160,190,"Scatter Plot"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_GREEN); - fdui->demod_out = obj = fl_add_xyplot(FL_POINTS_XYPLOT,20,420,770,180,"Demodulator Output"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fdui->channel_f = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,20,140,570,90,"Frequency Bin Response"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->channel_t_im = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,310,20,280,100,"Time-Domain Channel (Imaginaryl Component)"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->decoder_input = obj = fl_add_xyplot(FL_POINTS_XYPLOT,20,240,570,170,"Decoder Input"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_CYAN); - fdui->scatter_plot2 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,600,220,160,190,"Scatter Plot"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_GREEN); - fl_end_form(); - - fdui->chbch_scope->fdui = fdui; - - return fdui; -} -/*---------------------------------------*/ - diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.fd b/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.fd deleted file mode 100644 index f20fef5f43..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.fd +++ /dev/null @@ -1,160 +0,0 @@ -Magic: 13000 - -Internal Form Definition File - (do not change) - -Number of forms: 1 -Unit of measure: FL_COORD_PIXEL - -=============== FORM =============== -Name: chbch_scope -Width: 830 -Height: 650 -Number of Objects: 8 - --------------------- -class: FL_BOX -type: ROUNDED_BOX -box: 0 0 830 650 -boxtype: FL_ROUNDED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 20 20 280 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Time-Domain Channel (Real Component) -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_re -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 600 20 160 190 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 20 420 770 180 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Demodulator Output -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: demod_out -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 20 140 570 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Frequency Bin Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_f -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 310 20 280 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Time-Domain Channel (Imaginaryl Component) -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_im -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 20 240 570 170 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_CYAN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Decoder Input -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: decoder_input -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 600 220 160 190 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot2 -callback: -argument: - -============================== -create_the_forms diff --git a/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.h b/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.h deleted file mode 100644 index d75b433224..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/chbch_scope.h +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/** Header file generated with fdesign on Wed Nov 12 16:15:50 2008.**/ - -#ifndef FD_chbch_scope_h_ -#define FD_chbch_scope_h_ - -/** Callbacks, globals and object handlers **/ - - -/**** Forms and Objects ****/ -typedef struct { - FL_FORM *chbch_scope; - void *vdata; - char *cdata; - long ldata; - FL_OBJECT *channel_t_re; - FL_OBJECT *scatter_plot; - FL_OBJECT *demod_out; - FL_OBJECT *channel_f; - FL_OBJECT *channel_t_im; - FL_OBJECT *decoder_input; - FL_OBJECT *scatter_plot2; -} FD_chbch_scope; - -extern FD_chbch_scope * create_form_chbch_scope(void); - -#endif /* FD_chbch_scope_h_ */ diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte.c b/openair1/USERSPACE_TOOLS/SCOPE/lte.c deleted file mode 100644 index b497423f91..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte.c +++ /dev/null @@ -1,479 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include "forms.h" -#include "lte_scope.h" - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#include "ARCH/COMMON/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -//#include "PHY/CONFIG/vars.h" -//#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - - -FD_lte_scope *form; - -LTE_DL_FRAME_PARMS *frame_parms; -PHY_VARS_UE *PHY_vars_UE; - -//short channel[2048]; -//short channel_f[2048]; -//char demod_data[2048]; - -short *channel[8],*channel_f[8],*rx_sig[8],**rx_sig_ptr; -short *rx_sig_f[8],**rx_sig_f_ptr; -int *sync_corr; -char *pbch_llr; -short *pbch_comp, *pdcch_comp; -short *dlsch_llr,*dlsch_comp; - -int length,offset; -float avg=1; -int sach_flag; - -unsigned char nb_ant_tx, nb_ant_rx; - - -void lte_scope_idle_callback(void) -{ - - int i,j,ind,k,s; - - float Re,Im; - float mag_sig[NB_ANTENNAS_RX*NB_ANTENNAS_TX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT], - sig_time[NB_ANTENNAS_RX*NB_ANTENNAS_TX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT], - sig2[FRAME_LENGTH_COMPLEX_SAMPLES], - time2[FRAME_LENGTH_COMPLEX_SAMPLES], - I[25*12*12], Q[25*12*12], - //llr[8*(3*8*6144+12)], - //llr_time[8*(3*8*6144+12)]; - llr[25*12*4*7], - llr_time[25*12*4*7]; - - /* - mag_h[NB_ANTENNAS_RX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - mag_sig2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_re[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_im[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_re2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8], - scat_sig_im2[NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT*8]; - */ - float cum_avg; - - // Channel frequency response - cum_avg = 0; - ind = 0; - - for (j=0; j<4; j++) { - for (i=0; isymbols_per_tti*NUMBER_OF_OFDM_CARRIERS;k++){ - for (k=0; kchannel_f,30,70); - fl_set_xyplot_data(form->channel_f,sig_time,mag_sig,ind,"","",""); - - // channel_t_re = sync_corr - for (i=0; ichannel_t_im,10,90); - fl_set_xyplot_data(form->channel_t_im,time2,sig2,FRAME_LENGTH_COMPLEX_SAMPLES,"","",""); - - /* - // channel time resonse - cum_avg = 0; - ind = 0; - for (k=0;k<1;k++){ - for (j=0;j<1;j++) { - - for (i=0;iofdm_symbol_size;i++){ - sig_time[ind] = (float)ind; - Re = (float)(channel[k+2*j][2*i]); - Im = (float)(channel[k+2*j][2*i+1]); - //mag_sig[ind] = (short) rand(); - mag_sig[ind] = (short)10*log10(1.0+((double)Re*Re + (double)Im*Im)); - cum_avg += (short)sqrt((double)Re*Re + (double)Im*Im) ; - ind++; - } - } - } - - //fl_set_xyplot_ybounds(form->channel_t_im,10,90); - fl_set_xyplot_data(form->channel_t_im,sig_time,mag_sig,ind,"","",""); - */ - - // channel_t_re = rx_sig_f[0] - for (i=0; isymbols_per_tti/2; i++) { - sig2[i] = 10*log10(1.0+(double) ((rx_sig[0][2*i])*(rx_sig[0][2*i])+(rx_sig[0][2*i+1])*(rx_sig[0][2*i+1]))); - time2[i] = (float) i; - } - - //fl_set_xyplot_ybounds(form->channel_t_re,10,90); - //fl_set_xyplot_data(form->channel_t_re,&time2[512*12*9],&sig2[512*12*9],512*12,"","",""); - fl_set_xyplot_data(form->channel_t_re,time2,sig2,FRAME_LENGTH_COMPLEX_SAMPLES,"","",""); - - - // channel_t_im = rx_sig[1] - if (nb_ant_rx>1) { - for (i=0; isymbols_per_tti/2; i++) { - sig2[i] = 10*log10(1.0+(double) ((rx_sig[1][2*i])*(rx_sig[1][2*i])+(rx_sig[1][2*i+1])*(rx_sig[1][2*i+1]))); - time2[i] = (float) i; - } - - //fl_set_xyplot_ybounds(form->channel_t_im,0,100); - //fl_set_xyplot_data(form->channel_t_im,&time2[512*12*9],&sig2[512*12*9],512*12,"","",""); - fl_set_xyplot_data(form->channel_t_im,time2,sig2,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,"","",""); - } - - // PBCH LLR - j=0; - - for(i=0; i<1920; i++) { - llr[j] = (float) pbch_llr[i]; - llr_time[j] = (float) j; - /* - if (i==63) - i=127; - else if (i==191) - i=319; - */ - j++; - } - - fl_set_xyplot_data(form->decoder_input,llr_time,llr,1920,"","",""); - //fl_set_xyplot_ybounds(form->decoder_input,-100,100); - - // PBCH I/Q - j=0; - - for(i=0; i<12*12; i++) { - I[j] = pbch_comp[2*i]; - Q[j] = pbch_comp[2*i+1]; - j++; - /* - if (i==47) - i=96; - else if (i==191) - i=239; - */ - } - - fl_set_xyplot_data(form->scatter_plot,I,Q,12*12,"","",""); - //fl_set_xyplot_xbounds(form->scatter_plot,-100,100); - //fl_set_xyplot_ybounds(form->scatter_plot,-100,100); - - // PDCCH I/Q - j=0; - - for(i=0; i<12*25*3; i++) { - I[j] = pdcch_comp[2*i]; - Q[j] = pdcch_comp[2*i+1]; - j++; - /* - if (i==47) - i=96; - else if (i==191) - i=239; - */ - } - - fl_set_xyplot_data(form->scatter_plot1,I,Q,12*25*3,"","",""); - //fl_set_xyplot_xbounds(form->scatter_plot,-100,100); - //fl_set_xyplot_ybounds(form->scatter_plot,-100,100); - - // DLSCH LLR - for(i=0; i<12*12*7*2; i++) { - llr[i] = (float) dlsch_llr[i]; - llr_time[i] = (float) i; - } - - fl_set_xyplot_data(form->demod_out,llr_time,llr,12*12*7*2,"","",""); - // fl_set_xyplot_data(form->demod_out,time2,llr,25*12*4,"","",""); - fl_set_xyplot_ybounds(form->demod_out,-500,500); - - // DLSCH I/Q - j=0; - - for (s=2; s<12; s++) { - for(i=0; i<12*12; i++) { - I[j] = dlsch_comp[(2*25*12*s)+2*i]; - Q[j] = dlsch_comp[(2*25*12*s)+2*i+1]; - j++; - } - - if (s==2) - s=3; - else if (s==5) - s=6; - else if (s==8) - s=9; - } - - fl_set_xyplot_data(form->scatter_plot2,I,Q,j,"","",""); - //fl_set_xyplot_xbounds(form->scatter_plot2,-100,100); - //fl_set_xyplot_ybounds(form->scatter_plot2,-100,100); - - usleep(500000); -} -//----------------------------------------------------------------------------- -do_scope() -{ - - //----------------------------------------------------------------------------- - char ch; - - fl_set_idle_callback(lte_scope_idle_callback, NULL); - fl_do_forms() ; /* SIGSCOPE */ - - - -} - -//----------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - //----------------------------------------------------------------------------- - - int openair_fd,i,j; - unsigned int mem_base; - unsigned int first_symbol; - char title[20]; - - LTE_UE_DLSCH *lte_ue_dlsch; - LTE_UE_PDCCH *lte_ue_pdcch; - LTE_UE_PBCH *lte_ue_pbch; - unsigned int bigphys_top; - - //PHY_config = malloc(sizeof(PHY_CONFIG)); - //PHY_vars = malloc(sizeof(PHY_VARS)); - - frame_parms = malloc(sizeof(LTE_DL_FRAME_PARMS)); - PHY_vars_UE = malloc(sizeof(PHY_VARS_UE)); - - printf("Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDONLY)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - printf("Getting PHY_config ...\n"); - ioctl(openair_fd,openair_GET_CONFIG,frame_parms); - dump_frame_parms(frame_parms); - - printf("Getting PHY_vars ...\n"); - ioctl(openair_fd,openair_GET_VARS,PHY_vars_UE); - - if (PHY_vars_UE->lte_ue_common_vars.txdataF == NULL) { - printf("Problem getting PHY_vars. Is UE configured?\n"); - exit(-1); - } - - printf("Getting BIGPHYS_top ...\n"); - ioctl(openair_fd,openair_GET_BIGPHYSTOP,(void *)&bigphys_top); - - printf("Bigphys_top = %p\n",bigphys_top); - printf("TX_DMA_BUFFER = %p\n",PHY_vars_UE->lte_ue_common_vars.txdataF); - printf("RX_DMA_BUFFER = %p\n",PHY_vars_UE->lte_ue_common_vars.rxdata); - printf("PHY_vars->lte_ue_common_vars.dl_ch_estimates[0] = %p\n",PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates[0]); - printf("PHY_vars->lte_ue_common_vars.sync_corr = %p\n",PHY_vars_UE->lte_ue_common_vars.sync_corr); - printf("PHY_vars->lte_ue_pbch_vars[0] = %p\n",PHY_vars_UE->lte_ue_pbch_vars[0]); - printf("PHY_vars->lte_ue_pdcch_vars[0] = %p\n",PHY_vars_UE->lte_ue_pdcch_vars[0]); - printf("PHY_vars->lte_ue_dlsch_vars[0] = %p\n",PHY_vars_UE->lte_ue_dlsch_vars[0]); - - printf("NUMBER_OF_OFDM_CARRIERS = %d\n",NUMBER_OF_OFDM_CARRIERS); - - nb_ant_tx = PHY_vars_UE->lte_frame_parms.nb_antennas_tx; - nb_ant_rx = PHY_vars_UE->lte_frame_parms.nb_antennas_rx; - printf("(TX, RX) ANTENNAS = %d, %d\n",nb_ant_tx,nb_ant_rx); - - mem_base = (unsigned int) mmap(0, - BIGPHYS_NUMPAGES*4096, - PROT_READ, - MAP_PRIVATE, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %x\n",mem_base); - else - msg("Could not map physical memory\n"); - - // txdata0 = (int *)(mem_base + PHY_vars_UE->lte_ue_common_vars.txdataF) - - for (i=0; ilte_ue_common_vars.dl_ch_estimates[0] + - 8*sizeof(int*) + - (j+i*4)*(frame_parms->symbols_per_tti*sizeof(int)*frame_parms->ofdm_symbol_size) - - bigphys_top); - - channel[(j<<1)+i] = (short*)(mem_base + - (unsigned int)PHY_vars_UE->lte_ue_common_vars.dl_ch_estimates_time + - 8*sizeof(int*) + - (j+i*4)*(frame_parms->symbols_per_tti*sizeof(int)*frame_parms->ofdm_symbol_size) - - bigphys_top); - } - - // fix this for visualizing more than 1 antenna!!! - rx_sig_ptr = (short **)(mem_base + - (unsigned int)PHY_vars_UE->lte_ue_common_vars.rxdata - - bigphys_top); - rx_sig[i] = (short *)(mem_base + - (unsigned int)rx_sig_ptr[i] - - bigphys_top); - - rx_sig_f_ptr = (short **)(mem_base + - (unsigned int)PHY_vars_UE->lte_ue_common_vars.rxdataF - - bigphys_top); - rx_sig_f[i] = (short *)(mem_base + - (unsigned int)rx_sig_f_ptr[i] - - bigphys_top); - } - - sync_corr = (int*)(mem_base + - (unsigned int)PHY_vars_UE->lte_ue_common_vars.sync_corr - - bigphys_top); - printf("sync_corr = %p\n", sync_corr); - - // only if UE - lte_ue_pbch = (LTE_UE_PBCH *) (mem_base + - (unsigned int)PHY_vars_UE->lte_ue_pbch_vars[0] - - bigphys_top); - - printf("lte_ue_pbch (kernel) = %p\n",PHY_vars_UE->lte_ue_pbch_vars[0]); - printf("lte_ue_pbch (local)= %p\n",lte_ue_pbch); - - pbch_comp = (short*)(mem_base + - (unsigned int)lte_ue_pbch->rxdataF_comp + - 8*sizeof(int*) + - 8*sizeof(short*) -// because there is dl_ch_estimates_ext allocated in between - bigphys_top); - - - pbch_llr = (char*) (mem_base + - (unsigned int)lte_ue_pbch->llr - - bigphys_top); - - printf("pbch_comp = %p\n",pbch_comp); - printf("pbch_llr= %p\n",pbch_llr); - - lte_ue_pdcch = (LTE_UE_PDCCH *) (mem_base + - (unsigned int)PHY_vars_UE->lte_ue_pdcch_vars[0] - - bigphys_top); - - printf("lte_ue_pdcch (kernel) = %p\n",PHY_vars_UE->lte_ue_pdcch_vars[0]); - printf("lte_ue_pdcch (local)= %p\n",lte_ue_pdcch); - - pdcch_comp = (short*)(mem_base + - (unsigned int)lte_ue_pdcch->rxdataF_comp + - 8*sizeof(int*) - - bigphys_top); - - printf("pdcch_comp = %p\n",pdcch_comp); - - - lte_ue_dlsch = (LTE_UE_DLSCH *) (mem_base + - (unsigned int)PHY_vars_UE->lte_ue_dlsch_vars[0] - - bigphys_top); - - printf("lte_ue_dlsch (kernel)= %p\n",PHY_vars_UE->lte_ue_dlsch_vars[0]); - printf("lte_ue_dlsch (local) = %p\n",lte_ue_dlsch); - - dlsch_comp = (short*)(mem_base + - (unsigned int)lte_ue_dlsch->rxdataF_comp + - 8*sizeof(int*) - - bigphys_top); - - dlsch_llr = (short*) (mem_base + - (unsigned int)lte_ue_dlsch->llr[0] - - bigphys_top); - - printf("dlsch_comp = %p\n",dlsch_comp); - printf("dlsch_llr = %p\n",dlsch_llr); - - sprintf(title, "LTE SCOPE"), - - fl_initialize(&argc, argv, title, 0, 0); /* SIGSCOPE */ - form = create_form_lte_scope(); /* SIGSCOPE */ - fl_show_form(form->lte_scope,FL_PLACE_HOTSPOT,FL_FULLBORDER,title); /* SIGSCOPE */ - - do_scope(); - sleep(5); - close(openair_fd); - return(0); -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.c b/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.c deleted file mode 100644 index 6042e97bc2..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.c +++ /dev/null @@ -1,107 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* Form definition file generated by fdesign */ - -#include -#include "lte_scope.h" - - -/*************************************** - ***************************************/ - -FD_lte_scope * -create_form_lte_scope( void ) -{ - FL_OBJECT *obj; - FD_lte_scope *fdui = fl_malloc( sizeof *fdui ); - - fdui->vdata = fdui->cdata = NULL; - fdui->ldata = 0; - - fdui->lte_scope = fl_bgn_form( FL_NO_BOX, 780, 723 ); - - obj = fl_add_box( FL_ROUNDED_BOX, 0, 0, 780, 723, "" ); - fl_set_object_color( obj, FL_BLACK, FL_BLUE ); - - fdui->channel_t_re = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 20, 280, 100, "Received Signal (Time-Domain, dB)" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_BLUE ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->scatter_plot = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 600, 230, 160, 190, "PBCH Scatter Plot" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_GREEN ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->channel_f = obj = fl_add_xyplot( FL_IMPULSE_XYPLOT, 20, 140, 570, 90, "Frequency Domain Channel Estimate" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_RED ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->channel_t_im = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 310, 20, 280, 100, "Time-Domain Channel Estimate" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_BLUE ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->decoder_input = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 250, 570, 130, "PBCH Decoder Input" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_GREEN ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->scatter_plot2 = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 600, 440, 160, 190, "PDSCH/PUSCH Scatter Plot" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_YELLOW ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->scatter_plot1 = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 600, 20, 160, 190, "PDCCH Scatter Plot" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_CYAN ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->ia_receiver_button = obj = fl_add_button( FL_PUSH_BUTTON, 620, 660, 130, 40, "IA receiver OFF" ); - fl_set_object_lalign( obj, FL_ALIGN_CENTER ); - fl_set_object_color( obj, FL_RED, FL_BLACK); - // fl_set_object_callback( obj, ia_receiver_on_off, 0 ); - - fdui->demod_out = obj = fl_add_xyplot( FL_POINTS_XYPLOT, 20, 400, 570, 140, "PDSCH/PUSCH Decoder Input" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_YELLOW ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fdui->tput = obj = fl_add_xyplot( FL_NORMAL_XYPLOT, 20, 560, 570, 140, "Throughput [kbits/s]" ); - fl_set_object_boxtype( obj, FL_EMBOSSED_BOX ); - fl_set_object_color( obj, FL_BLACK, FL_WHITE ); - fl_set_object_lcolor( obj, FL_WHITE ); - - fl_end_form( ); - - fdui->lte_scope->fdui = fdui; - - return fdui; -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.fd b/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.fd deleted file mode 100644 index 793a0b269f..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.fd +++ /dev/null @@ -1,178 +0,0 @@ -Magic: 13000 - -Internal Form Definition File - (do not change) - -Number of forms: 1 -Unit of measure: FL_COORD_PIXEL - -=============== FORM =============== -Name: lte_scope -Width: 780 -Height: 620 -Number of Objects: 9 - --------------------- -class: FL_BOX -type: ROUNDED_BOX -box: 0 0 780 620 -boxtype: FL_ROUNDED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 20 20 280 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Time-Domain Channel (Real Component) -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_re -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 600 20 160 190 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 20 420 570 180 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Demodulator Output -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: demod_out -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 20 140 570 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Frequency Bin Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_f -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 310 20 280 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Time-Domain Channel (Imaginaryl Component) -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_im -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 20 240 570 170 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_CYAN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Decoder Input -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: decoder_input -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 600 410 160 190 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot2 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 600 215 160 190 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot1 -callback: -argument: - -============================== -create_the_forms diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.h b/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.h deleted file mode 100644 index dac29214c4..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope.h +++ /dev/null @@ -1,59 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* Header file generated by fdesign on Tue Nov 13 09:42:50 2012 */ - -#ifndef FD_lte_scope_h_ -#define FD_lte_scope_h_ - -#include - -extern void ia_receiver_on_off( FL_OBJECT *, long ); - -/* Forms and Objects */ - -typedef struct { - FL_FORM * lte_scope; - void * vdata; - char * cdata; - long ldata; - FL_OBJECT * channel_t_re; - FL_OBJECT * scatter_plot; - FL_OBJECT * channel_f; - FL_OBJECT * channel_t_im; - FL_OBJECT * decoder_input; - FL_OBJECT * scatter_plot2; - FL_OBJECT * scatter_plot1; - FL_OBJECT * ia_receiver_button; - FL_OBJECT * demod_out; - FL_OBJECT * tput; -} FD_lte_scope; - -extern FD_lte_scope * create_form_lte_scope( void ); - -#endif /* FD_lte_scope_h_ */ diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.c b/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.c deleted file mode 100755 index e39754b811..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.c +++ /dev/null @@ -1,92 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* Form definition file generated with fdesign. */ - -#include "forms.h" -#include -#include "lte_scope_ul.h" - -FD_lte_scope *create_form_lte_scope(void) -{ - FL_OBJECT *obj; - FD_lte_scope *fdui = (FD_lte_scope *) fl_calloc(1, sizeof(*fdui)); - - fdui->lte_scope = fl_bgn_form(FL_NO_BOX, 830, 650); - obj = fl_add_box(FL_ROUNDED_BOX,0,0,830,650,""); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fdui->fer = obj = fl_add_text(FL_NORMAL_TEXT,180,570,190,50,"FER ="); - fl_set_object_color(obj,FL_BLACK,FL_LEFT_BCOL); - fl_set_object_lcolor(obj,FL_WHITE); - fl_set_object_lsize(obj,FL_MEDIUM_SIZE); - fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE); - fdui->channel_t_re = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,30,20,370,100,"RX Signal Antenna 0"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fl_set_object_lcolor(obj,FL_RED); - fdui->demod_out = obj = fl_add_xyplot(FL_POINTS_XYPLOT,30,370,600,170,"Demodulator Output"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fl_set_object_lcolor(obj,FL_YELLOW); - fdui->channel_drs_time = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,30,260,370,90,"DRS Time Response"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fl_set_object_lcolor(obj,FL_BLUE); - fdui->channel_t_im = obj = fl_add_xyplot(FL_NORMAL_XYPLOT,430,20,370,100,"RX Signal Antenna 0"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fl_set_object_lcolor(obj,FL_RED); - fdui->scatter_plot2 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,640,370,160,170,"Scatter Plot"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_YELLOW); - fl_set_object_lcolor(obj,FL_YELLOW); - fdui->channel_srs_time = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,30,140,370,100,"SRS Time Response"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_GREEN); - fl_set_object_lcolor(obj,FL_GREEN); - fdui->channel_srs = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,430,140,370,100,"SRS Frequency Response"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_GREEN); - fl_set_object_lcolor(obj,FL_GREEN); - fdui->channel_drs = obj = fl_add_xyplot(FL_IMPULSE_XYPLOT,430,260,370,90,"DRS Frequency Response"); - fl_set_object_boxtype(obj,FL_EMBOSSED_BOX); - fl_set_object_color(obj,FL_BLACK,FL_BLUE); - fl_set_object_lcolor(obj,FL_BLUE); - fdui->rssi = obj = fl_add_text(FL_NORMAL_TEXT,460,570,200,50,"RSSI ="); - fl_set_object_color(obj,FL_BLACK,FL_MCOL); - fl_set_object_lcolor(obj,FL_WHITE); - fl_set_object_lsize(obj,FL_MEDIUM_SIZE); - fl_set_object_lalign(obj,FL_ALIGN_LEFT|FL_ALIGN_INSIDE); - fl_end_form(); - - fdui->lte_scope->fdui = fdui; - - return fdui; -} -/*---------------------------------------*/ - diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.fd b/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.fd deleted file mode 100755 index 8dc0dc159e..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.fd +++ /dev/null @@ -1,214 +0,0 @@ -Magic: 13000 - -Internal Form Definition File - (do not change) - -Number of forms: 1 -Unit of measure: FL_COORD_PIXEL - -=============== FORM =============== -Name: lte_scope -Width: 830 -Height: 650 -Number of Objects: 11 - --------------------- -class: FL_BOX -type: ROUNDED_BOX -box: 0 0 830 650 -boxtype: FL_ROUNDED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_TEXT -type: NORMAL_TEXT -box: 180 570 190 50 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_LEFT_BCOL -alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE -style: FL_NORMAL_STYLE -size: FL_MEDIUM_SIZE -lcol: FL_WHITE -label: FER = -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: fer -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 30 20 370 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_RED -label: RX Signal Antenna 0 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_re -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 30 370 600 170 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_YELLOW -label: Demodulator Output -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: demod_out -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 30 260 370 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLUE -label: DRS Time Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_drs_time -callback: -argument: - --------------------- -class: FL_XYPLOT -type: NORMAL_XYPLOT -box: 430 20 370 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_RED -label: RX Signal Antenna 0 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_t_im -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 640 370 160 170 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_YELLOW -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_YELLOW -label: Scatter Plot -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: scatter_plot2 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 30 140 370 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_GREEN -label: SRS Time Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_srs_time -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 430 140 370 100 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_GREEN -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_GREEN -label: SRS Frequency Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_srs -callback: -argument: - --------------------- -class: FL_XYPLOT -type: IMPULSE_XYPLOT -box: 430 260 370 90 -boxtype: FL_EMBOSSED_BOX -colors: FL_BLACK FL_BLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLUE -label: DRS Frequency Response -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: channel_drs -callback: -argument: - --------------------- -class: FL_TEXT -type: NORMAL_TEXT -box: 460 570 200 50 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_MCOL -alignment: FL_ALIGN_LEFT|FL_ALIGN_INSIDE -style: FL_NORMAL_STYLE -size: FL_MEDIUM_SIZE -lcol: FL_WHITE -label: RSSI = -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: rssi -callback: -argument: - -============================== -create_the_forms diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.h b/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.h deleted file mode 100755 index 815557ccf0..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_scope_ul.h +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/** Header file generated with fdesign on Fri Aug 12 18:02:36 2011.**/ - -#ifndef FD_lte_scope_h_ -#define FD_lte_scope_h_ - -/** Callbacks, globals and object handlers **/ - - -/**** Forms and Objects ****/ -typedef struct { - FL_FORM *lte_scope; - void *vdata; - char *cdata; - long ldata; - FL_OBJECT *fer; - FL_OBJECT *channel_t_re; - FL_OBJECT *demod_out; - FL_OBJECT *channel_drs_time; - FL_OBJECT *channel_t_im; - FL_OBJECT *scatter_plot2; - FL_OBJECT *channel_srs_time; - FL_OBJECT *channel_srs; - FL_OBJECT *channel_drs; - FL_OBJECT *rssi; -} FD_lte_scope; - -extern FD_lte_scope * create_form_lte_scope(void); - -#endif /* FD_lte_scope_h_ */ diff --git a/openair1/USERSPACE_TOOLS/SCOPE/lte_ul.c b/openair1/USERSPACE_TOOLS/SCOPE/lte_ul.c deleted file mode 100644 index b0fda175c7..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/lte_ul.c +++ /dev/null @@ -1,462 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include "forms.h" -#include "lte_scope_ul.h" - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#include "ARCH/COMMON/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -//#include "PHY/CONFIG/vars.h" -//#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - - -FD_lte_scope *form; - -LTE_DL_FRAME_PARMS *frame_parms; -PHY_VARS_eNB *PHY_vars_eNB; -LTE_eNB_UE_stats *lte_eNb_ue_stats; - -//short channel[2048]; -//short channel_f[2048]; -//char demod_data[2048]; - -short *channel_drs[4],*channel_drs_time[4],*channel_srs[4],*channel_srs_time[4],*rx_sig[4],*ulsch_ext[2],*ulsch_comp,*ulsch_llr,**rx_sig_ptr; -unsigned int* sync_corr; - -int length,offset; -float avg=1; - -unsigned char nb_ant_tx, nb_ant_rx; - - -void lte_scope_idle_callback(void) -{ - - int i,j,ind,k,s; - static int t=0; - - float Re,Im; - float mag_sig[NB_ANTENNAS_RX*NB_ANTENNAS_TX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT], - sig_time[NB_ANTENNAS_RX*NB_ANTENNAS_TX*NUMBER_OF_OFDM_CARRIERS*NUMBER_OF_OFDM_SYMBOLS_PER_SLOT], - sig2[FRAME_LENGTH_COMPLEX_SAMPLES], - time2[FRAME_LENGTH_COMPLEX_SAMPLES], - I[25*12*12], Q[25*12*12], - //llr[8*(3*8*6144+12)], - //llr_time[8*(3*8*6144+12)]; - llr[25*12*4*7], - llr_time[25*12*4*7]; - - float cum_avg; - - char text[64]; - - /* - // channel_t_re = sync_corr - for (i=0; i<640*3; i++) { - sig2[i] = (float)(10.0*log10(1.0 + sync_corr[i])); - //sig2[i] = (float)(sync_corr[i]); - time2[i] = (float) i; - } - - fl_set_xyplot_ybounds(form->channel_t_re,50,100); - fl_set_xyplot_data(form->channel_t_re,time2,sig2,640*3,"","",""); - */ - - // channel_t_re = rx_sig[0] - for (i=0; ichannel_t_re,30,80); - fl_set_xyplot_data(form->channel_t_re,time2,sig2,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,"","",""); - - // channel_t_im = rx_sig[1] - for (i=0; ichannel_t_im,30,80); - fl_set_xyplot_data(form->channel_t_im,time2,sig2,FRAME_LENGTH_COMPLEX_SAMPLES_NO_PREFIX,"","",""); - - // channel_srs - cum_avg = 0; - ind = 0; - - for (k=0; k<2; k++) { - //for (j=0;j<2;j++) { - j=0; - { - - s = frame_parms->first_carrier_offset; - - for (i=0; iN_RB_UL*12; i++) { - sig_time[ind] = (float)ind; - Re = (float)(channel_srs[k+2*j][2*s]); - Im = (float)(channel_srs[k+2*j][2*s+1]); - //mag_sig[ind] = (short) rand(); - mag_sig[ind] = (short)10*log10(1.0+((double)Re*Re + (double)Im*Im)); - cum_avg += (short)sqrt((double)Re*Re + (double)Im*Im) ; - ind++; - s++; - - if (s>= frame_parms->ofdm_symbol_size) - s=1; - } - - //ind+=16; // spacing for visualization - } - } - - avg = cum_avg/NUMBER_OF_USEFUL_CARRIERS; - - //fl_set_xyplot_ybounds(form->channel_srs,30,90); - fl_set_xyplot_data(form->channel_srs,sig_time,mag_sig,ind,"","",""); - - // channel_srs_time - cum_avg = 0; - ind = 0; - - for (k=0; k<2; k++) { - //for (j=0;j<1;j++) { - j=0; - { - - for (i=0; iofdm_symbol_size/2; i++) { - sig_time[ind] = (float)ind; - Re = (float)(channel_srs_time[k+2*j][4*i]); - Im = (float)(channel_srs_time[k+2*j][4*i+1]); - //mag_sig[ind] = (short) rand(); - mag_sig[ind] = (short)10*log10(1.0+((double)Re*Re + (double)Im*Im)); - cum_avg += (short)sqrt((double)Re*Re + (double)Im*Im) ; - ind++; - } - - //ind+=16; // spacing for visualization - } - } - - avg = cum_avg/NUMBER_OF_USEFUL_CARRIERS; - - //fl_set_xyplot_ybounds(form->channel_srs_time,30,90); - fl_set_xyplot_data(form->channel_srs_time,sig_time,mag_sig,ind,"","",""); - - - // channel_drs = drs - cum_avg = 0; - ind = 0; - //for (k=0;k<1;k++){ - // for (j=0;j<1;j++) { - - for (i=0; iN_RB_UL*12*frame_parms->symbols_per_tti; i++) { - sig_time[ind] = (float)ind; - Re = (float)(channel_drs[1][2*i]); - Im = (float)(channel_drs[1][2*i+1]); - mag_sig[ind] = (short)10*log10(1.0+((double)Re*Re + (double)Im*Im)); - cum_avg += sqrt((double)Re*Re + (double)Im*Im) ; - ind++; - } - - // } - // } - - avg = cum_avg/NUMBER_OF_USEFUL_CARRIERS; - - //fl_set_xyplot_ybounds(form->channel_f,30,70); - fl_set_xyplot_data(form->channel_drs,sig_time,mag_sig,ind,"","",""); - //fl_set_xyplot_data(form->decoder_input,sig_time,mag_sig,ind,"","",""); - - // channel_drs_time = drs_time - cum_avg = 0; - ind = 0; - - for (k=0; k<1; k++) { - for (j=0; j<1; j++) { - - for (i=0; iofdm_symbol_size; i++) { - sig_time[ind] = (float)ind; - Re = (float)(channel_drs_time[k+2*j][4*i]); - Im = (float)(channel_drs_time[k+2*j][4*i+1]); - mag_sig[ind] = (double)(Re*Re + Im*Im); - ind++; - } - } - } - - //fl_set_xyplot_ybounds(form->channel_f,30,70); - fl_set_xyplot_data(form->channel_drs_time,sig_time,mag_sig,ind,"","",""); - - // demod_out = ulsch_llr - for(i=0; i<12*12*12; i++) { - llr[i] = (float) ulsch_llr[i]; - llr_time[i] = (float) i; - } - - fl_set_xyplot_data(form->demod_out,llr_time,llr,i,"","",""); - // fl_set_xyplot_data(form->demod_out,time2,llr,25*12*4,"","",""); - //fl_set_xyplot_ybounds(form->demod_out,-400,400); - - // scatter_plot2 = ulsch_comp - for(i=0; i<12*12*12; i++) { - I[i] = ulsch_comp[2*i]; - Q[i] = ulsch_comp[2*i+1]; - } - - fl_set_xyplot_data(form->scatter_plot2,I,Q,i,"","",""); - //fl_set_xyplot_xbounds(form->scatter_plot2,-400,400); - //fl_set_xyplot_ybounds(form->scatter_plot2,-400,400); - - sprintf(text, "RSSI = (%d, %d) dB",lte_eNb_ue_stats->UL_rssi[0],lte_eNb_ue_stats->UL_rssi[0]); - //printf("%s\n",text); - fl_set_object_label(form->rssi,text); - //fl_redraw_object(form->rssi); - - sprintf(text, "FER = %d %%",lte_eNb_ue_stats->ulsch_round_fer [0][0]); - //printf("%s\n",text); - fl_set_object_label(form->fer,text); - //fl_redraw_form(form); - - usleep(500000); -} -//----------------------------------------------------------------------------- -void do_scope(void) -{ - - //----------------------------------------------------------------------------- - char ch; - - fl_set_idle_callback(lte_scope_idle_callback, NULL); - fl_do_forms() ; /* SIGSCOPE */ - - - -} - -//----------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - //----------------------------------------------------------------------------- - - int openair_fd,i; - unsigned int mem_base; - char title[64]; - unsigned int bigphys_top; - LTE_eNB_ULSCH *lte_eNb_ulsch; - unsigned char eNb_id=0, UE_id=0; - - if (argc>1) { - eNb_id = atoi(argv[1]); - - if (eNb_id > 2) { - printf("eNb_id hast to be <= 2!\n"); - exit(-1); - } - } else { - eNb_id = 0; - } - - if (argc>2) { - UE_id = atoi(argv[2]); - - if (UE_id >1) { - printf("UE_id has to be <=1!\n"); - exit(-1); - } - } else { - UE_id = 0; - } - - //PHY_vars = malloc(sizeof(PHY_VARS)); - //PHY_config = malloc(sizeof(PHY_CONFIG)); - - frame_parms = malloc(sizeof(LTE_DL_FRAME_PARMS)); - PHY_vars_eNB = malloc(sizeof(PHY_VARS_eNB)); - - printf("Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDONLY)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - ioctl(openair_fd,openair_GET_CONFIG,frame_parms); - dump_frame_parms(frame_parms); - - printf("Getting PHY_vars ...\n"); - ioctl(openair_fd,openair_GET_VARS,PHY_vars_eNB); - - if (PHY_vars_eNB->lte_eNB_common_vars.txdataF == NULL) { - printf("Problem getting PHY_vars. Is UE configured?\n"); - exit(-1); - } - - printf("Getting BIGPHYS_top ...\n"); - ioctl(openair_fd,openair_GET_BIGPHYSTOP,(void *)&bigphys_top); - - printf("Bigphys_top = %p\n",bigphys_top); - printf("TX_DMA_BUFFER = %p\n",PHY_vars_eNB->lte_eNB_common_vars.txdataF); - printf("RX_DMA_BUFFER = %p\n",PHY_vars_eNB->lte_eNB_common_vars.rxdata); - printf("PHY_vars->lte_eNB_common_vars.sync_corr[%d] = %p\n",eNb_id,PHY_vars_eNB->lte_eNB_common_vars.sync_corr[eNb_id]); - printf("PHY_vars->lte_eNB_ulsch_vars[%d] = %p\n",UE_id,PHY_vars_eNB->lte_eNB_ulsch_vars[UE_id]); - printf("PHY_vars->lte_eNB_common_vars.srs_ch_estimates[%d] = %p\n",eNb_id,PHY_vars_eNB->lte_eNB_srs_vars[eNb_id].srs_ch_estimates); - - printf("sizeof(PHY_VARS_eNB) = %d\n",sizeof(PHY_VARS_eNB)); - - printf("NUMBER_OF_OFDM_CARRIERS = %d\n",NUMBER_OF_OFDM_CARRIERS); - - nb_ant_tx = PHY_vars_eNB->lte_frame_parms.nb_antennas_tx; - nb_ant_rx = PHY_vars_eNB->lte_frame_parms.nb_antennas_rx; - printf("(TX, RX) ANTENNAS = %d, %d\n",nb_ant_tx,nb_ant_rx); - - mem_base = (unsigned int) mmap(0, - BIGPHYS_NUMPAGES*4096, - PROT_READ, - MAP_PRIVATE, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %x\n",mem_base); - else - msg("Could not map physical memory\n"); - - sync_corr = (unsigned int*) (mem_base + - (unsigned int)PHY_vars_eNB->lte_eNB_common_vars.sync_corr[eNb_id] - - bigphys_top); - - lte_eNb_ulsch = (LTE_eNB_ULSCH *) (mem_base + - (unsigned int)PHY_vars_eNB->lte_eNB_ulsch_vars[UE_id] - - bigphys_top); - - printf("lte_eNb_ulsch = %p\n",lte_eNb_ulsch); - - - lte_eNb_ue_stats = (LTE_eNB_UE_stats *) (mem_base + - (unsigned int)PHY_vars_eNB->eNB_UE_stats_ptr[UE_id] - - bigphys_top); - - - printf("lte_eNb_ue_stats= %p\n",lte_eNb_ue_stats); - - - - for (i=0; ilte_eNB_srs_vars[UE_id].srs_ch_estimates[eNb_id] + - nb_ant_rx*sizeof(int*) + - i*(sizeof(int)*frame_parms->ofdm_symbol_size) - - bigphys_top); - - channel_srs_time[i] = (short*)(mem_base + - (unsigned int)PHY_vars_eNB->lte_eNB_srs_vars[UE_id].srs_ch_estimates_time[eNb_id] + - nb_ant_rx*sizeof(int*) + - i*(sizeof(int)*frame_parms->ofdm_symbol_size) - - bigphys_top); - - channel_drs[i] = (short*)(mem_base + - (unsigned int)lte_eNb_ulsch->drs_ch_estimates[eNb_id] + - nb_ant_rx*sizeof(int*) + - i*(frame_parms->symbols_per_tti*sizeof(int)*frame_parms->N_RB_UL*12) - - bigphys_top); - - channel_drs_time[i] = (short*)(mem_base + - (unsigned int)lte_eNb_ulsch->drs_ch_estimates_time[eNb_id] + - nb_ant_rx*sizeof(int*) + - i*(2*sizeof(int)*frame_parms->ofdm_symbol_size) - - bigphys_top); - - ulsch_ext[i] = (short*)(mem_base + - (unsigned int)lte_eNb_ulsch->rxdataF_ext[eNb_id] + - nb_ant_rx*sizeof(int*) + - i*(frame_parms->symbols_per_tti*sizeof(int)*frame_parms->N_RB_UL*12) - - bigphys_top); - } - - rx_sig_ptr = (short **)(mem_base + - (unsigned int)PHY_vars_eNB->lte_eNB_common_vars.rxdata[eNb_id] - - bigphys_top); - - for (i=0; irxdataF_comp[eNb_id] + - nb_ant_rx*sizeof(int*) - - bigphys_top); - - - ulsch_llr = (short*)(mem_base + - (unsigned int)lte_eNb_ulsch->llr - - bigphys_top); - - sprintf(title, "LTE SCOPE eNB %d UE %d", eNb_id, UE_id), - - fl_initialize(&argc, argv, title, 0, 0); /* SIGSCOPE */ - form = create_form_lte_scope(); /* SIGSCOPE */ - fl_show_form(form->lte_scope,FL_PLACE_HOTSPOT,FL_FULLBORDER,title); /* SIGSCOPE */ - - do_scope(); - sleep(5); - close(openair_fd); - return(0); -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/sach.c b/openair1/USERSPACE_TOOLS/SCOPE/sach.c deleted file mode 100755 index fa58f183d9..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/sach.c +++ /dev/null @@ -1,403 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -//#include -//#include -#include -#include -#include -#include "forms.h" -#include "sach_scope.h" - -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -#include "PHY/CONFIG/vars.h" -#include "MAC_INTERFACE/vars.h" -//#include "PHY/TOOLS/defs.h" - - -FD_sach_scope *form; - - -short *channel[4],*channel_f[4],*rx_sig[4],*rx_sig_f2[4],*rx_sig_f3[4]; - -unsigned char nb_tx_ant; - -unsigned int mem_base; - -void sach_scope_idle_callback(void) -{ - - int user_index,tchan_index,i; - - short *sacch_data,*sach_data; - float avg,sach_re[4096],sach_im[4096]; - float sacch_re[512],sacch_im[512]; - unsigned short nb_sacch_carriers,nb_sach_carriers; - - SACH_DIAGNOSTICS *sach_diag; - - - for (user_index=0; user_index<8; user_index++) { - - for (tchan_index=0; tchan_index<5; tchan_index++) { - - sach_diag = &PHY_vars->Sach_diagnostics[user_index][tchan_index]; - - if (sach_diag->active == 1) { - - avg = 0; - nb_sacch_carriers = (sach_diag->nb_sacch_carriers< 512) ? sach_diag->nb_sacch_carriers : 512; - nb_sach_carriers = (sach_diag->nb_sach_carriers < 4096) ? sach_diag->nb_sach_carriers : 4096; - - - sacch_data = (short *)(mem_base + (unsigned int)PHY_vars->Sach_diagnostics[user_index][tchan_index].sacch_demod_data-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - sach_data = (short *)(mem_base + (unsigned int)PHY_vars->Sach_diagnostics[user_index][tchan_index].sach_demod_data-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - - /* - printf("User_index %d, tchan_index %d (sacch %d,sach %d) (%p,%p) -> (%p,%p)\n",user_index,tchan_index,nb_sacch_carriers,nb_sach_carriers,PHY_vars->Sach_diagnostics[user_index][tchan_index].sacch_demod_data,PHY_vars->Sach_diagnostics[user_index][tchan_index].sach_demod_data,sacch_data,sach_data); - */ - for (i=0; i>1; i++) { - sacch_re[i] = (float)sacch_data[i<<2]; - sacch_im[i] = (float)sacch_data[(i<<2) + 1]; - // printf("sacch: i=%d : %d %d %d %d\n",i,sacch_data[i<<2],sacch_data[1+(i<<2)],sacch_data[2+(i<<2)],sacch_data[3+(i<<2)]); - avg += fabs(sacch_re[i])+fabs(sacch_im[i]); - } - - for (i=0; i>1; i++) { - sach_re[i] = (float)sach_data[i<<2]; - sach_im[i] = (float)sach_data[(i<<2) + 1]; - // printf("sach : i=%d : %d %d %d %d\n",i,sach_data[i<<2],sach_data[1+(i<<2)],sach_data[2+(i<<2)],sach_data[3+(i<<2)]); - avg += fabs(sach_re[i])+fabs(sach_im[i]); - } - - avg/=(nb_sacch_carriers+nb_sach_carriers); - - for (i=0; i>1; i++) { - sacch_re[i] /= avg; - sacch_im[i] /= avg; - // printf("sacch: i=%d : %d %d %d %d\n",i,sacch_data[i<<2],sacch_data[1+(i<<2)],sacch_data[2+(i<<2)],sacch_data[3+(i<<2)]); - } - - for (i=0; i>1; i++) { - sach_re[i] /= avg; - sach_im[i] /= avg; - // printf("sach : i=%d : %d %d %d %d\n",i,sach_data[i<<2],sach_data[1+(i<<2)],sach_data[2+(i<<2)],sach_data[3+(i<<2)]); - } - - // avg = 2048.0; - - avg = 2.0; - - if ((user_index == 0) && (tchan_index == 0)) { - fl_set_xyplot_xbounds(form->sacch00,-avg,avg); - fl_set_xyplot_ybounds(form->sacch00,-avg,avg); - fl_set_xyplot_xbounds(form->sach00,-avg,avg); - fl_set_xyplot_ybounds(form->sach00,-avg,avg); - - fl_set_xyplot_data(form->sacch00,sacch_re,sacch_im,nb_sacch_carriers>>1,"","",""); - fl_set_xyplot_data(form->sach00,sach_re,sach_im,nb_sach_carriers>>1,"","",""); - } - - if ((user_index == 0) && (tchan_index == 1)) { - fl_set_xyplot_xbounds(form->sacch01,-avg,avg); - fl_set_xyplot_ybounds(form->sacch01,-avg,avg); - fl_set_xyplot_xbounds(form->sach01,-avg,avg); - fl_set_xyplot_ybounds(form->sach01,-avg,avg); - fl_set_xyplot_data(form->sacch01,sacch_re,sacch_im,nb_sacch_carriers>>1,"","",""); - fl_set_xyplot_data(form->sach01,sach_re,sach_im,nb_sach_carriers>>1,"","",""); - - } - - if ((user_index == 0) && (tchan_index == 2)) { - fl_set_xyplot_xbounds(form->sacch02,-avg,avg); - fl_set_xyplot_ybounds(form->sacch02,-avg,avg); - fl_set_xyplot_xbounds(form->sach02,-avg,avg); - fl_set_xyplot_ybounds(form->sach02,-avg,avg); - - fl_set_xyplot_data(form->sacch02,sacch_re,sacch_im,nb_sacch_carriers>>1,"","",""); - fl_set_xyplot_data(form->sach02,sach_re,sach_im,nb_sach_carriers>>1,"","",""); - } - - if ((user_index == 0) && (tchan_index == 3)) { - fl_set_xyplot_data(form->sacch03,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach03,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 0) && (tchan_index == 4)) { - fl_set_xyplot_data(form->sacch04,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach04,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - - if ((user_index == 1) && (tchan_index == 0)) { - - fl_set_xyplot_xbounds(form->sacch10,-avg,avg); - fl_set_xyplot_ybounds(form->sacch10,-avg,avg); - fl_set_xyplot_xbounds(form->sach10,-avg,avg); - fl_set_xyplot_ybounds(form->sach10,-avg,avg); - - fl_set_xyplot_data(form->sacch10,sacch_re,sacch_im,nb_sacch_carriers>>1,"","",""); - fl_set_xyplot_data(form->sach10,sach_re,sach_im,nb_sach_carriers>>1,"","",""); - } - - if ((user_index == 1) && (tchan_index == 1)) { - fl_set_xyplot_xbounds(form->sacch11,-avg,avg); - fl_set_xyplot_ybounds(form->sacch11,-avg,avg); - fl_set_xyplot_xbounds(form->sach11,-avg,avg); - fl_set_xyplot_ybounds(form->sach11,-avg,avg); - fl_set_xyplot_data(form->sacch11,sacch_re,sacch_im,nb_sacch_carriers>>1,"","",""); - fl_set_xyplot_data(form->sach11,sach_re,sach_im,nb_sach_carriers>>1,"","",""); - } - - if ((user_index == 1) && (tchan_index == 2)) { - fl_set_xyplot_xbounds(form->sacch12,-avg,avg); - fl_set_xyplot_ybounds(form->sacch12,-avg,avg); - fl_set_xyplot_xbounds(form->sach12,-avg,avg); - fl_set_xyplot_ybounds(form->sach12,-avg,avg); - - fl_set_xyplot_data(form->sacch12,sacch_re,sacch_im,nb_sacch_carriers>>1,"","",""); - fl_set_xyplot_data(form->sach12,sach_re,sach_im,nb_sach_carriers>>1,"","",""); - } - - if ((user_index == 1) && (tchan_index == 3)) { - fl_set_xyplot_data(form->sacch13,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach13,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 1) && (tchan_index == 4)) { - fl_set_xyplot_data(form->sacch13,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach13,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 2) && (tchan_index == 0)) { - fl_set_xyplot_data(form->sacch20,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach20,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 2) && (tchan_index == 1)) { - fl_set_xyplot_data(form->sacch21,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach21,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 2) && (tchan_index == 2)) { - fl_set_xyplot_data(form->sacch22,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach22,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 2) && (tchan_index == 3)) { - fl_set_xyplot_data(form->sacch23,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach23,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 2) && (tchan_index == 4)) { - fl_set_xyplot_data(form->sacch24,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach24,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - - if ((user_index == 3) && (tchan_index == 0)) { - fl_set_xyplot_data(form->sacch30,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach30,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 3) && (tchan_index == 1)) { - fl_set_xyplot_data(form->sacch31,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach31,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 3) && (tchan_index == 2)) { - fl_set_xyplot_data(form->sacch32,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach32,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 3) && (tchan_index == 3)) { - fl_set_xyplot_data(form->sacch33,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach33,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - if ((user_index == 3) && (tchan_index == 4)) { - fl_set_xyplot_data(form->sacch33,sacch_re,sacch_im,nb_sacch_carriers,"","",""); - fl_set_xyplot_data(form->sach33,sach_re,sach_im,nb_sach_carriers,"","",""); - } - - } // active - - } // tchan loop - - } // user loop - - usleep(10000); - -} - -//----------------------------------------------------------------------------- -do_scope() -{ - - //----------------------------------------------------------------------------- - char ch; - - fl_set_idle_callback(sach_scope_idle_callback, NULL); - fl_do_forms() ; /* SIGSCOPE */ - - - -} - -//----------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - //----------------------------------------------------------------------------- - - int openair_fd,i; - - unsigned int first_symbol; - char title[20]; - short *sach_data; - - if (argc<4) { - printf("Not enough arguments: sach_scope nb_tx_antennas sch_index \n"); - exit(-1); - } - - PHY_vars = malloc(sizeof(PHY_VARS)); - - PHY_config = malloc(sizeof(PHY_CONFIG)); - /* - if((config = fopen("./widens_config.cfg","r")) == NULL) // this can be configured - { - printf("[Main USER] The widens configuration file could not be found!"); - exit(0); - } - - if ((scenario= fopen("./widens_scenario.scn","r")) ==NULL) - { - printf("[Main USER] The widens scenario file could not be found!"); - exit(0); - } - - printf("Opened configuration files\n"); - - reconfigure_MACPHY(scenario); - */ - - printf("Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDONLY)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - printf("Getting PHY_vars ...\n"); - - ioctl(openair_fd,openair_GET_VARS,PHY_vars); - - printf("Getting PHY_vars->tx_vars[0].TX_DMA_BUFFER=%p\n",PHY_vars->tx_vars[0].TX_DMA_BUFFER); - - printf("Getting PHY_config ...\n"); - - ioctl(openair_fd,openair_GET_CONFIG,PHY_config); - - printf("NUMBER_OF_OFDM_CARRIERS = %d\n",NUMBER_OF_OFDM_CARRIERS); - - - mem_base = mmap(0, - 4096*4096, - PROT_READ, - MAP_PRIVATE, - openair_fd, - 0); - - if (mem_base != -1) - msg("MEM base= %p: (%x,%x,%x,%x)\n",mem_base, - ((int*)mem_base)[0], - ((int*)mem_base)[1], - ((int*)mem_base)[2], - ((int*)mem_base)[3]); - else - msg("Could not map physical memory\n"); - - if (atoi(argv[1]) == 0) { // Clusterhead - for (i=0; isch_data[atoi(argv[3])].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel_f[%d]=%p (%x,%x,%x,%x)\n",i,channel_f[i],channel_f[i][0],channel_f[i][1],channel_f[i][2],channel_f[i][3]); - } - - sach_data = (short *)(mem_base + (unsigned int)PHY_vars->Sach_diagnostics[0][0].sach_demod_data-(unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("sach_data %p (%p)\n",PHY_vars->Sach_diagnostics[0][0].sach_demod_data,sach_data); - - printf("sach_data %p, (%x,%x,%x,%x)\n",sach_data,sach_data[0],sach_data[1],sach_data[2],sach_data[3]); - } else if (atoi(argv[1]) == 1) { // UE - - for (i=0; ichsch_data[atoi(argv[3])].channel_f[i] - (unsigned int)&PHY_vars->tx_vars[0].TX_DMA_BUFFER[0]); - printf("channel_f[%d]=%p\n",i,channel[i]); - } - - } else { - printf("Unknown node role %d\n",atoi(argv[1])); - close(openair_fd); - exit(-1); - - } - - nb_tx_ant = atoi(argv[2]); - - sprintf(title, "SACH SCOPE %d %d %d", atoi(argv[1]), atoi(argv[2]), atoi(argv[3])), - - fl_initialize(&argc, argv, title, 0, 0); /* SIGSCOPE */ - form = create_form_sach_scope(); /* SIGSCOPE */ - fl_show_form(form->sach_scope,FL_PLACE_HOTSPOT,FL_FULLBORDER,title); /* SIGSCOPE */ - - do_scope(); - sleep(5); - close(openair_fd); - return(0); -} diff --git a/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.c b/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.c deleted file mode 100644 index 726c2a1d18..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.c +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/* Form definition file generated with fdesign. */ - -#include "forms.h" -#include -#include "sach_scope.h" - -FD_sach_scope *create_form_sach_scope(void) -{ - FL_OBJECT *obj; - FD_sach_scope *fdui = (FD_sach_scope *) fl_calloc(1, sizeof(*fdui)); - - fdui->sach_scope = fl_bgn_form(FL_NO_BOX, 1380, 590); - obj = fl_add_box(FL_UP_BOX,0,0,1380,590,""); - fdui->sacch00 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,110,20,90,90,"U0 : DCCH"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach00 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,190,20,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch01 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,280,20,90,90,"U0: DTCH0"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach01 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,360,20,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch02 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,450,20,90,90,"U0: DTCH1"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach02 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,530,20,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch03 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,620,20,90,90,"U0: DTCH2"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach03 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,700,20,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch04 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,790,20,90,90,"U0: DTCH3"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach04 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,870,20,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch10 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,110,150,90,90,"U1 : DCCH"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach10 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,190,150,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch11 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,280,150,90,90,"U1: DTCH0"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach11 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,360,150,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch12 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,450,150,90,90,"U1: DTCH1"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach12 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,530,150,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch13 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,620,150,90,90,"U1: DTCH2"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach13 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,700,150,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch14 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,790,150,90,90,"U1: DTCH3"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach14 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,870,150,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch20 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,110,290,90,90,"U2 : DCCH"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach20 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,190,290,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch21 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,280,290,90,90,"U2: DTCH0"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach21 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,360,290,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch22 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,450,290,90,90,"U2: DTCH1"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach22 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,530,290,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch23 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,620,290,90,90,"U2: DTCH2"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach23 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,700,290,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch24 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,790,290,90,90,"U2: DTCH3"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach24 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,870,290,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch30 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,110,430,90,90,"U3 : DCCH"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach30 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,190,430,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch31 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,280,430,90,90,"U3: DTCH0"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach31 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,360,430,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch32 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,450,430,90,90,"U3: DTCH1"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach32 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,530,430,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch33 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,620,430,90,90,"U3: DTCH2"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach33 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,700,430,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fdui->sacch34 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,790,430,90,90,"U3: DTCH3"); - fl_set_object_color(obj,FL_BLACK,FL_DODGERBLUE); - fdui->sach34 = obj = fl_add_xyplot(FL_POINTS_XYPLOT,870,430,90,90,""); - fl_set_object_color(obj,FL_BLACK,FL_RED); - fl_end_form(); - - fdui->sach_scope->fdui = fdui; - - return fdui; -} -/*---------------------------------------*/ - diff --git a/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.fd b/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.fd deleted file mode 100644 index 6f651fb905..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.fd +++ /dev/null @@ -1,754 +0,0 @@ -Magic: 13000 - -Internal Form Definition File - (do not change) - -Number of forms: 1 -Unit of measure: FL_COORD_PIXEL - -=============== FORM =============== -Name: sach_scope -Width: 1380 -Height: 590 -Number of Objects: 41 - --------------------- -class: FL_BOX -type: UP_BOX -box: 0 0 1380 590 -boxtype: FL_UP_BOX -colors: FL_COL1 FL_COL1 -alignment: FL_ALIGN_CENTER -style: FL_NORMAL_STYLE -size: FL_DEFAULT_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 110 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U0 : DCCH -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch00 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 190 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach00 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 280 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U0: DTCH0 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch01 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 360 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach01 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 450 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U0: DTCH1 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch02 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 530 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach02 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 620 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U0: DTCH2 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch03 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 700 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach03 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 790 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U0: DTCH3 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch04 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 870 20 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach04 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 110 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U1 : DCCH -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch10 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 190 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach10 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 280 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U1: DTCH0 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch11 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 360 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach11 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 450 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U1: DTCH1 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch12 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 530 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach12 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 620 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U1: DTCH2 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch13 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 700 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach13 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 790 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U1: DTCH3 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch14 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 870 150 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach14 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 110 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U2 : DCCH -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch20 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 190 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach20 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 280 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U2: DTCH0 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch21 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 360 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach21 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 450 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U2: DTCH1 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch22 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 530 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach22 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 620 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U2: DTCH2 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch23 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 700 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach23 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 790 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U2: DTCH3 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch24 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 870 290 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach24 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 110 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U3 : DCCH -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch30 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 190 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach30 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 280 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U3: DTCH0 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch31 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 360 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach31 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 450 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U3: DTCH1 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch32 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 530 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach32 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 620 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U3: DTCH2 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch33 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 700 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach33 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 790 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_DODGERBLUE -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: U3: DTCH3 -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sacch34 -callback: -argument: - --------------------- -class: FL_XYPLOT -type: POINTS_XYPLOT -box: 870 430 90 90 -boxtype: FL_FLAT_BOX -colors: FL_BLACK FL_RED -alignment: FL_ALIGN_BOTTOM -style: FL_NORMAL_STYLE -size: FL_TINY_SIZE -lcol: FL_BLACK -label: -shortcut: -resize: FL_RESIZE_ALL -gravity: FL_NoGravity FL_NoGravity -name: sach34 -callback: -argument: - -============================== -create_the_forms diff --git a/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.h b/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.h deleted file mode 100644 index cbcb5a5448..0000000000 --- a/openair1/USERSPACE_TOOLS/SCOPE/sach_scope.h +++ /dev/null @@ -1,87 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -/** Header file generated with fdesign on Tue Oct 21 17:41:09 2008.**/ - -#ifndef FD_sach_scope_h_ -#define FD_sach_scope_h_ - -/** Callbacks, globals and object handlers **/ - - -/**** Forms and Objects ****/ -typedef struct { - FL_FORM *sach_scope; - void *vdata; - char *cdata; - long ldata; - FL_OBJECT *sacch00; - FL_OBJECT *sach00; - FL_OBJECT *sacch01; - FL_OBJECT *sach01; - FL_OBJECT *sacch02; - FL_OBJECT *sach02; - FL_OBJECT *sacch03; - FL_OBJECT *sach03; - FL_OBJECT *sacch04; - FL_OBJECT *sach04; - FL_OBJECT *sacch10; - FL_OBJECT *sach10; - FL_OBJECT *sacch11; - FL_OBJECT *sach11; - FL_OBJECT *sacch12; - FL_OBJECT *sach12; - FL_OBJECT *sacch13; - FL_OBJECT *sach13; - FL_OBJECT *sacch14; - FL_OBJECT *sach14; - FL_OBJECT *sacch20; - FL_OBJECT *sach20; - FL_OBJECT *sacch21; - FL_OBJECT *sach21; - FL_OBJECT *sacch22; - FL_OBJECT *sach22; - FL_OBJECT *sacch23; - FL_OBJECT *sach23; - FL_OBJECT *sacch24; - FL_OBJECT *sach24; - FL_OBJECT *sacch30; - FL_OBJECT *sach30; - FL_OBJECT *sacch31; - FL_OBJECT *sach31; - FL_OBJECT *sacch32; - FL_OBJECT *sach32; - FL_OBJECT *sacch33; - FL_OBJECT *sach33; - FL_OBJECT *sacch34; - FL_OBJECT *sach34; -} FD_sach_scope; - -extern FD_sach_scope * create_form_sach_scope(void); - -#endif /* FD_sach_scope_h_ */ diff --git a/openair1/USERSPACE_TOOLS/SENSING/COPYING b/openair1/USERSPACE_TOOLS/SENSING/COPYING deleted file mode 100644 index 818433ecc0..0000000000 --- a/openair1/USERSPACE_TOOLS/SENSING/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program 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. - - This program 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 this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/openair1/USERSPACE_TOOLS/SENSING/Makefile b/openair1/USERSPACE_TOOLS/SENSING/Makefile deleted file mode 100644 index ece36c3866..0000000000 --- a/openair1/USERSPACE_TOOLS/SENSING/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -include $(OPENAIR_HOME)/common/utils/Makefile.inc - -TOP_DIR = ../.. - -CFLAGS += -DNODE_RG -DUSER_MODE -DPC_TARGET -DPC_DSP -DNB_ANTENNAS=2 -DNB_ANTENNAS_TX=2 -DDEBUG_PHY -DCBMIMO1 - -# PHY Initialization routines -OBJS =$(TOP_DIR)/PHY/INIT/init.o - -# PHY TOOLS routines -OBJS +=$(TOP_DIR)/PHY/TOOLS/fft.o $(TOP_DIR)/PHY/TOOLS/cmult_vv.o $(TOP_DIR)/PHY/TOOLS/cmult_sv.o -#ifdef CBMIMO1 -OBJS +=$(TOP_DIR)/PHY/TOOLS/8bit_txmux.o -#endif - -# PHY ESTIMATION routines -OBJS += $(TOP_DIR)/PHY/ESTIMATION/channel_estimation.o - -# PHY MODULATION routines -OBJS +=$(TOP_DIR)/PHY/MODULATION/ofdm_mod.o - -# PHY Transport routines -OBJS += $(TOP_DIR)/PHY/TRANSPORT/chsch.o $(TOP_DIR)/PHY/TRANSPORT/chbch.o $(TOP_DIR)/PHY/TRANSPORT/sch.o $(TOP_DIR)/PHY/TRANSPORT/sach.o $(TOP_DIR)/PHY/TRANSPORT/mrbch.o - -# PHY Coding routines -OBJS+=$(TOP_DIR)/PHY/CODING/ccoding_byte.o $(TOP_DIR)/PHY/CODING/crc_byte.o $(TOP_DIR)/PHY/CODING/viterbi.o - -# PHY Synch routines -OBJS +=$(TOP_DIR)/PHY/ESTIMATION/synch_time.o - -# Utility routines -OBJS +=$(TOP_DIR)/PHY/TOOLS/dB_routines.o $(TOP_DIR)/PHY/TOOLS/file_output.o $(TOP_DIR)/PHY/TOOLS/memory_routines.o $(TOP_DIR)/PHY/TOOLS/signal_energy.o $(TOP_DIR)/PHY/TOOLS/sqrt.o $(TOP_DIR)/PHY/TOOLS/log2_approx.o $(TOP_DIR)/SIMULATION/TOOLS/rangen_double.o $(TOP_DIR)/SIMULATION/TOOLS/random_channel.o - -# CONFIG routines -OBJS +=$(TOP_DIR)/PHY/CONFIG/openair_configure.o $(TOP_DIR)/PHY/CONFIG/openair_readconfigfile.o - -$(OBJS) : %.o : %.c - $(CC) -c $(CFLAGS) -I$(TOP_DIR) -o $@ $< - -main_sensing : $(OBJS) main_sensing.c - $(CC) main_sensing.c -I$(TOP_DIR) -o main_sensing $(CFLAGS) $(OBJS) -lm - -all : main_sensing - -clean: - rm -f main_sensing - rm -f $(OBJ) - - diff --git a/openair1/USERSPACE_TOOLS/SENSING/main_sensing.c b/openair1/USERSPACE_TOOLS/SENSING/main_sensing.c deleted file mode 100644 index 05c589bc97..0000000000 --- a/openair1/USERSPACE_TOOLS/SENSING/main_sensing.c +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - 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 . - - 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 - - *******************************************************************************/ -#include "PHY/types.h" -#include "PHY/defs.h" -#include "PHY/vars.h" -#ifdef CBMIMO1 -#include "ARCH/CBMIMO1/DEVICE_DRIVER/cbmimo1_device.h" -#include "ARCH/CBMIMO1/DEVICE_DRIVER/defs.h" -#endif -#ifdef PLATON -#include "daq.h" -#endif - -#include "PHY/CONFIG/vars.h" -#include "MAC_INTERFACE/vars.h" - -#include -#include -#include - -#include -#include -#include -#include -//#include -#include -//#include -//#include -#include -//#include -#include -//#include -//#include - - -void main(int argc, char** argv) -{ - - int i; - FILE *rxsig_fd; - int openair_fd,rx_sig_fifo_fd,rf_cntl_fifo_fd,sched_cnt; - unsigned int params; - int result; - /* ############ variables declaration for sensing #######*/ - s16 *samples; - int size_signal = 20480; - struct complex16 signal[size_signal]; - - - printf("Allocating memory for PHY_VARS\n"); - - PHY_vars = (PHY_VARS *)malloc(sizeof(PHY_VARS)); - PHY_config = (PHY_CONFIG *)malloc(sizeof(PHY_CONFIG)); - mac_xface = (MAC_xface *)malloc(sizeof(MAC_xface)); - - if((config = fopen("./openair_config.cfg","r")) == NULL) { // this can be configured - printf("[Main USER] The widens configuration file could not be found!"); - exit(0); - } - - if ((scenario= fopen("./openair_scenario.scn","r")) ==NULL) { - printf("[Main USER] The widens scenario file could not be found!"); - exit(0); - } - - printf("Opened configuration files\n"); - printf("[openair][INFO][START] Opening /dev/openair0\n"); - - if ((openair_fd = open("/dev/openair0", O_RDWR,0)) <0) { - fprintf(stderr,"Error %d opening /dev/openair0\n",openair_fd); - exit(-1); - } - - rx_sig_fifo_fd=open("/dev/rtf59",O_RDONLY); - - if (rx_sig_fifo_fd==-1) { - printf("Can not open rxsig FIFO (/dev/rtf59)!\n"); - exit(0); - } - - rf_cntl_fifo_fd=open("/dev/rtf60",O_RDONLY); - - if (rf_cntl_fifo_fd==-1) { - printf("Can not open rf_cntl FIFO (/dev/rtf60)!\n"); - exit(0); - } - - if ((rxsig_fd = fopen("rxsig0.dat","w")) == NULL) { - printf("Cannot open rxsig0 output file\n"); - exit(0); - } - - reconfigure_MACPHY(scenario); - mac_xface->is_cluster_head = 0; - - phy_init(NB_ANTENNAS_TX); - printf("Initialized PHY variables\n"); - - //mac_init(); - - /* - PHY_config->PHY_framing.fc_khz = 1907600; - - result=ioctl(openair_fd, openair_DUMP_CONFIG,(char *)PHY_config); - if (result == 0) { - printf ("[openair][CONFIG][INFO] loading openair configuration in kernel space\n"); - } else { - printf ("[openair][START][INFO] loading openair configuration in kernel space failed \n"); - } - */ - - params = 1|(3<<1)|(3<<3); - result=ioctl(openair_fd,openair_GET_BUFFER,(void *)¶ms); - - if (result == 0) { - printf ("[openair][CONFIG][INFO] getting rx buffer\n"); - } else { - printf ("[openair][START][INFO] getting rx buffer failed \n"); - } - - read(rf_cntl_fifo_fd,(void *)&sched_cnt,4); - - printf("Sched count %d\n",sched_cnt); - - for (i=0; irx_vars[i].RX_DMA_BUFFER, - FRAME_LENGTH_BYTES); - } - - printf("Got Frame for %d antennas, demodulating\n",NB_ANTENNAS); - - fwrite(PHY_vars->rx_vars[0].RX_DMA_BUFFER,1,FRAME_LENGTH_BYTES,rxsig_fd); - - /*############### sensing code################*/ - samples = (s16 *)PHY_vars->rx_vars[0].RX_DMA_BUFFER; - - for (i=0; i