With rx_streaming_samples.cc as a starting point, I created a new 
usrp2::rx_sample_handler that simply buffers samples in memory. The handler's 
operator() is shown below. I need precise timing data between receives, so it 
counts sample clock overflows to form a 64-bit time. To make sure it was 
working as I expected, it predicts the next metadata->timestamp according to 
the number of samples in the current frame and the decimation. In the next 
frame, I compare the actual timestamp to the expected timestamp and report any 
discrepancies. Once I got my own bugs out and worked around what appears to be 
a startup glitch, it's been working fine and never reports a problem unless 
there's an overrun. Elsewhere I check rx_missing() so know when overruns happen 
even if I don't see an S go by.

Today I tried synchronizing a transmitter USRP2 and receiver USRP2 using a MIMO 
cable. Now it's reporting very frequent timestamp errors, but no overruns:

    Time error in frame 2. Off by -1073638088 ticks.
    Time error in frame 20. Off by -1073897439 ticks.
    Time error in frame 39. Off by 1258260742 ticks.
    Time error in frame 40. Off by 8396679 ticks.
    Time error in frame 57. Off by -8413060 ticks.
    Time error in frame 76. Off by -171977540 ticks.
    Time error in frame 94. Off by -12634786 ticks.
    Time error in frame 95. Off by -2876 ticks.
    Time error in frame 107. Off by 193028100 ticks.
    Time error in frame 113. Off by -184639590 ticks.
    Time error in frame 132. Off by -1079918709 ticks. 
    ...

Just having the MIMO cable hooked up causes the problem. I doesn't matter 
whether I config_mimo() to set up one box with MC_WE_LOCK_TO_MIMO and one with 
MC_PROVIDE_CLK_TO_MIMO or configure both to MC_WE_DONT_LOCK. In either case it 
spews errors. If I disconnect the MIMO cable, no time errors are reported.

I'm using gnuradio 3.3.0. Both USRP2s have u2_rev3-20100603.bin. One has 
txrx_xcvr_raw_eth_20100608.bin and an xcvr2450, the other has 
txrx_raw_eth_20100608.bin and a DBSRX.

Have I misunderstood something? Is there something more I need to do? Is there 
a bug in my code? Any other thoughts or suggestions?

-Marc

bool operator()(const uint32_t *items, size_t numItems, const 
usrp2::rx_metadata *metadata)



_______________________________________________
Discuss-gnuradio mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to