Please help me figure out the strange problem I’m having.
In my system, the software is receiving four interleaved streams of
data from the usrp. I am trying to receive two channels on each input
the usrp, so I setup the usrp to ddc the center of the two channels down
zero frequency and then (in gnuradio) I seperate the channels by doing
another ddc to bring each channel to zero hz and then a low pass filter.
The second channel requires a conjugation before the ddc to flip it to
positive side of the freq spectrum.
I’m getting a strange behavior only on RX1 (input A of the Basic RX in
position1 of the usrp). If I input a signal only on channel 1, to all
usrp inputs it bleeds over to channel 2 at about 60% amplitude only on
The same thing happens if I input a signal only on channel 2 – it
over about 60% to channel 1.
This behavior does not happen on the other three receivers at all and
continues to present itself only on RX1 even if I swap the cables
signals to the four usrp inputs. I have even tried swapping the usrp,
basic RX boards, and the cables inside the usrp enclosure. The problem
always stays with RX1. I know the problem is somewhere in the usrp, the
I initialize the usrp, or in my software.
I don’t think the problem is in my software because I simply use four
instances of the same code to process all four inputs. But I’m not sure
I’m using the following python to initialize the usrp, then I pass the
to c++ code via sm.Run_SM1680(adc._u).
Please tell me if you see anything wrong with this.
from gnuradio import usrp, gru
from gnuradio import sm
nchan = 4
adc = usrp.source_c(0, 250, fpga_filename=“std_4rx_0tx.rbf”)
if not adc.set_nchannels(nchan):
sys.stderr.write(‘set_nchannels(%d) failed to set number of
adc._write_oe( 0, 0xffff, 0xffff )
adc.write_io( 0, 0xfff7, 0xffff )
gain = 0
subdev = adc.db + adc.db
target_freq = sm.Get_Center()
for i in range(len(subdev)):
r = usrp.tune(adc, i, subdev[i], target_freq)
if not r:
print “set_freq: failed to set subdev[%d] freq to %f” % (i,
if name == “main”: