Tuesday, August 23, 2016

[Discuss-gnuradio] Transmit and Receive hopping Sequence in FHSS (using gr-spread module) mismtach

#!/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()

HI All, 

I am using 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 and here

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

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. 

No comments:

Post a Comment