Hi Marcus,
Thanks for the background. That helps greatly.
Having said that, I am unclear which commands
specifically tune the radios, so I did the
following around the frequency tuning (after all
of the time source, gain, and antenna setting code):
addr_string = "addr0=192.168.10.3,addr1=192.168.10.4"
self.uhd_usrp_sink_0_0 = uhd.usrp_sink(
",".join((addr_string, "")),
uhd.stream_args(
cpu_format="fc32",
channels=range(2),
),
)
self.uhd_usrp_sink_0_0.set_clock_source("external", 0)
self.uhd_usrp_sink_0_0.set_time_source("external", 0)
self.uhd_usrp_sink_0_0.set_clock_source("mimo", 1)
self.uhd_usrp_sink_0_0.set_time_source("mimo", 1)
self.uhd_usrp_sink_0_0.set_samp_rate(samp_rate)
self.uhd_usrp_sink_0_0.set_gain(31.5, 0)
self.uhd_usrp_sink_0_0.set_gain(31.5, 1)
self.uhd_usrp_sink_0_0.set_antenna("TX/RX", 0)
self.uhd_usrp_sink_0_0.set_antenna("TX/RX", 1)
self.analog_sig_source_x_0_1 =
analog.sig_source_c(samp_rate,
analog.GR_CONST_WAVE, 10000, 1, 0)
self.analog_sig_source_x_0_0_0 =
analog.sig_source_c(samp_rate,
analog.GR_CONST_WAVE, 10000, 1, 0)
*self.uhd_usrp_sink_0_0.set_time_unknown_pps(uhd.time_spec())
now = self.uhd_usrp_sink_0_0.get_time_now()
start_time = now + uhd.time_spec(.5)
self.uhd_usrp_sink_0_0.set_command_time(start_time)
self.uhd_usrp_sink_0_0.set_center_freq(915000000, 0)
self.uhd_usrp_sink_0_0.set_center_freq(915000000, 1)
self.uhd_usrp_sink_0_0.clear_command_time()*
However, when running it, this does not appear to
produce a constant offset either, but I'm not sure
whether this is the correct code to wrap around.
Please keep me posted. Thanks.
On Tue, Jul 5, 2016 at 12:49 PM,
<mle...@ripnet.com <mailto:mle...@ripnet.com>> wrote:
That is precisely what I'm saying, and
precisely what timed-commands for tuning were
invented. On certain hardware, after the tune
is complete, a phase-reset pulse is sent by
the FPGA. The only way for THAT to have the
desired effect is to make sure that the
phase-reset pulse happens at the same instant.
Modern synthesizers use a technique called
fractional-N synthesis. One of the side
effects of this is that you can't predict
where the LO will "lock" with respect to the
reference clock. So, any two PLL synthesizers,
even when feed an identical reference clock,
will not have the same phase offset with
respect to one another. It's the "physics" of
fractional-N PLL synthesis.
SO, if you're using GRC to generate you flows,
you'll have to modify the generated code, and
wrap set_command_time()/clear_command_time()
around the place in the code where it tunes
the radios.
Clearly, if this depends on TIME, then all
radios involved need to agree on the current
time, to high precision, hence the related
requirement for set_time_unknown_pps(), which
uses the 1PPS signal to trigger loading of the
time-of-day clocks on each USRP in the
multi_usrp object.
On 2016-07-05 15:41, Pavan Srikrishna
Yedavalli wrote:
I am using USRP N210 with SBX daughterboards.
All devices are connected to the octoclock
ref and octoclock PPS. It would be nice to
get phase alignment, but mere
coherence-with-an-offset is sufficient if
that offset stays constant across different
runs of the file/flowgraph. Are you saying
that that offset cannot be constant due to
the randomness of the LO phase offset at each
run? Thanks again.
_____________________________
From: mle...@ripnet.com
<mailto:mle...@ripnet.com>
Sent: Tuesday, July 5, 2016 12:35 PM
Subject: Re: [Discuss-gnuradio] random phase
offset constantly changing with octoclock setup
To: Pavan Yedavalli <psy2...@columbia.edu
<mailto:psy2...@columbia.edu>>
Cc: Discuss-gnuradio
<discuss-gnuradio-bounces+mleech=ripnet....@gnu.org
<mailto:discuss-gnuradio-bounces+mleech=ripnet....@gnu.org>>,
GNURadio Discussion List
<discuss-gnuradio@gnu.org
<mailto:discuss-gnuradio@gnu.org>>
WHat specific hardware line-up do you have?
You have to use set_time_unknown_pps(), but
also, if you want phase alignment (as opposed
to mere coherence-with-an-offset), you need
to use timed tuning commands across your
systems. This will result in zero relative
phase offset between boards, if you're using
SBX or UBX (on the X310). Note that this is
phase between the boards, there's no way to
make certain the the LO phase has a
predictable offset with respect to external
received signals, only that the two LO phases
agree.
On 2016-07-05 15:26, Pavan Yedavalli wrote:
Hi,
Despite all of my boards being connected
via the Octoclock (ref and pps), I am
constantly getting different phase
offsets every time I run a gnuradio
flowgraph (or python file).
I am not sure why this is happening, but
I do know that I need to call one of the
functions, set_time_now() and/or
set_time_unknown_pps(), to make sure all
of them are synced. Which one am I
supposed to call? I have been calling
set_time_unknown_pps(), but I am getting
the above/below problem with that, so
maybe set_time_now() could be correct?
In general, I don't understand why I
continually get a different random phase
offset of all of the radios after every
new flowgraph run. Shouldn't this offset
be the same if I continue to transmit at
the same frequency? Would one of the
above functions fix that?
Hopefully that is clear. Thank you so
much for the help.
--
Pavan
_______________________________________________
Discuss-gnuradio mailing list
Discuss-gnuradio@gnu.org
<mailto:Discuss-gnuradio@gnu.org>
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
--
Pavan