Closed justham101 closed 7 years ago
Hi,
I think the TX side was never really optimized for speed. There should be a paper that looked into in. IIRC, they found out that the memset in the OFDM Carrier Allocator causes much of the overhead.
http://www.ccs-labs.org/bib/arcos2016accelerating/ https://github.com/gnuradio/gnuradio/blob/next/gr-digital/lib/ofdm_carrier_allocator_cvc_impl.cc#L147
In theory, I could copy the block and change it, but I didn't want to do that, since I actually rewrote the transmitter to work with the upstream OFDM blocks. I asked the guy to submit a pull request to GNU Radio, but I think that never happened.
If the receiver pipes frames into the flow graph all the time (even though you don't send any frames) that usually means that you have some DC offset/LO leakage. The receiver uses the auto correlation of the signal to detect frames (and trigger further processing). You could try connecting an antenna and space the devices a bit further. I've never seen such problems with an B210, but I als didn't use a cable recently.
Regarding the bandwidth, the 54Mpbs is the maximum physical layer throughput. You could only reach it if you send one frame with infinite length. With some overhead per frame and inter-frame spacing of the the MAC, the actual throughput of WiFi is lower.
Hi Bastian,
Thanks for the quick reply!
So I had a read of the paper you recommended, which led me to the git repository containing the modified OFDM Carrier Allocator and OFDM Mapper blocks https://github.com/gonza1207/gr-ieee802-11. Since I installed GNUradio and gr-ieee-80211 completely via PyBOMBS, is there a best way for me to test out their fork? I tried cloning the repo into a separate folder from your installation
~/PyBOMBS/src/optimised-80211/gr-ieee802-11
vs
~/PyBOMBS/src/gr-ieee802-11
and performed the following from its build folder (giving cmake the path to the pybombs installation of gnuradio) but the blocks appear to be missing when I go into GRC. Any tips?
cmake ..
make
sudo make install
sudo ldconfig
Once the code is modified I'll also test everything out with my 850MHz-6GHz log period PCB antennas to see if that solves the receiver over-activity. I might just bring the volk_profile question up on the gnuradio mailing list.
Thanks for your help so far.
Hi, I never used PyBombs. Maybe you can bring this up on the GNU Radio mailing list. There are lots of people you might know a good workflow for this.
Hi Bastian,
Host System Details:
SDR Hardware and Software Details:
I have modified your original "wifi_transceiver" example to work with my two Ettus USRP B205mini-i (see the flowchart below) and have added Control Port for performance monitoring. For testing my SDRs are connected using a 30dB attenuation loopback cable. I currently just have it set up to send from one and receive on the other.
I am running into an issue where the OFDM Carrier Allocator block in the transmitter-half of the WIFI PHY Hier is acting as a bottleneck when transmitting messages. It prevents me from strobing messages with a period smaller than around 5ms before I receive the message
Looking at the Control Port Performance Monitor output below, I can see a considerable proportion (around 80%) of the computation time being spent on the _ofdm_carrier_allocatorcvc block. Eventually its input buffer fills to 100%, applying back pressure on the adjoining buffers.
Perhaps unrelated, I have also noticed from the edge colours that the receiver side is consistently allowing frames to progress through to the WIFI Sync Long block from the WIFI Sync Short. Is it worth me adjusting this block's threshold?
I have followed your setup guide by enabling real-time scheduling (this removed most instances of 'O' overruns I previously encountered in 10MHz and 20MHz bandwidth modes) and running volk_profile. This last test is where I found some interesting results. Below I have attached some highlights which show considerable time (anything over 1000ms) being taken for certain operation types (especially _volk_32fc_s32f_power32fc). My machine was classified as _avx2_64_mmxorc. Possibly this ties into the bottleneck? I have also run volk_profile on my i7-6500U @ 2.50GHzx4 system running Ubuntu 16.10 and found similar/worse results.
If I want to make use of the 20MHz bandwidth and potential 54Mbps connection speed of this standard, surely I would need to be able to send messages considerably more often than every 10ms? Or am I missing something obvious? For testing I was using varying payload sizes all the way up to 1499 Bytes and periods as low as 1ms before the overflow occurs (theoretically 12Mbps?). I originally tested a Socket PDU UDP server and python script instead of the message strobe and found similar results.
Hopefully you can help me understand what is going on. I look forward to your reply and questions. Thanks!