11-03-2014 07:43 AM
Hello,
I am using 2921's and I have a Tx that generates payload only once, feeds it to a loop and the loop sends the same packet over and over again at a high rate. Please see attachment for VI screen snapshot. I want to have transmissions at regular intervals of my choice, but it does not work. I tried introducing a wait [ms] module into the loop (not shown in the attached figure), but I am facing the underflow problem.
Can someone please advise me on how to achieve this? Right now, the packet transmission interval is decided by the USRP, as soon as it sends a packet it sends another one, and if I try to control the transmission interval by using wait [ms] model, I have underflow.
Here are some details that could help you help me:
*30, 60, 90 or 120 bytes of payload
*8/16 bits sample width
*8 samples per symbol
*IQ rate of 8 MS/s
I would like to send every 10 ms, whereas sending 30,60,90,120 bytes takes about 1,2,3,4 ms, respectively.
Thanks!
Filip
11-03-2014 09:34 AM
Here are some general tips to increase your Tx streaming throughput:
0) Don't use a continuous generation at all. For many applications you don't need to stream continuously- a finite transmission (and you can loop a finite transmission) will do and you will basically not underflow in that case if you provide all the data up front.
1) As you can see from the chart, the bigger the data buffer you provide in each Write call, the faster you can stream.
2) Write sizes in multiples of the maximum packet size seem to work well. That number is 363for the USRP-292x series (although that may change in future driver releases). Try sending bursts of 10890 samples.
3) If your application allows it, set a Start Trigger Time a little in the future. Then start writing data before the device starts transmitting. For example, set the Start Trigger Time to the (current device time + 1 second). Then start writing data and you will have a second to pre-fill the on-device buffers. This will substantially reduce the number of underflows.
4) Be sure to do your data processing out of your write loop, to keep the write loop filling the pipleline as quickly as possible.
For your specific application, a finite, timed generation may be the write pattern.