.: What is Done in 1x1 Example? :.

The figure on the right illustrates the flow of 1x1 example. The transmitter tx1 reads samples from the file 'tx1-ofdm-freq-1.dat', and performs fft to convert the frequency-domain samples to the time-domain samples. tx1 first sends three access codes, used for estimating the channel, and then sends the data payload. In our example, each symbol has 64 samples, 48 of them are occupied bins. To keep it simple to understand, in this first code release, we set the CP length to be equal to the symbol length.

The receiver rx1 detects the packet, corrects CFO, estimates the channel, and dumps the results to files. Decoding is performed offline.

.: Run the Example :.

    1. In the receiver side $ cd gr-mimo/python
    2. In the transmitter side $ cd source
    3. in the receiver-side, link the python module 'mimo_usrp2_ofdm_receiver_siso.py' to 'mimo_usrp2_ofdm_receiver.py'. Make sure the file is linked correctly. $ ln -sf mimo_usrp2_ofdm_receiver_siso.py mimo_usrp2_ofdm_receiver.py
      $ ls -la mimo_usrp2_ofdm_receiver.py
      Re-build this folder if there are errors when you run the python code. $ make clean
      $ make
    4. Start the receiver program. You can change the central frequency, decimation, and the interface, but remember to keep "rx_ant_num" as 1. $ sudo ./mimo_usrp2_rx.py -f 2.45G -d 64 -e eth1 --rx_ant_num 1 -v
    5. Wait a bit until the receiver finishes setting up. Then start the transmitter program. Again, you can change the central frequency and interpolation, but remember to keep the settings the same as in the receiver side. The value of interpolation should be the same with the decimation in the receiver side. $ sudo mimo_siso_tx1 -f 2.45G -i 64 -e eth1 -v
    6. in the receiver side, the program will keep running to capture the trace. Press 'Ctrl-C' to stop the program once you see the message '@ enter_finish_first_pkt'.
    7. In the receiver, offline decode the received signals and compute the SNR. $ cp *.dat ../../matlab/
      $ cd ../../matlab/
      $ matlab &
      Run [avg_snr_dB esnr] = decode_siso() in matlab

TIP: The python module 'mimo_ofdm_siso' will compute the channels of the packet from tx1. To distinguish between our packet and the packets that should be noise but incorrectly detected by the python signal processing block, we compute the total power of the preamble of the detected packet, and only capture the packets with a preamble the total power larger than POWER_THRESHOLD (default 0.25). However, if the noise level of your testbed environment is higher than POWER_THRESHOLD, the python module might capture noises as the packet and compute the channel of the noise, which is not what we want. If this is the case, you might need to adjust the threshold in 'gr-mimo/lib/mimo_ofdm_siso.cc' based on your testbed environment. The same thing might happen for the other three examples.

.: Result :.

The receiver will dump several log files.

    1. ofdm_recv_1.dat: This file logs every raw received sample without any processing.
    2. ofdm_peak.dat: This file logs the result of packet detection. The value '1' indicates the start of a packet.
    3. ofdm_pkt.dat: This file also logs the result of packet detection. The difference is that the value '1' indicates the start of our packet, which has a preamble with the total power larger than POWER_THRESHOLD. The value '2' indicates the packet detected incorrectly by the python signal processing block. This is used to make offline decoding in matlab easier to find the actual packet.
    4. ofdm_csi_1.dat: This file logs the channel estimation computed in the python code.

After decoding offline in Matlab, you will get the average SNR in dB and the ESNR [1]. The matlab code plots the channel estimation computed in python and in matlab, respectively. If the program is run correctly, your results should be similar to the following figures. The x-axis is the index of 48 occupied OFDM subcarriers, and the y-axis is the real part of the channel. Each figure includes three lines, each of which is the real part of the channels of 48 sub-carriers estimated from one of three access codes.

channel estimated in python

channel estimated in matlab
[1] D. Halperin, W. Hu, A. Sheth, D. Wetherall, "Predictable 802.11 Packet Delivery From Wireless Channel Measurements", ACM SIGCOMM, 2010