To communicate in ultrasound frequency band,I changed
1,Program ( originally used in RF band(2.4GHz) )
2,Daughter board ( RFX2400 2.3-2.9 GHz Rx/Tx -> LFTX Daughterboard 0-30
MHz
Tx & LFRX Daughterboard 0-30 MHz Rx )
3,Antenna (VERT2450 Antenna -> directly connect Tx and Rx by cable
without
an attenuator)
but it didn’t work well.
The program is as follows,
(Original Tx source code)
from gnuradio import gr, blks2, packet_utils, usrp2
import time
class my_top_block(gr.top_block):
def init(self):
gr.top_block.init(self)
self.src = gr.message_source(gr.sizeof_char, 2)
self.dbpsk = blks2.dbpsk_mod()
self.sink = usrp2.sink_32fc(“eth1”)
self.sink.set_center_freq(2.4e9)
self.sink.set_interp(16)
self.sink.set_gain(0.0001)
self.connect(self.src, self.dbpsk, self.sink)
def send_pkt(self):
pkt = packet_utils.make_packet("12345", 2, 1, whitening=False)
while True:
msg = gr.message_from_string(pkt)
self.src.msgq().insert_tail(msg)
msg = gr.message(1)
self.src.msgq().insert_tail(msg)
if name == “main”:
tb = my_top_block()
tb.start()
tb.send_pkt()
tb.wait()
(Original Rx source code)
from gnuradio import gr, usrp2, blks2, packet_utils
import threading
class my_top_block(gr.top_block):
def init(self):
gr.top_block.init(self)
self.src = usrp2.source_32fc(“eth1”)
self.src.set_center_freq(2.4e9)
self.src.set_decim(16)
param = gr.firdes.low_pass(1.0, 2, 1.0, 0.5, gr.firdes.WIN_HANN)
self.lpf = gr.fft_filter_ccc(1, param)
self.dbpsk = blks2.dbpsk_demod()
self.clt =
gr.correlate_access_code_bb(packet_utils.default_access_code, 12)
self.recvq = gr.msg_queue()
self.sink = gr.framer_sink_1(self.recvq)
self.connect(self.src, self.lpf, self.dbpsk, self.clt,
self.sink)
class my_watcher(threading.Thread):
def init(self, recvq):
threading.Thread.init(self)
self.setDaemon(1)
self.recvq = recvq
def run(self):
while True:
msg = self.recvq.delete_head()
ok, payload = packet_utils.unmake_packet(msg.to_string(), 0,
False)
print “payload =”, payload
if name == “main”:
tb = my_top_block()
w = my_watcher(tb.recvq)
tb.start()
w.start()
tb.wait()
and in running these two programs,
the message ,“payload = 12345” is printed in a terminal window.
and I changed
(Tx)
self.src = gr.message_source(gr.sizeof_char, 2)
self.gmsk = blks2.dbpsk_mod(40, 0.35 ,True ,False,False)
self.sink = usrp2.sink_32fc(“eth1”)
self.sink.set_center_freq(50e3)
self.sink.set_interp(512)
self.sink.set_gain(0.001)
(Rx)
self.src.set_center_freq(50e3)
self.src.set_decim(512)
param = gr.firdes.low_pass(1.0, 2 (or40) , 1.0, 0.5,
gr.firdes.WIN_HANN)
self.lpf = gr.fft_filter_ccc(1, param)
self.dbpsk = blks2.dbpsk_demod(40, 0.35,True,False,False)
I tried to change bit rate to 5kHz(=100M/512(interp,decim)/40(sample per
symbol)) and carrier frequency to 50kHz but it didn’t work.
Then I changed sample per symbol ,from 40 to 2. Then it worked
roughly.(Occasionally The Message “12345” changed to “?2345” or “1234H”
etc
…)
I found that the higher sample per symbol was, the higher error rate
was.
Is the value of samle per symbol bad?
Please give me some advice.
Thanks in advance.
Kazuki Murahashi.