Issue with bursty transmission using gr-limesdr


I am having a bit of trouble getting a LimeSDR Mini device to play nicely in GNURadio when transmitting a bursty packetized signal.

I have implemented a simple test flowgraph which does the following:


  • Takes a PDU from a UDP message
  • Encapsulates the PDU into an HDLC frame
  • Adds a few extra HDLC flag bytes to the front and back of the frame to allow smoother synchronization
  • Applies a multiplicative scrambler to the bitstream
  • Modulates the resulting bitstream by symbol mapping it to -1/+1 and passing it through an RRC filter and a Frequency Mod block to produce a two-level FSK signal
  • Pushes the modulated signal out to a LimeSDR Sink


  • Takes a signal from a LimeSDR Source
  • Demodulates the signal using quadrature demod, RRC filtering, and Gardner timing recovery
  • Descrambles the bitstream
  • Performs HDLC deframing
  • Pushes the resulting PDUs to an asynchronous UDP sink

I’ve tried this with the LimeSDR Mini operating with a loopback coax cable - no dice. I am fairly confident that the DSP is all correct, for two reasons:

  • When I remove the LimeSDR Source/Sink blocks and connect the receive and transmit chains directly so it’s just a software simulation, my PDUs all get through the flowgraph. I tested this both with direct connection and with an AWGN channel with a fair bit of noise - no issues.
  • Instead of piping the transmit output to a LimeSDR Sink, I piped it to an I/Q file. I then played that I/Q file into the LimeSDR Sink, so that it would be modulated onto the carrier, sent over the coax, and loop back into the receiver. When I did this, the PDUs also all got through.

Due to the second test working, I think I have some sort of buffering issue with the LimeSDR not correctly transmitting my entire frame (or chopping it up) when receiving bursty input. Since the transmit side of my flowgraph is fed from an async UDP source, the stream starts and stops frequently.

Is there a graceful way to handle bursty sources in gr-limesdr? I see that there is a length tag name field which is supposed to be used for bursts, but I can’t get it to work. I’ve tried propagating a tag containing the number of samples in my frame burst - when I do this, it just doesn’t transmit at all. Is there more documentation available for this?


1 Like

This is one for @Garmus.

Any thoughts on this? I am pretty stuck. I was thinking of doing something like using gr-eventstream to zero-pad when samples aren’t available, but it hasn’t been ported to GNURadio 3.8.

When handling bursty transmissions length tag is not enough, you need to also specify “tx_time” tag at the same sample position as the length tag. Length tag specifies the burst length in samples and “tx_time” tag specifies exactly when the transmission should be happening, it is a cons:pmt pair of numbers consisting of full seconds(int64) and fractional seconds(double).