It's an Octoclock-G (https://www.ettus.com/product/details/OctoClock-G is what I ordered). And yes, that is true about the external clock inputs and GPS lock. Does that matter if it's an Octoclock-G?
On Thu, Jul 7, 2016 at 7:46 PM, <mle...@ripnet.com> wrote: > Is this an Octoclock, or Octoclock-G? > > If it's just an Octoclock, then it has no internal clocks, and acts as a > high-quality clock/pps distributor. > > I notice you don't have the external clock inputs connected to anything, > and there's no GPS LOCK indicator. > > > > > > > > > On 2016-07-07 17:08, Pavan Yedavalli wrote: > > Hi Marcus, > > I did what you suggested by wrapping the timed commands as follows: > > For the TX side (what you sent me in for_pavan.py): > > self.uhd_usrp_source_0.set_time_unknown_pps(uhd.time_spec()) > now = self.uhd_usrp_source_0.get_time_now() > start_time = now + uhd.time_spec(.5) > self.uhd_usrp_source_0.set_command_time(start_time) > self.uhd_usrp_source_0.set_clock_source("external", 0) > self.uhd_usrp_source_0.set_time_source("external", 0) > self.uhd_usrp_source_0.set_clock_source("external", 1) > self.uhd_usrp_source_0.set_time_source("external", 1) > self.uhd_usrp_source_0.set_samp_rate(samp_rate) > self.uhd_usrp_source_0.set_time_unknown_pps(uhd.time_spec()) > self.uhd_usrp_source_0.set_center_freq(rx_center_freq, 0) > self.uhd_usrp_source_0.set_normalized_gain(rx_gain, 0) > self.uhd_usrp_source_0.set_antenna(Antenna_sel, 0) > self.uhd_usrp_source_0.set_center_freq(rx_center_freq, 1) > self.uhd_usrp_source_0.set_normalized_gain(rx_gain, 1) > self.uhd_usrp_source_0.set_antenna("TX/RX", 1) > self.uhd_usrp_source_0.clear_command_time() > > And for the RX side (B210_Phase_Viewer.py): > > self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec()) > now = self.uhd_usrp_sink_0.get_time_now() > start_time = now + uhd.time_spec(.5) > self.uhd_usrp_sink_0.set_command_time(start_time) > self.uhd_usrp_sink_0.set_clock_source("external", 0) > self.uhd_usrp_sink_0.set_time_source("external", 0) > self.uhd_usrp_sink_0.set_subdev_spec("A:0", 0) > self.uhd_usrp_sink_0.set_clock_source("external", 1) > self.uhd_usrp_sink_0.set_time_source("external", 1) > self.uhd_usrp_sink_0.set_subdev_spec("A:0", 1) > self.uhd_usrp_sink_0.set_samp_rate(samp_rate) > self.uhd_usrp_sink_0.set_center_freq(915e6, 0) > self.uhd_usrp_sink_0.set_gain(1.5, 0) > self.uhd_usrp_sink_0.set_center_freq(915e6, 1) > self.uhd_usrp_sink_0.set_gain(1.5, 1) > self.uhd_usrp_sink_0.clear_command_time() > > > However, it still does not work when I have the phase viewer running and > stop and restart the for_pavan.py flowgraph. I had a run of three straight > where the phase offset was around 11 degrees, but then afterward it started > fluctuating again (-140, 45, 81 degrees, etc.). > > Attached is the front of the Octoclock. I believe the settings are > correct, but maybe something is wrong with that. Note that the PPS flashes > (but I couldn't capture when it flashed in the picture). Also note that I > get the thread priority warning when running each of them, but I don't > think that is a problem. > > I am really not sure what the issue is here, sadly. Thanks again for your > help and patience. > > > On Wed, Jul 6, 2016 at 6:22 PM, Marcus D. Leech <mle...@ripnet.com> wrote: > >> On 07/06/2016 09:04 PM, Pavan Yedavalli wrote: >> >> Hi Marcus, >> >> Trying the attached code with two of the USRPs transmitting, and with the >> B210_Phase_Viewer for the other 2 USRPs receiving, still gives me different >> offsets for every different run call. And by different run call, I'm simply >> running the flowgraph once, seeing the offset, stopping the graph, and then >> running it again, seeing the new offset, and so on. I must be doing >> something wrong here. A you mentioned, since all of them are using the >> Octoclock, that means that they all are having the same reference and pps, >> but both receive boards may also not be timed in an aligned fashion for the >> same reason, right? So the receive side LO offsets could also be causing >> problems in narrowing down the issue, I'm assuming? Thanks again. >> >> Yes, the receive side needs to be as mutually-coherent as possible as >> well. >> >> Also, I forgot to mention that you'll need to modify the output of the >> flow-graph I provided to wrap timed-command stuff around the tuning. >> >> Same on any RX flow-graph. That's the only sane we to be able to measure >> any kind of phase-offset that you can trust. >> >> If the RX side is a B210, you don't need to do timed commands (and, >> indeed, they aren't supported for tuning on the B210). What I'd do is >> leave the RX side running, while you bring the TX side up and down. >> >> >> >> >> On Wed, Jul 6, 2016 at 5:47 PM, Marcus D. Leech <mle...@ripnet.com> >> wrote: >> >>> On 07/06/2016 02:48 PM, Pavan Yedavalli wrote: >>> >>> I disconnected the MIMO cable and now have all 4 directly connected to >>> the Octoclock, but I get the same results in which the offset changes at >>> every run (using the above code). >>> >>> What about the attached code? >>> >>> Keep in mind that you'll have to measure it with something that is also >>> mutually coherent. >>> >>> >>> >>> >>> On Tue, Jul 5, 2016 at 9:11 PM, Marcus D. Leech <mle...@ripnet.com> >>> wrote: >>> >>>> On 07/05/2016 11:45 PM, Pavan Yedavalli wrote: >>>> >>>> Yes, sorry - two of them are actually connected via MIMO cable, with >>>> the master connected to the Octoclock. Then the other two are directly >>>> connected to the Octoclock. I used the MIMO cable just because I had it, >>>> but hopefully that's not changing the functionality. >>>> >>>> Yes, I added even more attenuation because the Tx gain was already >>>> quite low. Thanks for the suggestion. >>>> >>>> So, a useful experiment would be to do your coherent TX from a pair >>>> that are both hooked up to the Octoclock. >>>> >>>> >>>> >>>> >>>> On Tue, Jul 5, 2016 at 7:29 PM, Marcus D. Leech <mle...@ripnet.com> >>>> wrote: >>>> >>>>> On 07/05/2016 09:45 PM, Pavan Yedavalli wrote: >>>>> >>>>> According to the spectrum analyzer, there's nothing being transmitted >>>>> in the 900 MHz band around me, so that is actually fine. The biggest >>>>> unknown could be what you are saying about how they combine in the RSSI >>>>> circuit (which I'm not sure how it works). >>>>> >>>>> I am not gaining any more insight when using over-the-air antennas, so >>>>> I used 2 USRPs as transmitters and 2 as receivers, connected them directly >>>>> with SMA cables (and attenuation), and used Derek Kozel's >>>>> B210_Phase_Viewer >>>>> on the receive side to see whether they were aligned after each run. And I >>>>> am noticing that they are not. The first run produced a 125 degree phase >>>>> offset, while the second one produced a 3 degree phase offset, and this >>>>> continues to fluctuate after each run (see attached). Note that I am using >>>>> the code that I pasted above to transmit. >>>>> >>>>> I must be doing something wrong with the code, or not wrapping the >>>>> timed commands around the correct code. I am not sure though. Thanks >>>>> again. >>>>> >>>>> Looks like you have a bit of clipping as well. Back off the gain on >>>>> the TX side. >>>>> >>>>> >>>>> >>>>> >>>>> On Tue, Jul 5, 2016 at 5:51 PM, Marcus D. Leech <mle...@ripnet.com> >>>>> wrote: >>>>> >>>>>> On 07/05/2016 08:20 PM, Pavan Yedavalli wrote: >>>>>> >>>>>> I see, but the offset in phase between the two radios will affect the >>>>>> amplitude, right? That was the assumption I was using, since it gives out >>>>>> an amplitude reading, but the phase clearly will affect that reading, I >>>>>> presumed. >>>>>> >>>>>> Unfortunately, I don't have any documentation on the RSSI circuit >>>>>> apart from the following description from the vendor: >>>>>> >>>>>> The RSSI functionality allows the sampling of the received signal to >>>>>> provide an indication of the amount of energy being harvested. When DSET >>>>>> is >>>>>> driven high the harvested DC power will be directed to an internal sense >>>>>> resistor, and the corresponding voltage will be provided to the DOUT pin. >>>>>> The voltage on the DOUT pin can be read after a 50μs settling time. RSSI >>>>>> shows the actual power level that is being received at the antenna. This >>>>>> number is accurate from 0.04mW to 50mW. >>>>>> >>>>>> This probably does not help at all to debug. Sorry about that. >>>>>> >>>>>> You're making assumptions about how your signals will combine in that >>>>>> RSSI circuit, and how they'll combine with other ambient signals within >>>>>> your frequency band. I cannot imagine that being stable. >>>>>> >>>>>> To measure the phase between two signals, you need a device that is >>>>>> phase sensitive (like, for example, another USRP with two inputs), and >>>>>> compute conjugate multiplication between them, or the phase-angle, >>>>>> via the complex-argument block. >>>>>> >>>>>> Or just plot the two signals on a Qt Time sync, and observe that the >>>>>> phase relationship is the same--that of course requires that your >>>>>> receiver system is internally coherent between the two channels. >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Jul 5, 2016 at 4:42 PM, Marcus D. Leech <mle...@ripnet.com> >>>>>> wrote: >>>>>> >>>>>>> On 07/05/2016 07:28 PM, Pavan Yedavalli wrote: >>>>>>> >>>>>>> The way I'm doing it is the following (please correct me if there is >>>>>>> a fundamental error in assumptions): I am actually using an RSSI circuit >>>>>>> that is receiving the power from the USRPs/antennas, and I'm determining >>>>>>> whether the phase offset is the same based on that RSSI value. For >>>>>>> example, >>>>>>> I run the flowgraph once, and I get an RSSI value on the other side of >>>>>>> 2.5 >>>>>>> mW, but when I run the flowgraph again, it produces an RSSI value of 9.5 >>>>>>> mW. In my mind, if that offset was constant, then it would have produced >>>>>>> something around 2.5 mW again. I know this adds another variable to the >>>>>>> mix, but I have confirmed the accurate functioning of the RSSI >>>>>>> circuit/receiver as well as the static nature of the channel, so its >>>>>>> reading is very reliable. >>>>>>> >>>>>>> Could you describe this RSSI circuit? Normally, they're only >>>>>>> sensitive to amplitude, not phase. >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Tue, Jul 5, 2016 at 4:19 PM, Marcus D. Leech <mle...@ripnet.com> >>>>>>> wrote: >>>>>>> >>>>>>>> On 07/05/2016 06:47 PM, Pavan Yedavalli wrote: >>>>>>>> >>>>>>>> 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> 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 >>>>>>>>> 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> >>>>>>>>> Cc: Discuss-gnuradio < >>>>>>>>> discuss-gnuradio-bounces+mleech=ripnet....@gnu.org>, GNURadio >>>>>>>>> Discussion List <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 >>>>>>>>> https://lists.gnu.org/mailman/listinfo/discuss-gnuradio >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Pavan >>>>>>>> >>>>>>>> How are you measuring the phase-offset between the two sinks? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Pavan >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Pavan >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Pavan >>>>> >>>>> >>>> >>>> >>>> -- >>>> Pavan >>>> >>>> >>> >>> >>> -- >>> Pavan >>> >>> >> >> >> -- >> Pavan >> >> > > > -- > Pavan > > -- Pavan
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio