discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Behavior of sample scheduler with hardware RX/TX (USRP)


From: Lukas Haase
Subject: Behavior of sample scheduler with hardware RX/TX (USRP)
Date: Wed, 6 May 2020 21:09:49 +0200

Hi,

I am discussing this question on usrp-users right now but I think this may 
actually be a question regarding the scheduler in gnuradio.
I have the following simple flow graph (USRP in loopback configuration):

                                                             +---------+
 +---------------+                                           |         |
 | Cosine Source |---+-------------------------------------->| QT GUI  |
 +---------------+   |    +-----------+  +-------------+     |  Freq   |
                     `--->| USRP Sink |  | USRP Source |---->|  Sink   |
                          +-----------+  +-------------+     |         |
                                                             +---------+

Both Source+Sink use the same motherboard which resets its time as follows:
  self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())

Furthermore, I let streaming start at the same time:

  self.uhd_usrp_sink_0.set_start_time(uhd.time_spec(1.0))
  self.uhd_usrp_source_0.set_start_time(uhd.time_spec(1.0))

The very puzzling result: I only get a string of L's, most likely from USRP 
Sink, indicating that samples arrived too late (later than 1s).

I can "fix" this in two ways:

1.) I break the connection from "Cosine Source" to "QT Freq Sink". Then both 
input and output sample streams are independent

2.) I let USRP Sink streaming start *later*:
  self.uhd_usrp_sink_0.set_start_time(uhd.time_spec(1.1))
  self.uhd_usrp_source_0.set_start_time(uhd.time_spec(1.0))

Fix #1 I cannot use because I need both signals in my algorithm. Fix #2 is 
unsatisfying because it feels unreliable and if I add blocks like "Skip Head" 
with a sufficiently high number (which I want to use to align my signals within 
gnuradio" I receive "U" (Underrun, USRP Sink did not receive enough samples 
from gnuradio).


My question is: How does the scheduler work exactly if we call the work 
functions of these blocks work1, work2, work3, work4?
In which time order are they called and what makes it to break the above 
diagram when USRP Source/Sink start streaming at the same time?


Thanks,
Lukas






reply via email to

[Prev in Thread] Current Thread [Next in Thread]