discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: Synchronous recording with two USRP B210


From: Paul Boven
Subject: Re: Synchronous recording with two USRP B210
Date: Mon, 4 Nov 2019 21:36:30 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.2

Hi Ali,

Your CDA-2990 (OctoClock?) distributes both a frequency reference signal (10MHz) and a time reference signal (1PPS). To get both USRP to record at the same time, you need to first get them to run on the same time internally, and then tell them both, in advance, at what time to start streaming.

Unfortunately, that will take a bit of tinkering, and cannot be done from just regular GRC blocks at the moment.

The first half of the problem, getting them to run at the same time, is a bit more difficult than it should be, as it involves writing some code to turn your 'unknown PPS' into a know PPS. Basically, you read out the PPS status from one of the USRPs, and once you see that it changes (i.e. a PPS edge has just been detected by it) you read out the time on your PC, add one second to it, and tell both USRPs that they have to set themselves to this time value at their next PPS. For more details, see:

https://files.ettus.com/manual/page_sync.html

Once you have this done, you can send a command to each USRP to start streaming at a particular second. This could be done either from two separate applications, or just one that talks to both USRPs, using two UHD source blocks.

I've 'hacked' the required statements into the python code that gets generated when your GRC file is compiled. That has the huge drawback of having to re-patch it every time you change the flowgraph. This approach gets more convenient if you write your flowgraph in Python or C++, and add the required synchronization commands in there. Most of my measurements were done with a modified uhd_rx_cfile, where I added the synchronization logic, and an extra argument for the start time (in unix epoch seconds).

Regards, Paul Boven.

On 10/29/19 9:04 PM, alireza nazari wrote:
Hi,

I am trying to use GNURadio to receive signals and record them to files from two USRP B210(each has two channels). Both SDRs are connected to an CDA-2990 external clock. In gnuRadio I had to put two UHD source blocks and use "serial=xxx" to point them to each SDR and connect each output channel to 4 file Sink blocks. I also changed the clock and time source to "external" and synced to "unknown PPS".  However, a couple of files are different in size from the other couple. Apparently if I want to start them synchronously, all four channels should be in one source block, but how can I do that and point out each 2 channels come from a different device? When I try one USRP source block with "serial0=31A3C93,serial1=31A3D4B", I face an error bellow:
/Traceback (most recent call last):
   File "E:\Alireza\sdr_A20\top_block.py", line 207, in <module>
     main()
   File "E:\Alireza\sdr_A20\top_block.py", line 201, in main
     tb = top_block_cls()
   File "E:\Alireza\sdr_A20\top_block.py", line 125, in __init__
     self.uhd_usrp_source_0.set_clock_source('external', 1)
  File "E:\Program Files\PothosSDR\lib\python2.7\site-packages\gnuradio\uhd\uhd_swig.py", line 2987, in set_clock_source     return _uhd_swig.usrp_source_sptr_set_clock_source(self, source, mboard) RuntimeError: LookupError: IndexError: multi_usrp::mb_root(1) - LookupError: IndexError: multi_usrp::mb_root(1) - path not found
/

Is there any example available on how I can synchronously start recording from different devices? I assume this is a trivial task but I have been searching for this for a few days right now and I can't find any helpful answer. I am attaching my .grc files.

Thank you,
Ali




reply via email to

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