We use the SHOUT measurement framework to automate TX/RX functions across multiple POWDER nodes. The measurements of different communication links will later be assigned to several groups for QPSK demodulation.
- Log onto POWDER
- Select the shout-long-measurement profile. If you do not have access to the profile, one can be created via:
Experiments→Create Experiment Profile→Git Repo→ add repo link → select the profile - Start an experiment by specifying all necessary parameters [compute node type, radio types and frequency range] and finish. If the radios are not available, please create a reservation ahead of time.
Once the experiemnt is ready, go to List View for the node hostname.
-
Use the following commands to start ssh and tmux sessions for the orchestor:
ssh -Y -p 22 -t <username>@<orch_node_hostname> 'cd /local/repository/bin && tmux new-session -A -s shout1 && exec $SHELL' ssh -Y -p 22 -t <username>@<orch_node_hostname> 'cd /local/repository/bin && tmux new-session -A -s shout2 && exec $SHELL' -
Use the following command to start a ssh and tmux session for each of the clients:
ssh -Y -p 22 -t <username>@<radio_hostname> 'cd /local/repository/bin && tmux new-session -A -s shout && exec $SHELL'
Note: tmux allows multiple remote sessions to remain active even when the SSH connection gets disconncted.
- Use the signal generation Jupyter Notebook (https://github.com/npatwari/tx_rx_processing/blob/main/QPSK_signal_generationV3.ipynb).
- Change the Info_to_TX variable to the message desired to be transmitted (using the same length at the placeholder one).
- Use the file transfer script (https://github.com/npatwari/tx_rx_processing/blob/main/filetransfer.sh) to scp the iq file to all nodes. Make sure to update the HOSTS using the List View of your experiment, as well as the iq filename. The file will show up in the ~ directory on the nodes.
- Use the following command (updating the iq file name) to move the iq file to the path where it is specified in the JSON file. This eliminates what needs to be edited in the JSON file on each node.
mv ~/QPSK_signal_2023_01_18_neal.iq /local/repository/shout/signal_library/QPSK_signal_2023_01_18_neal.iq
-
Files to modify before running an experiment:
(1) ./3.run_cmd.sh: make sure that the CMD in line 16 is
save_iq_w_tx_file.(1.5) useexternalclock = True: edit meascli.py to enable the use of external clock white rabbit in nodes.
Path:
/local/repository/shout/meascli.py.(2) save_iq_w_tx_file.json:
Path:
/local/repository/etc/cmdfiles/save_iq_w_tx_file.json.Parameters:
-
txsamps: which file to transmit samples from. Note that the file should contain complex samples as float32 IQIQ... -
txrateandrxrate: sampling rate at TX and RX. -
txgainandrxgain: TX and RX gain. -
txfreqandrxfreq: TX and RX carrier/center frequency. -
txclientsandrxclients: nodes for transmission and reception. -
rxrepeat: number of repeated sample collection runs. -
sync: whether to enable sync between TX and RX. -
nsamps: number of samples to be collected. -
wotxrepeat: number of repeated sample collection runs without TX.
-
-
Orchestrator-client connection
(1) In one of your
orchSSH sessions, run:./1.start_orch.sh(2) In the SSH session for each of the clients, run:
./2.start_client.sh -
Measurement collection In your other
orchSSH session, run:./3.run_cmd.sh -
Collection Confirmation In one of the
orchSSH sessions, check that the data folder was created by running the following command and checking for a directory calledShout_meas_datestr_timestrwith three files:log, measurements.hdf5, save_iq_w_tx_file.jsonls /local/data/ -
Transfer the measurement file back to the local host
scp -r <username>@<orch_node_hostname>:/local/data/Shout_meas_datestr_timestr /<local_dir> -
If you are testing UHD, run the following command on each node (other than orchestrator). Change filename to be an appropriate title such as probe_bes.txt if you are wanting to save the results. Otherwise, just run the
uhd_usrp_probewithout piping the output to a file.uhd_usrp_probe > filename.txtThen, run the following command on your local host to recover the created files.
scp <username>@<radio_hostname>:/local/repository/bin/filename.txt /<local_dir>
| Group Number | Link |
|---|---|
| 1 | cbrssdr1-ustar-comp --> cbrssdr1-hospital-comp |
| 2 | cbrssdr1-ustar-comp --> cbrssdr1-browning-comp |
| 3 | cbrssdr1-smt-comp --> cbrssdr1-honors-comp |
| 4 | cbrssdr1-honors-comp --> cbrssdr1-hospital-comp |
| 5 | cbrssdr1-bes-comp --> cbrssdr1-smt-comp |
| 6 | cbrssdr1-browning-comp --> cbrssdr1-fm-comp |
| 7 | cbrssdr1-browning-comp --> cbrssdr1-bes-comp |
| 8 | cbrssdr1-honors-comp --> cbrssdr1-browning-comp |
| 9 | cbrssdr1-browning-comp --> cbrssdr1-ustar-comp |
| 10 | cbrssdr1-fm-comp --> cbrssdr1-bes-comp |
| 11 | cbrssdr1-fm-comp --> cbrssdr1-browning-comp |
| 12 | cbrssdr1-fm-comp --> cbrssdr1-smt-comp |
| 13 | cbrssdr1-fm-comp --> cbrssdr1-ustar-comp |
| 14 | cbrssdr1-smt-comp --> cbrssdr1-bes-comp |
| 15 | cbrssdr1-smt-comp --> cbrssdr1-browning-comp |
| 16 | cbrssdr1-smt-comp --> cbrssdr1-fm-comp |
| 17 | cbrssdr1-smt-comp --> cbrssdr1-hospital-comp |
| 18 | cbrssdr1-hospital-comp --> cbrssdr1-smt-comp |
| 19 | cbrssdr1-hospital-comp --> cbrssdr1-ustar-comp |
| 20 | cbrssdr1-honors-comp --> cbrssdr1-bes-comp |
| 21 | cbrssdr1-honors-comp --> cbrssdr1-smt-comp |
| 22 | cbrssdr1-honors-comp --> cbrssdr1-ustar-comp |
| 23 | cbrssdr1-ustar-comp --> cbrssdr1-honors-comp |
| 24 | cbrssdr1-ustar-comp --> cbrssdr1-smt-comp |
| 25 | cbrssdr1-smt-comp --> cbrssdr1-ustar-comp |
| 26 | cbrssdr1-hospital-comp --> cbrssdr1-honors-comp |
| 27 | cbrssdr1-bes-comp --> cbrssdr1-browning-comp |
For the demonstration, we will analyze the received signals on Google Colab as our python notebook. (You can also certainly run the python notebook locally on your own Jupyter Notebook if you have one installed on your computer.)
Compress the collected measuremnt folder using zip in order to upload all its files to the Colab notebook. Or if you want a previously collected dataset, there are some in this repo.
You will then load our python notebook on Google Colab. You'll follow all of the instructions on this notebook. That includes making a copy of the notebook (the linked file is read only); uploading the zipped measuremnt file; and picking the txloc and rxloc and repNum for the measurement you will analyze.
In the demo, we will attempt to organize so that each person / group looks at a different link.