discuss-gnuradio
[Top][All Lists]
Advanced

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

Re: [Discuss-gnuradio] bpsk Simulation


From: Charles Irick
Subject: Re: [Discuss-gnuradio] bpsk Simulation
Date: Mon, 15 Mar 2010 13:04:50 -0400

Hi,
I'm also having issues with the use of this block if I try the same
concept. I'm not concerned with the noise generation and just want to
modulate and then demodulate data. I am using the vector creation and
packing as stated above. The results I'm getting are deterministic,
just incorrect. Here is what i'm using:

099         self.src_data = 3 * [0x40,0x41,0x42,0x43,]
100         self.src0 = gr.vector_source_b(self.src_data)
101         self.mod = blks2.dbpsk_mod(8,0.35,False,True,False)
102         self.demod =
blks2.dbpsk_demod(8,0.35,0.1,None,0.5,0.005,False,True,False)
103         self.pack = gr.unpacked_to_packed_bb(1,gr.GR_MSB_FIRST)
104         self.connect(self.src0,self.mod,self.demod,self.pack)
105
106         self.sink1 = gr.vector_sink_b()
107         self.connect(self.pack,self.sink1)
108
109         self.sink2 = gr.vector_sink_b()
110         self.connect = (self.src0,self.sink2)
111
112     def print_data(self):
113         print "data: ",self.src_data
114         print len(self.src_data)
115         print "demod: ",self.sink1.data()
116         print len(self.sink1.data())
117         print "check: ",self.sink2.data()
118         print len(self.sink2.data())

Here is the output:
>>> gr_fir_ccf: using SSE

Modulator:
bits per symbol:     1
Gray code:           False
RRC roll-off factor: 0.35

Demodulator:
bits per symbol:     1
Gray code:           False
RRC roll-off factor: 0.35
Costas Loop alpha:   1.00e-01
Costas Loop beta:    2.50e-03
M&M mu:              0.50
M&M mu gain:         1.00e-01
M&M omega:           8.00
M&M omega gain:      2.50e-03
M&M omega limit:     0.01

data:  [64, 65, 66, 67, 64, 65, 66, 67, 64, 65, 66, 67]
12
demod:  (1, 239, 1, 5, 9, 13, 1, 5, 9, 13, 1)
11
check:  ()
0

Thanks in advance for any help


On Thu, Mar 11, 2010 at 11:43 AM, Tom Rondeau <address@hidden> wrote:
> On Thu, Mar 11, 2010 at 4:09 AM, Axel Belliard <address@hidden> wrote:
>> Hi,
>>
>> I'm new to gnu radio. To get familiar with this project, I'm trying to
>> simulate a dbpsk link.
>>
>> My flow graph look like this :
>> stream of bits => Modulation => frequency up translation => Noisy channel
>> => frequency down translation => Demodulation
>>
>> But, there is something going wrong!! If the input stream looks like this
>> : 0 0 1 1 0 0 1 1 0 0 1 1..... the output will be ( after Costa's loop and
>> MM are stabilized )  : 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1......
>>  I looked for an undesired decimation, but didn't find any. Do you Have
>> any idea of what is going wrong?
>>
>> Axel
>
> This is a bit confusing, but it makes sense in the way we meant for
> the digital modulators to work. The problem is that you are trying to
> put in "bits" into the modulator, which actually takes a "packet"
> stream of bits. In other words, when you think you are putting in the
> bits "0 0 1 1," you are actually telling it that you are putting in
> the bytes "0 0 1 1" that gets unpacked into the bit stream "0 0 0 0 0
> 0 0 0, 0 0 0 0 0 0 0 0, 0 0 0 0 0 0 0 1, 0 0 0 0 0 0 0 1" or "0x00
> 0x00 0x01 0x01".
>
> What you want to put in as the source is a vector of "0x33" instead.
> You can also use the gr.unpacked_to_packed_bb on the demod side to
> repack the bits. I've edited your code below to show how to do this.
> Now, when you do this, you're still going to see some random stuff
> going on in the output stream for the first few symbols. These garbage
> bits are due to the filters' group delays.
>
> One final thought. You're doing a frequency shift operation on the
> complex baseband signal and then almost immediately downconverting it.
> This doesn't really do anything of any consequence to your simulation
> except require you to use a larger sampling rate than really required.
> If you want to test frequency offset errors, you can use the features
> in the channel model that we have (blks2.channel_model), which takes
> in a noise voltage, frequency offset, timing offset, and a vector of
> taps to simulate multipath.
>
>
>> My code :
>> class my_top_block(gr.top_block):
>>        def __init__(self):
>>                gr.top_block.__init__(self)
>>                fg = gr.flow_graph()
>>
>>                sps = 8
>>                symbol_rate = 1625000.0 / 6.0
>>                sample_rate = sps * symbol_rate
>>                p_size = 1024
>>                lo_freq = 7.5e5
>>                lp_cutoff = 2.5e5
>>                lp_tw = 5e5
>>                noise_mag = 0.0
>>                #Source
>
>                  N = <something>
>                  self.src_data = N*[0x33, ] # make an N-long vector
> with 0x33 in every element
>
>>                self.src0 = gr.vector_source_b (self.src_data)
>>                ######
>>
>>                ###Modulation####
>>                self.objMod = dbpsk.dbpsk_mod(sps,0.35,False,False,False)
>>                #################
>>
>>                ### Canal########
>>                # Mix to IF
>>                self.lo = gr.sig_source_c(sample_rate, gr.GR_SIN_WAVE, 
>> lo_freq,1.0, 0)
>>                self.mixer = gr.multiply_cc()
>>                self.connect(self.lo, (self.mixer, 1))
>>                # Simulate noise in the channel
>>                self.noise = gr.noise_source_c(gr.GR_GAUSSIAN, noise_mag)
>>                self.air_noise = gr.add_cc()
>>                self.connect(self.noise, (self.air_noise, 1))
>>                # Mix to baseband
>>                self.chan_taps = gr.firdes.low_pass(1.0, sample_rate, 
>> lp_cutoff, lp_tw,
>> gr.firdes.WIN_HAMMING)
>>                self.chan_filter = gr.freq_xlating_fir_filter_ccc(1,
>> self.chan_taps,-lo_freq, sample_rate)
>>                ###################
>>
>>                ### Demodulation######
>>                self.objDeMod=dbpsk.dbpsk_demod(sps,0.35)
>
>                 self.pack = gr.unpacked_to_packed_bb(1, gr.GR_MSB_FIRST)
>
>>                ######################
>>
>>                ######Connection des blocs#####
>
>                 self.connect(self.src0,self.objMod, self.mixer, 
> self.air_noise,
>  self.chan_filter, self.objDeMod, self.pack)
>
>>                #####################
>>
>>        ################# Observation entree/sortie########
>>                self.sink1 = gr.vector_sink_b()
>
>                  self.connect(self.pack, ,self.sink1)
>
>>                self.sink2 = gr.vector_sink_b()
>>                self.connect(self.src0,self.sink2)
>>
>>        def print_data(self):
>>                print "demod: ",self.sink1.data()
>>                print len(self.sink1.data())
>>                print "check: ",self.sink2.data()
>>                print len(self.sink2.data())
>>         ################################################
>> if __name__ == '__main__':
>>        try:
>>                tb=my_top_block()
>>                tb.run()
>>                tb.print_data()
>>        except KeyboardInterrupt:
>>                pass
>>
>
>
> _______________________________________________
> Discuss-gnuradio mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
>




reply via email to

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