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