On 12/14/2020 10:19 AM, Bach Nguyen via USRP-users wrote:
Hi all,
I was using my 2 B200s to measure the magnitude and phase difference
in voltage gain of two signal chains on-site and I notice that there
is a random phase offset between the 2 inputs. I read the USRP Manual
on Device Synchronization and realize that I was tuning the 2 B200
asynchronously, even though I had them start streaming synchronously
using the external PPS. There are several things that I would like to
ask and clarify:
1. Does the usrp->set_command_time(cmd_time) set all the subsequent
command (before clear_command_time()) to start after cmd_time
seconds or they will start at the exact cmd_time instant in the
time registers?
The timed commands trigger at the time instant in the on-board timestamp
registers.
1. Once I retune the 2 B200s simultaneously to centre frequency f1,
then the device is closed or re-tuned to other frequency, f2, if I
re-tune it back to center frequency f1, would the phase offset
between the 2 B200 RX streams be the same as original, when I
firstly re-tuned it?
No. Since the B200 DO NOT SUPPORT timed-tuning, and since there's no
hardware support for the necessary re-synch feature, you can't
get a predictable phase-offset between two B200s, even with shared
10Mhz reference, 1PPS, and the use of timed commands.
1. Does the phase offset, after re-tuning, varies with different
centre frequency (ie. offset at frequency f1 different from
frequency f2)?
Yes. That's just a property of PLL synthesizers without phase re-synch.
1. My code was a modified version of the rx_samples_to_file.cpp, with
the synchronization principle mentioned below. Would it be enough
to make the 2 B200s synchronized with constant phase offset
between LOs? Besides, the program was started for a week, then
stopped completely, and re-started again after a few days (I
regard this as "device is closed", and re-initialized) , would the
phase offset between LO, in this case, remains constant as before
the stop?
No. See above.
The program I used has 2 threads, each for 1 B200. The threads' tasks
(after adding the LO alignment part) are:
* 1st thread: Call set_time_unknown_pps() on the 1st B200,once done,
send sync_signal to 2nd B200. Then use the set_command_time(3.0),
set_rx_freq(fc,0) and clear_command_time() for LO phase offset.
* 2nd thread: Keep polling the sync_signal, once it receives, use
set_time_next_pps(1.0) to synchronize the 2 B200. Once done, I use
the set_command_time(3.0), set_rx_freq(fc,0) and
clear_command_time() for LO phase offset.
* After the above steps, both threads have a while loop to keep
polling the value of time register for the last PPS, if it is 5
seconds then the stream command is issued in both threads. After
that, I use the rx_stream->recv to record the samples from the 2
B200s.
Cheers,
Bach
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com
_______________________________________________
USRP-users mailing list
USRP-users@lists.ettus.com
http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com