discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Discuss-gnuradio] MSK Loopback question


From: Dan Tarr
Subject: [Discuss-gnuradio] MSK Loopback question
Date: Tue, 24 Mar 2009 11:59:40 -0400

Hi Everyone,

I apologize ahead of time if this question seems stupid or if the answer already exists somewhere and I haven't been able to find it. I am working with a group that is attempting to recreate a 56kb/sec RF Modem nominally operating at 29MHz using Minimum Frequency Shift Keying. The end goal is to have the modem we are building using gnuradio and the usrp to communicate with one of the original hardware modems. As a proof of concept, I am attempting to have my gnuradio code loopback on itself, to show that the modulation-to-demodulation works as expected. I am attempting to do this by simply reading from a file, modulating, passing it through a channel model, demodulating, and writing to a new file. The problem I am encountering is that the write data comes out as garbage, and I'm not sure what I'm doing wrong. Here is the test code that I am trying to run:
-----
from gnuradio import gr, gru, blks2
from gnuradio import usrp
from gnuradio import eng_notation
import copy
import sys
from gmsk import gmsk_demod

class my_top_block(gr.top_block):
    def __init__(self):
    gr.top_block.__init__(self)
   
    self._file_name = 'testdata.dat'
    self.src = "" self._file_name, False)
    self.unpacker = gr.packed_to_unpacked_bb(1, gr.GR_LSB_FIRST)
    self.mod = gr.cpfsk_bc(.5, 1, 2) #Modulation index = .5 for MSK, 1 bit per symbol for BFSK, 2 samples per symbol
    self.chanmod = blks2.channel_model()
    #self.demod = gmsk_demod(2)
    self.demod = gr.quadrature_demod_cf(1)  
    self.dec = gr.keep_one_in_n(gr.sizeof_float, 2) #2 Samples Per symbol
    self.slicer = gr.binary_slicer_fb()
    self.repack = gr.unpacked_to_packed_bb(1, gr.GR_LSB_FIRST)
    self.out = gr.file_sink(gr.sizeof_char, 'outdata.dat')
    self.out2 = gr.file_sink(gr.sizeof_char, 'testout.dat')   
    self.connect(self.src, self.unpacker, self.mod, self.chanmod, self.demod, self.dec, self.slicer, self.repack, self.out)
    #self.connect(self.src, self.unpacker, self.repack, self.out)
   
if __name__ == '__main__':
    tb = my_top_block()
    try:
        tb.run()
    except KeyboardInterrupt:
        pass
-----

I originally tried this code, as seen from the commented section, using the demodulation method from gmsk included in blks2, as per my understanding that demodulating a gmsk signal would be the same as an msk signal. When this did not work correctly, I then searched the boards and found that demodulating a BFSK signal had been done using the method I show above, yet I'm still recieving incorrect data on the write side. I would really appreciate any help on this, as I've been trying to solve it on my own with no success. The testfile 'testdata.dat' consists of a single line of text 'This is a test file for GNU Radio'. Below are some examples of the recieved data that I have captured.
----
Run 1: Sensitivity = 1, Keep-N-In->
ZÚ HÚ H ]Ù Y [ Ù È S T YÚ

Run 2: Sensitivity = 20, Keep-N-In->
ZÚ HÚ H ]Ù Y [ Ù È S T YÚ

Run 3: Sensitivity = 1, Keep-N-In->
ë ª "€£Š Õ) € a3 #Õ

Run 4: Sensitivity =1, Keep All samples
g g çá a çá a æg çá æ g g ç á á ff af g ç

-----

Thanks again for any help on this, I'm basically hitting my head against a brick wall.

-Dan

reply via email to

[Prev in Thread] Current Thread [Next in Thread]