discuss-gnuradio
[Top][All Lists]
Advanced

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

[Discuss-gnuradio] Quesions on BPSK transceiver


From: Yan Nie
Subject: [Discuss-gnuradio] Quesions on BPSK transceiver
Date: Mon, 10 May 2010 16:13:18 -0400

Dear all,

I'm trying to build a BPSK transmitter which is modulated with a group of binary sequence of bits by USRP1 with LFTX/RX plugged on. The frequence of the sequence in baseband should be 25kHz,

I'm modifying the digital-bert project in gnuradio-example, using the following two line to take the place of the BERT data creation (._bits and ._ scrambler):

 self._bits = (1,0,0,1, 0,0,0,1, 0,1,1,1, 1,0,1,0,
                      1,1,1,0, 0,1,0,1, 1,0,1,1, 0,1,0,0,
                      1,1,1,0, 1,0,1,1, 1,1,0,1, 0,0,0,1,
                      0,0,1,1, 0,1,0,1, 1,1,0,0, 0,1,0,0,
                      0,0,1,0, 0,1,0,0, 0,0,1,1, 1,1,1,0,
                      0,1,1,0, 0,1,1,1, 1,0,1,0, 0,0,1,0,
                      0,1,0,0, 0,0,1,0, 0,0,1,1, 1,0,1,0,
                      1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0)
 self.in_data = gr.vector_source_b(self._bits, True )

Then the data will map to the same constellation and filtered by the same rrc as BERT data does.

To meet the requirement of the baseband frequence, the parameters are set as shown as following:
rate: 25e3
sps:  32
if_rate: 800e3 (=rate*sps)
interp: 160 (=_dac_rate/if_rate=128e6/800e3)
freq:3M
amplitude: 128
--excess-bw: 0.35

Are these parameters set correctly? How to decide the amplitude? Will the signal be saturated at the receiver side, if the amplitude is too large but less than 32767?

At the receiver side, the received raw signal in baseband will be required to recorded in  a data file without frequency recovery and time offset correction. Such that my receiver only tune the  signal back to baseband and filter it by a matched filter rrc and sink the data in a data file. My top block for the receiver is:

class rx_bpsk_block(gr.top_block):
    def __init__(self, options):   

    gr.top_block.__init__(self, "rx_mpsk")

        print "USRP decimation rate", options.decim_rate

        # Create a USRP source at desired board, sample rate, frequency, and gain
        self._setup_usrp(options.which,
                         options.decim_rate,
                         options.rx_subdev_spec,
                         options.freq,
                         options.gain)
      
        # Create the receiver
        if_rate = self._usrp.adc_rate()/options.decim_rate
    self._sps = int(if_rate/options.rate)
   
   
    # Create RRC with specified excess bandwidth
    taps = gr.firdes.root_raised_cosine(1.0,          # Gain
                        self._sps,    # Sampling rate
                        1.0,          # Symbol rate
                        options.excess_bw,    # Roll-off factor
                        11*self._sps) # Number of taps

    self._rrc = gr.fir_filter_ccf(1, taps)

    self._c2r = gr.complex_to_real()

    #sink the data into a file
    self._sink = gr.file_sink(gr.sizeof_float, options.filename)
       
    self.connect(self._usrp, self._agc,self._rrc, self._c2r, self._sink)

The parameters are set as:
gain: 20
rate: 25e3
decim-rate: 8
freq:3M

How to determine the decim-rate?

By using octave to plot the data recorded, the received signal I got is like a impulse response of root-raised-cosine filter. What I suppose to get is the signal after tunning back to baseband and filtered by a lowpass filter. What the problem will be?

Thank you so much in advance

Regards,
Yan

Attachment: ynie3.vcf
Description: Card for Yan Nie <ynie3@uwo.ca>


reply via email to

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