Hello,
I am trying to implement a transceiver (Full Duplex) with a Basix TX
board and TVRX board.
I generate a sine wave(3500 Hz) and transmit using Basix Tx at 100MHz.
I also want to tune the TVRX board to 100MHz and receive the same signal
and plot it on the scope in the GUI.
I tried the following code. But I did not get any received signal in the
scope.
Please let me know what could be the problem and the corrections needed
to make it work.
Thanks a lot.
Sivaram
#!/usr/bin/env python
from gnuradio import gr, usrp
from gnuradio.wxgui import stdgui2, scopesink2
import wx
class wfm_scope(stdgui2.std_top_block):
def init(self, frame, panel, vbox, argv):
stdgui2.std_top_block.init (self, frame, panel, vbox, argv)
#Parametrs
tx_inter_rate = 400
trans_freq = 100e6
recv_freq = 100e6
#Create the USRP sink (transmitter)
ut = usrp.sink_c (0, tx_inter_rate)
dac_rate = ut.dac_rate()
sampl_rate = dac_rate / tx_inter_rate
#First choose the transmitting device
tx_sd = usrp.pick_tx_subdevice(ut)
m = usrp.determine_tx_mux_value(ut, tx_sd)
ut.set_mux(m)
t_subdev = usrp.selected_subdev(ut, tx_sd)
print “Using TX board %s” % (t_subdev.side_and_name(),)
#Transmit at the maximum possible gain
t_subdev.set_gain(t_subdev.gain_range()[1])
#Set the transmit frequency and check that it worked
r = ut.tune(t_subdev._which, t_subdev, trans_freq)
if not r:
sys.stderr.write(‘Failed to set RF transmit frequency\n’)
raise SystemExit
#Turn on the transmitter
t_subdev.set_enable(True)
#Connect the sink to a SIN source
src0 = gr.sig_source_c (sampl_rate, # sample rate
gr.GR_SIN_WAVE, # waveform type
3500, # frequency
16000, # max amplitude
0) # DC Offset
self.connect (src0, ut)
#---------------------------------------------------------------------------------
#Create the USRP Source (receiver)
ur = usrp.source_c(0)
adc_rate = ur.adc_rate()
rx_decim_rate = int(adc_rate // sampl_rate)
ur.set_decim_rate(rx_decim_rate)
print "Rx decim rate ", rx_decim_rate
#Choose the recieving device
rx_sd = usrp.pick_rx_subdevice(ur)
m = usrp.determine_rx_mux_value(ur, rx_sd)
ur.set_mux(m)
r_subdev = usrp.selected_subdev(ur, rx_sd)
print “Using RX board %s” % (r_subdev.side_and_name(),)
#Set the recieve frequency
r = ur.tune(r_subdev._which, r_subdev, recv_freq)
if not r:
sys.stderr.write(‘Failed to set RF recieve frequency\n’)
raise SystemExit
conv2 = gr.complex_to_float ()
cf = gr.complex_to_float()
self.connect (ur,conv2)
scope as final sink
self.foo = scopesink2.scope_sink_f(panel, title=“Received signal”,
sample_rate=sampl_rate,v_scale=5e3)
self.connect (conv2, (self.foo,0))
vbox.Add (self.foo.win, 1, wx.EXPAND)
self.foo1 = scopesink2.scope_sink_f(panel, title=“Transmitted signal”,
sample_rate=sampl_rate,v_scale=5e3)
self.connect (src0, cf, (self.foo1,0))
vbox.Add (self.foo1.win, 1, wx.EXPAND)
if name == ‘main’:
app = stdgui2.stdapp (wfm_scope, “WFM RX”)
app.MainLoop ()