discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: Phase Synchronize 2 USRP N200 w/ SBX cards


From: Marcus D. Leech
Subject: Re: Phase Synchronize 2 USRP N200 w/ SBX cards
Date: Thu, 10 Jun 2021 07:26:44 -0400
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0

On 06/10/2021 04:50 AM, Skyvalakis Konstantinos wrote:

I set up the following flowchart:

                                ​

Multi_usrp_source -----> complex_to_real -------> WX GUI Scope Sink


I repeated the phase identical test tone experiment multiple times and I could clearly see that the phase offset between the 2 channels was different almost every time.


Phase offsets were ranging from almost 0 degrees up to 90 degrees.


Thanks.

Gnu Radio does NOT emit code that wraps the tuning requests in timed commands, so the synthesizers won't be properly
  tuned for phase synchronization.  ALSO the WX GUI Scope sink had (as I recall) a bug that caused things to appear out
  of phase even if they weren't.  You should probably use the QT GUI time sink instead--what version of GR are you using?
  The WX GUI widgets have been deprecated for several years now, and don't even appear in later versions of GR.

You'd have to modify the generated code to have it wrap the tuning requests in timed commands.



From: Marcus D Leech <patchvonbraun@gmail.com>
Sent: Wednesday, June 9, 2021 10:53 PM
To: Skyvalakis Konstantinos
Cc: Discuss-gnuradio@gnu.org
Subject: Re: Phase Synchronize 2 USRP N200 w/ SBX cards
 


Sent from my iPhone

On Jun 9, 2021, at 3:52 PM, Skyvalakis Konstantinos <kskyvalakis@isc.tuc.gr> wrote:



​Οk, I know the way of the atan2 method you are proposing. I will try it tomorrow when I will have access to the equipment again.


When you said injecting a phase identical test tone earlier you meant, driving the signal from the generator to the RX2 port of each one of the SBX daughterboards (using a splitter), with equal length cables and then checking the phase offset between the 2 channels?


Exactly this, yes. You want to measure the phase offset that is dominated by the receivers and not external path length differences. 

Thanks.



From: Marcus D Leech <patchvonbraun@gmail.com>
Sent: Wednesday, June 9, 2021 9:05 PM
To: Skyvalakis Konstantinos
Cc: Discuss-gnuradio@gnu.org
Subject: Re: Phase Synchronize 2 USRP N200 w/ SBX cards
 
Your generated tone should be OK as long as the path lengths are the same during phase calibration. 

Measuring mutual phase offset can be done in a number of ways like taking the atan2 of the two channels and averaging. 

Sent from my iPhone

On Jun 9, 2021, at 1:50 PM, Skyvalakis Konstantinos <kskyvalakis@isc.tuc.gr> wrote:


You assumed correctly. I am doing this in a single multi_usrp object, so it is ok. I will also remove that sleep command.

I don't know how I can measure the phase difference between the two RX channels. In my DoA experiment I am just transmitting a tone @ 868MHz from an RF generator and I'm receiving it from the 2 RX channels.

Also could you elaborate more on the last thing you mentioned, the one about the phase identical test tone....

On Jun 9, 2021 19:51, "Marcus D. Leech" <patchvonbraun@gmail.com> wrote:
On 06/09/2021 10:11 AM, Skyvalakis Konstantinos wrote:

I have 2 USRP N200 devices, each one equipped with an SBX daughterboard.


I am providing 10MHz ref clock and 1 PPS input on both devices with equal length cables, from an external signal generator.


My application is DoA. Is it possible to do it, with 2 USRP N200 and the SBX daughterboards?


1) Is the following timed commands code snippet correct for frequency and phase synchronization of both SBX cards?


        self.source = uhd.usrp_source(
         ",".join(("addr0=192.168.10.2, addr1=192.168.10.3", "")),
         uhd.stream_args(
         cpu_format="fc32",
         channels=range(2),
         ),
        )
        self.source.set_clock_source('external', 0)
        self.source.set_time_source('external', 0)
        self.source.set_clock_source('external', 1)
        self.source.set_time_source('external', 1)
        self.source.set_samp_rate(2e6)
        self.source.set_time_unknown_pps(uhd.time_spec())
        self.source.set_gain(50, 0)
        self.source.set_antenna('RX2', 0)
        self.source.set_gain(10, 1)
        self.source.set_antenna('RX2', 1)

        time.sleep(1)

        self.source.clear_command_time()
        self.source.set_command_time(self.source.get_time_now() + uhd.time_spec_t(0.1));
        self.source.set_center_freq(uhd.tune_request(868e6,0), 0)
        self.source.set_center_freq(uhd.tune_request(868e6,0), 1)

        time.sleep(0.11)

        self.source.clear_command_time()



2) Is there anyway to measure and compensate the offset between the 2 SBX daughterboards?


3) Can this synchronization problem be tackled easier with a MIMO cable (since I do have one) ?​


Thank you in advance.


Konstantinos

Assuming that you're streaming two channels in a single multi_usrp object, then this looks OK, except there's no reason for that
  time.sleep(0.11) *before* the self.source.clear_command_time().  

What magnitude of residual phase-offset are you seeing, and how are you measuring it?

A MIMO cable won't help with residual phase offset.

The usual way of calibrating this out is to inject a phase-identical test tone into each channel, and measure the phase offset when
  starting up. 








reply via email to

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