I followed the suggestions and plotted the received baseband signal in the IQ constellation. The phase offset of the baseband received by the two RX antennas are still not constant... Attached are the update flow graph and python program. Would be great if you can take a look again. Thanks.
On Thu, Apr 23, 2015 at 3:06 PM, <mle...@ripnet.com> wrote: > If you have the Octoclock-G connected to both units, then you don't need > to use the MIMO cable. > > Make sure that both mboards have "external" for both the reference clock > and pps selections, and that "device time" is set to "unknown PPS" for both > of them. > > > > > On 2015-04-23 14:49, Pengyu Zhang wrote: > > Hi, > > I am working on phase coherent reception using 2 USRP N210s where each is > mounted with a SBX. The 2 N210s are connected via a MIMO cable. 10MHz > reference clock and PPS are generated by an OctoClock-G and are fed into > each N210. In this experiment, a TX antenna transmits a constant signal to > 2 RX antennas. I want to obtain coherent phases at the 2 RX antennas. > Attached is the flow graph I am executing. It seems that I cannot achieve > coherent phase at the 2 Rx antennas. Any suggestions? Thanks. > > Pengyu > > _______________________________________________ > Discuss-gnuradio mailing > listDiscuss-gnuradio@gnu.orghttps://lists.gnu.org/mailman/listinfo/discuss-gnuradio > >
mimo_signal.grc
Description: Binary data
#!/usr/bin/env python ################################################## # Gnuradio Python Flow Graph # Title: Top Block # Generated: Thu Apr 23 15:10:01 2015 ################################################## from gnuradio import analog from gnuradio import blocks from gnuradio import eng_notation from gnuradio import gr from gnuradio import uhd from gnuradio import wxgui from gnuradio.eng_option import eng_option from gnuradio.filter import firdes from gnuradio.wxgui import scopesink2 from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import time import wx class top_block(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Top Block") _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png" self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY)) ################################################## # Variables ################################################## self.samp_rate = samp_rate = 1000000 ################################################## # Blocks ################################################## self.wxgui_scopesink2_1 = scopesink2.scope_sink_f( self.GetWin(), title="amp scope", sample_rate=samp_rate, v_scale=0, v_offset=0, t_scale=0, ac_couple=True, xy_mode=False, num_inputs=2, trig_mode=wxgui.TRIG_MODE_AUTO, y_axis_label="Counts", ) self.Add(self.wxgui_scopesink2_1.win) self.uhd_usrp_source_0_0 = uhd.usrp_source( device_addr="addr=192.168.10.3", stream_args=uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_source_0_0.set_clock_source("external", 0) self.uhd_usrp_source_0_0.set_time_source("external", 0) self.uhd_usrp_source_0_0.set_subdev_spec("A:0", 0) self.uhd_usrp_source_0_0.set_time_unknown_pps(uhd.time_spec()) self.uhd_usrp_source_0_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0_0.set_center_freq(915000000, 0) self.uhd_usrp_source_0_0.set_gain(10, 0) self.uhd_usrp_source_0_0.set_auto_dc_offset(0,0) self.uhd_usrp_source_0_0.set_antenna("RX2", 0) self.uhd_usrp_source_0_0.set_bandwidth(2000000, 0) self.uhd_usrp_source_0 = uhd.usrp_source( device_addr="addr=192.168.10.2", stream_args=uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) 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_subdev_spec("A:0", 0) self.uhd_usrp_source_0.set_time_unknown_pps(uhd.time_spec()) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_center_freq(915000000, 0) self.uhd_usrp_source_0.set_gain(10, 0) self.uhd_usrp_source_0.set_auto_dc_offset(0,0) self.uhd_usrp_source_0.set_antenna("RX2", 0) self.uhd_usrp_source_0.set_bandwidth(2000000, 0) self.uhd_usrp_sink_0 = uhd.usrp_sink( device_addr="addr0=192.168.10.3", stream_args=uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) 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_time_unknown_pps(uhd.time_spec()) self.uhd_usrp_sink_0.set_samp_rate(samp_rate) self.uhd_usrp_sink_0.set_center_freq(915000000, 0) self.uhd_usrp_sink_0.set_gain(10, 0) self.uhd_usrp_sink_0.set_antenna("TX/RX", 0) self.uhd_usrp_sink_0.set_bandwidth(2000000, 0) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_file_sink_1 = blocks.file_sink(gr.sizeof_gr_complex*1, "/home/vijaykp/rx2_", False) self.blocks_file_sink_1.set_unbuffered(False) self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, "/home/vijaykp/rx1_", False) self.blocks_file_sink_0.set_unbuffered(False) self.blocks_complex_to_mag_0_0 = blocks.complex_to_mag(1) self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1) self.analog_sig_source_x_1 = analog.sig_source_f(samp_rate, analog.GR_CONST_WAVE, 1000, 0.5, 0) ################################################## # Connections ################################################## self.connect((self.blocks_complex_to_mag_0, 0), (self.wxgui_scopesink2_1, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.blocks_complex_to_mag_0, 0)) self.connect((self.blocks_complex_to_mag_0_0, 0), (self.wxgui_scopesink2_1, 1)) self.connect((self.uhd_usrp_source_0_0, 0), (self.blocks_complex_to_mag_0_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.uhd_usrp_source_0_0, 0), (self.blocks_file_sink_1, 0)) self.connect((self.analog_sig_source_x_1, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.analog_sig_source_x_1, 0), (self.blocks_float_to_complex_0, 1)) self.connect((self.blocks_float_to_complex_0, 0), (self.uhd_usrp_sink_0, 0)) # QT sink close method reimplementation def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.wxgui_scopesink2_1.set_sample_rate(self.samp_rate) self.analog_sig_source_x_1.set_sampling_freq(self.samp_rate) self.uhd_usrp_source_0.set_samp_rate(self.samp_rate) self.uhd_usrp_source_0_0.set_samp_rate(self.samp_rate) self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate) if __name__ == '__main__': import ctypes import os if os.name == 'posix': try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print "Warning: failed to XInitThreads()" parser = OptionParser(option_class=eng_option, usage="%prog: [options]") (options, args) = parser.parse_args() tb = top_block() tb.Start(True) tb.Wait()
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio