|
def | tx_thread (sdr, rate, txStream, rxStream, waveTx, numSamps, numSyms, txSymNum, startSymbol) |
| Functions #. More...
|
|
def | rx_thread (sdr, rxStream, numSamps, txSymNum, both_channels) |
|
def | siso_sounder (hub, serial1, serial2, rate, freq, txgain, rxgain, numSamps, numSyms, txSymNum, threshold, tx_advance, prefix_length, postfix_length, both_channels, wait_trigger, calibrate, record, use_trig, tx_power_loop, agc_en) |
|
def | signal_handler (rate, numSyms, use_trig, signal, frame) |
|
def | main () |
| Main #. More...
|
|
SOUNDER_TXRX.py
Basic channel sounding test:
It program two Irises in TDD mode (one as a base station node,
and the other as a UE/client node) to transmit and receive according
to the following schedule/frame:
Node 1 (BS) schedule PGRGGGGGGGGGGGGGGGRG
Node 2 (UE) schedule GGPGGGGGGGGGGGGGGGTG
where the BS is required to first send a beacon signal (initial "P").
This beacon consists of a signal that has been pre-loaded to the
BS FPGA buffer. Similarly, the conjugate of the beacon signal has
been pre-loaded to the UE's buffer in order to enable any correlation
operation on the UE side.
The BS node is configured for non-recurring triggers,
i.e., a trigger is used only for starting frame counting.
On the other hand, the UE will rely on an FPGA-based correlator
to trigger itself and count frames. Given the delay between base station
and UE (group delay at front-end, and RF path delay) there is a
mechanism for adjusting the frame time using setHardwareTime
which sets the start symbol and start count within the
symbol at the time of a correlator trigger. This frame-time also
accounts for the time advance between the UE and base station
node.
The pilot signal (currently a programmable repition of a WiFi LTS)
transmitted from the UE to the BS is pre-loaded into the FPGA buffer
and is transmitted in symbol 3 of each frame ("P" in third slot).
The symbol "T" shown in the second-to-last slot corresponds to
a sinusoid signal `streamed` from the host to the UE Iris using a
separate thread. The UE thus transmits this symbol (configured using
the txSymNum option) right after sending a pilot.
The "use_trig" flag, allows for two chained Irises to do the same
operation described above, except that correlator is not
needed and both nodes are configured for automatic frame counting
using a non-recurring trigger.
TDD operation starts with a trigger and runs perpetually
until it stopped by the user (Ctrl-c). Received pilots and data are
stored in binary files and they can be inspected using plt_simp.py
in the IrisUtils folder
Example:
python3 SOUNDER_TXRX.py --bsnode="RF3C000042" --clnode="RF3C000025"
where bsnode corresponds to a base station node and clnode corresponds
to a client node.
OUTPUT:
The script will generate binary files that can be analyzed using the
plt_simp.py script in folder PYTHON/IrisUtils/
IMPORTANT NOTE:
The client firmware has different features than the base station node
firmware. Therefore, ONLY bsnode can transmit a beacon whereas ONLY
cnode can correlate against such beacon. This means it is critical to
set bsnode to the serial number of a base station node and clnode to the
serial number of a client node!
NOTE ON GAINS:
Gain settings will vary depending on RF frontend board being used
If using CBRS:
rxgain: at 2.5GHz [3:1:105], at 3.6GHz [3:1:102]
txgain: at 2.5GHz [16:1:81], at 3.6GHz [15:1:81]
If using only Dev Board:
rxgain: at both frequency bands [0:1:30]
txgain: at both frequency bands [0:1:42]
The code assumes both TX and RX have the same type of RF frontend board.
Also, currently AGC only supports the CBRS RF frontend. It cannot be used
with the Iris Dev Board or UHF board
---------------------------------------------------------------------
Copyright (c) 2018-2019, Rice University
RENEW OPEN SOURCE LICENSE: http://renew-wireless.org/license
---------------------------------------------------------------------