[USRP-users] What makes sense and what doesn't in the way carrier frequency is set for TwinRX currently?

Piotr Krysik perper at o2.pl
Sat Mar 23 11:13:11 EDT 2019

Hi all,

Update to the previous post. Nate Temple on IRC pointed that what I
observe might be a result of a bug in recent UHD's, where co-channel
phase difference on TwinRX doesn't behave as expected.
Nate's advice was to go back to UHD 3.13, which I did (I took the top
from UHD-3.13 branch).

I did tests with original twinrx_usrp_source.py (where on
UHD_3.15.0.git-13-g52138314 I had problem with phase changes).
With UHD 3.13 I didn't need additional call to set_time_unknown_pps. The
co-channel phase differences were constant from one program running to
another without it.

So it seems the strange behavior of phase in signal coming from TwinRXes
might be a result of a bug that Nate was informing about.

Best Regards,
Piotr Krysik

W dniu 13.03.2019 o 14:48, Piotr Krysik via USRP-users pisze:
> Hello everyone,
> TwinRXes requires special treatment when setting frequency in order to
> keep co-channel phase differences across multiple executions of a
> program communicating with USRP.
> What exactly 'treatment' I mean can be seen for example here:
> https://github.com/EttusResearch/gr-doa/blob/master/python/twinrx_usrp_source.py#L100
> or here:
> https://github.com/gnuradio/gnuradio/blob/master/gr-uhd/apps/uhd_app.py#L298
> The procedure is following (correct configuration of LO export and LO
> sources is assumed):
> 1. set the frequency for the channel exporting LOs, and store result,
> 2. set the frequency for the rest of the channels using the result saved
> previously and POLICY_MANUAL for rf and dsp,
> 3. set the frequency again for all channels with use of timed commands.
> In uhd_app's constructor there is also call to set_time_unknown_pps
> between points 2 and 3. In twinrx_usrp_source.py set_time_unknown_pps is
> called before point 1. The placement of this function call after the
> first setting of the carrier frequency seems to be crucial. Without it
> there are random 180 degree changes of phase differences between
> channels from one run to another. And this issue can be observed for
> twinrx_usrp_source.py, because it calls set_time_unknown_pps before
> setting the frequency (checked on UHD_3.15.0.git-13-g52138314).
> I also changed different settings to see what effects they have. I
> didn't notice any effect of POLICY_MANUAL setting in point 2. Setting
> the frequency in regular way seems to work just as well. Also removing
> point 3 completely (setting freq. with use of timed commands) seems to
> not have any effect for TwinRX (I checked this with use of sine wave as
> the input signal, in case it is important).
> In the end what I did was configuring LO export/sources in GNU Radio and
> adding usrp.set_time_unknown_pps(..) at the end of the of the
> constructor. As a result co-channel phase differences were (~) constant
> across multiple runs.
> My question:
> 1. What is the rationale for all of the steps of frequency setting for
> TwinRX? Did I have luck that most of them didn't have any effect for me?
> 2. Why is the call to set_time_unknown_pps required at all? And why when
> it is called after the first setting of carrier frequency in all
> channels, it fixes the issue with 180 degree phase shifts from one run
> to another? If it's called before, it doesn't seem to have this positive
> effect.

More information about the USRP-users mailing list