Discussion and technical support related to USRP, UHD, RFNoC
View all threadsHey 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
freq = 1600.e6
gain = 60.
num_samples = int(10.e6)
usrp = uhd.Uhd('type=x300,addr=192.168.50.2,second_addr=192.168.40.2')
usrp.set_clock_source('external')
usrp.set_rx_subdev_spec('A:0 A:1 B:0 B:1')
usrp.set_rx_rate(100.e6)
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.)
samps = usrp.receive(num_samples, list(range(usrp.get_rx_num_channels())),
False)
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
freq = 1600.e6
gain = 60.
num_samples = int(10.e6)
usrp = uhd.Uhd('type=x300,addr=192.168.50.2,second_addr=192.168.40.2')
usrp.set_clock_source('external')
usrp.set_rx_subdev_spec('A:0 A:1 B:0 B:1')
usrp.set_rx_rate(100.e6)
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.)
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