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
Discuss-gnuradio@gnu.org
https://lists.gnu.org/mailman/listinfo/discuss-gnuradio

Reply via email to