Hello Christian, Your configuration of the LO sharing is all reasonable. You are not using timed commands so you will not get repeatable phase offsets between the channels due to the DDC's CORDIC and the RX frontend's IF downconverter not being synchronously reset. The call to set_rx_freq for each channel should be executed with the same command time.
Have you tuned the gain to maximize your signal? I do not have a signal generator connected at the moment, but a gain of 60 sounds like you may have some more headroom to increase your amplitude. This will improve noise figure and usually SNR. When you say that two channels are 45 dB matched, what are you measuring? Thank you, Derek On Wed, Jul 26, 2017 at 10:27 PM, Christian Hahn via USRP-users < usrp-users@lists.ettus.com> wrote: > Hey USRP-users, > > I am doing some experiments that involve a USRP x300 + (2) TwinRX > daughtercards. I am observing some degraded performance and would like > some advice on the manner in which I am configuring the receivers / > mainboard / daughtercards. > > The experiment I am conducting involves collection of high-dynamic range > channel-estimates: similar requirements to a direction-finding problem. In > my setup, I have 1 remote transmitter, and 4 receivers. > > I am least confident about how I am configuring the daughtercards since > there are no examples that I could find which use these relatively new > daughtercards. > > The observations I have made indicate abnormally high phase noise and poor > relative SNR between receivers. For example, when injecting an identical > signal into all 4 receivers, receivers 0-1 and 2-3 are 45 dB matched, > respectively. However, receivers across daughtercards are not! This is > strange since in my configuration of the USRP I intended to share the same > LO across all four receivers. Furthermore, the spectrum of each receiver > is quite spurious. I am expecting more than 45 dB SNR, at least. The > signal level into the receivers is -36 dBm (average). The PAPR of the > signal is very low < 5 dB. > > This is the code I am using to configure the USRP and take a capture of > samples. It is using a thin wrapper written in Python around the > multi_usrp C++ API. > > Thank you very much, any insight is much appreciated! > > ######################### > > import uhd > import time > > # Some parameters > freq = 1600.e6 > gain = 60. > num_samples = int(10.e6) > > # Create the USRP object > usrp = uhd.Uhd('type=x300,addr=192.168.50.2,second_addr=192.168.40.2') > > # Configure mainboard > usrp.set_clock_source('external') > usrp.set_rx_subdev_spec('A:0 A:1 B:0 B:1') > usrp.set_rx_rate(100.e6) > > # Configure receivers > source = ['internal', 'companion', 'external', 'external'] > export = [True, False, False, False] > antenna = ['RX1', 'RX2', 'RX1', 'RX2'] > for chan in range(usrp.get_rx_num_channels()): > usrp.set_rx_lo_source(source[chan], 'all', chan) > usrp.set_rx_lo_export_enabled(export[chan], 'all', chan) > usrp.set_rx_antenna(antenna[chan], chan) > usrp.set_rx_freq(freq, chan) > usrp.set_rx_gain(gain, chan) > > time.sleep(1.) > > # Capture samples > samps = usrp.receive(num_samples, list(range(usrp.get_rx_num_channels())), > False) > > > _______________________________________________ > 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