HI All,
I am using gr-spread <https://github.com/CIG-SDR/CIG/tree/master/gr-spread>
module to transmit a signal using FHSS. When I receive the FHSS signal, the
received signal has a completely different hopping sequence as from the
transmitted one. I am using USRP N210 for transmission and reception. I am
not sure why this is happening. The transmitted sequence is (frequencies in
Khz)
187.5
-12.5
162.5
-62.5
62.5
137.5
-112.5
-37.5
112.5
-162.5
-137.5
-87.5
12.5
37.5
87.5
and the received sequence is
37.5
62.5
112.5
-187.5
12.5
187.5
-37.5
87.5
162.5
-87.5
0
137.5
-137.5
-112.5
-62.5
37.5
62.5
I have created a movie out of the images which plots the IQ, FFT and
WaterFall plot for the transmitted signal and the received signal using the
"plot_psd_base.py" file in gr-utils. Please have a look at both of them here
<https://drive.google.com/file/d/0B-Ksc0hMVyDVLW11QW1BekJtS0E/view> and here
<https://drive.google.com/file/d/0B-Ksc0hMVyDVSmU4YzlBVXA5ZFE/view?usp=sharing>
.
Please see the attached files for the flowgraphs, I am using as the
transmitter and receiver.
I have stored the received and transmitted signal to a file. Since these
are large files I have uploaded them to google drive here
<https://drive.google.com/a/nyu.edu/file/d/0B-Ksc0hMVyDVRTdaVTV5ZmhCVkE/view>
.
Could someone please help me understand the behavior I am observing ?
Is this some sort of synchronization issue ? What am I missing ?
Thanks in advance.
ᐧ
#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: FHSS transmit
# Author: Ajinkya Kadam
# Generated: Tue Aug 23 17:21:54 2016
##################################################
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import uhd
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from grc_gnuradio import wxgui as grc_wxgui
from optparse import OptionParser
import Spread
import time
import wx
class fhss_tx(grc_wxgui.top_block_gui):
def __init__(self):
grc_wxgui.top_block_gui.__init__(self, title="FHSS transmit")
_icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
##################################################
# Variables
##################################################
self.samp_sym = samp_sym = 64
self.samp_rate = samp_rate = 400e3
self.registers = registers = 3
self.init = init = 1, 1, 1, 1
self.generator = generator = 1, 0, 0, 1, 1
self.code_rate = code_rate = int(samp_sym * 500)
##################################################
# Blocks
##################################################
self.uhd_usrp_sink_0 = uhd.usrp_sink(
",".join(("dev_addr=192.168.10.2", "")),
uhd.stream_args(
cpu_format="fc32",
channels=range(1),
),
)
self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
self.uhd_usrp_sink_0.set_center_freq(2.45e9, 0)
self.uhd_usrp_sink_0.set_gain(30, 0)
self.uhd_usrp_sink_0.set_antenna("TX/RX", 0)
self.blocks_vector_source_x_0 = blocks.vector_source_b((0, 1, 1, 1, 1), True, 1, [])
self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, "txsignal", False)
self.blocks_file_sink_0.set_unbuffered(False)
self.Spread_synthesizer_0 = Spread.synthesizer(code_rate, 9000, samp_rate, (generator), (init))
self.Spread_cpfsk_mod_0 = Spread.cpfsk_mod(samp_sym)
##################################################
# Connections
##################################################
self.connect((self.Spread_cpfsk_mod_0, 0), (self.Spread_synthesizer_0, 0))
self.connect((self.Spread_synthesizer_0, 0), (self.blocks_file_sink_0, 0))
self.connect((self.Spread_synthesizer_0, 0), (self.uhd_usrp_sink_0, 0))
self.connect((self.blocks_vector_source_x_0, 0), (self.Spread_cpfsk_mod_0, 0))
def get_samp_sym(self):
return self.samp_sym
def set_samp_sym(self, samp_sym):
self.samp_sym = samp_sym
self.set_code_rate(int(self.samp_sym * 500))
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
def get_registers(self):
return self.registers
def set_registers(self, registers):
self.registers = registers
def get_init(self):
return self.init
def set_init(self, init):
self.init = init
def get_generator(self):
return self.generator
def set_generator(self, generator):
self.generator = generator
def get_code_rate(self):
return self.code_rate
def set_code_rate(self, code_rate):
self.code_rate = code_rate
if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print "Warning: failed to XInitThreads()"
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
(options, args) = parser.parse_args()
tb = fhss_tx()
tb.Start(True)
tb.Wait()
#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Fhss Rx
# Generated: Wed Aug 17 19:42:24 2016
##################################################
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import uhd
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from grc_gnuradio import wxgui as grc_wxgui
from optparse import OptionParser
import time
import wx
class fhss_rx(grc_wxgui.top_block_gui):
def __init__(self):
grc_wxgui.top_block_gui.__init__(self, title="Fhss Rx")
_icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
##################################################
# Variables
##################################################
self.samp_sym = samp_sym = 64
self.samp_rate = samp_rate = 400e3
self.registers = registers = 3
self.init = init = 1, 1, 1, 1
self.generator = generator = 1, 0, 0, 1, 1
self.code_rate = code_rate = int(samp_sym * 500)
##################################################
# Blocks
##################################################
self.uhd_usrp_source_0 = uhd.usrp_source(
",".join(("dev_addr=192.168.10.2", "")),
uhd.stream_args(
cpu_format="fc32",
channels=range(1),
),
)
self.uhd_usrp_source_0.set_samp_rate(samp_rate)
self.uhd_usrp_source_0.set_center_freq(2.45e9, 0)
self.uhd_usrp_source_0.set_gain(30, 0)
self.uhd_usrp_source_0.set_antenna("TX/RX", 0)
self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, "receivedSignal", False)
self.blocks_file_sink_0.set_unbuffered(False)
##################################################
# Connections
##################################################
self.connect((self.uhd_usrp_source_0, 0), (self.blocks_file_sink_0, 0))
def get_samp_sym(self):
return self.samp_sym
def set_samp_sym(self, samp_sym):
self.samp_sym = samp_sym
self.set_code_rate(int(self.samp_sym * 500))
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)
def get_registers(self):
return self.registers
def set_registers(self, registers):
self.registers = registers
def get_init(self):
return self.init
def set_init(self, init):
self.init = init
def get_generator(self):
return self.generator
def set_generator(self, generator):
self.generator = generator
def get_code_rate(self):
return self.code_rate
def set_code_rate(self, code_rate):
self.code_rate = code_rate
if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print "Warning: failed to XInitThreads()"
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
(options, args) = parser.parse_args()
tb = fhss_rx()
tb.Start(True)
tb.Wait()
_______________________________________________
Discuss-gnuradio mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio