Example #1
0
def qpsk_awgn_generator(batch_size = 4500, EbN0s = range(-20, 10, 2)):
    data = {}
    ntaps = 45
    N_BITS = 1000000
    nvecs_per_key = batch_size
    vec_length = 128
    
    for EbN0 in EbN0s:
        data[("busy", EbN0)] = np.zeros([nvecs_per_key, 2, vec_length], dtype=np.float32)
        data[("idle", EbN0)] = np.zeros([nvecs_per_key, 2, vec_length], dtype=np.float32)

        tb = gr.top_block()
        const = digital.qpsk_constellation()
        rrc_taps = firdes.root_raised_cosine(1, 4, 1, 0.35, ntaps)
        src = blocks.vector_source_b(map(int, np.random.randint(0, const.arity(), N_BITS/const.bits_per_symbol())), False)
        
        mod = digital.chunks_to_symbols_bc((const.points()), 1)
        match_filter = filter.interp_fir_filter_ccc(4, (rrc_taps))
        amplitude = blocks.multiply_const_vcc((4, ))
        
        #noise_amplitude = 1.0 / math.sqrt(const.bits_per_symbol()* 10**(float(EbN0)/10))
        noise_amplitude = 1.0 / math.sqrt(10**(float(EbN0)/10))
        noise = analog.noise_source_c(analog.GR_GAUSSIAN, noise_amplitude, 0)
        
        add = blocks.add_vcc(1)
        sink = blocks.vector_sink_c()
        noise_sink = blocks.vector_sink_c()
        tb.connect(src, mod, match_filter, amplitude, (add, 0), sink)
        tb.connect(noise, (add, 1))
        tb.connect(noise, noise_sink)
        tb.run()

        raw_output_vector = np.array(sink.data(), dtype=np.complex64)
        raw_noise_vector = np.array(noise_sink.data(), dtype=np.complex64)

        sampler_indx = random.randint(50, 500)
        vec_indx = 0
        while sampler_indx + vec_length < len(raw_output_vector) and vec_indx < nvecs_per_key:
            sampled_vector = raw_output_vector[sampler_indx:sampler_indx+vec_length]
            data[("busy", EbN0)][vec_indx, 0,:] = np.real(sampled_vector)
            data[("busy", EbN0)][vec_indx, 1,:] = np.imag(sampled_vector)
            sampled_noise_vector = raw_noise_vector[sampler_indx:sampler_indx+vec_length]
            data[("idle", EbN0)][vec_indx, 0,:] = np.real(sampled_noise_vector)
            data[("idle", EbN0)][vec_indx, 1,:] = np.imag(sampled_noise_vector)
            sampler_indx += vec_length
            vec_indx += 1

    return data
Example #2
0
 def __init__(self, EbN0):
     gr.top_block.__init__(self)
     self.const = digital.qpsk_constellation()
     # Source is N_BITS bits, non-repeated
     data = list(map(int, numpy.random.randint(0, self.const.arity(), N_BITS / self.const.bits_per_symbol())))
     src   = blocks.vector_source_b(data, False)
     mod   = digital.chunks_to_symbols_bc((self.const.points()), 1)
     add   = blocks.add_vcc()
     noise = analog.noise_source_c(analog.GR_GAUSSIAN,
                                   self.EbN0_to_noise_voltage(EbN0),
                                   RAND_SEED)
     demod = digital.constellation_decoder_cb(self.const.base())
     ber   = BitErrors(self.const.bits_per_symbol())
     self.sink  = blocks.vector_sink_f()
     self.connect(src, mod, add, demod, ber, self.sink)
     self.connect(noise, (add, 1))
     self.connect(src, (ber, 1))
Example #3
0
 def __init__(self, EbN0):
     gr.top_block.__init__(self)
     self.const = digital.qpsk_constellation()
     # Source is N_BITS bits, non-repeated
     data = list(map(int, numpy.random.randint(0, self.const.arity(), int(N_BITS / self.const.bits_per_symbol()))))
     src   = blocks.vector_source_b(data, False)
     mod   = digital.chunks_to_symbols_bc((self.const.points()), 1)
     add   = blocks.add_vcc()
     noise = analog.noise_source_c(analog.GR_GAUSSIAN,
                                   self.EbN0_to_noise_voltage(EbN0),
                                   RAND_SEED)
     demod = digital.constellation_decoder_cb(self.const.base())
     ber   = BitErrors(self.const.bits_per_symbol())
     self.sink  = blocks.vector_sink_f()
     self.connect(src, mod, add, demod, ber, self.sink)
     self.connect(noise, (add, 1))
     self.connect(src, (ber, 1))
Example #4
0
 def test_tag(self):
     # Send data through bpsk receiver
     # followed by qpsk receiver
     data = [0.9 + 0j, 0.1 + 0.9j, -1 - 0.1j, -0.1 - 0.6j] * 2
     bpsk_data = [1, 1, 0, 0]
     qpsk_data = [1, 3, 0, 0]
     first_tag = gr.tag_t()
     first_tag.key = pmt.intern("set_constellation")
     first_tag.value = digital.bpsk_constellation().as_pmt()
     first_tag.offset = 0
     second_tag = gr.tag_t()
     second_tag.key = pmt.intern("set_constellation")
     second_tag.value = digital.qpsk_constellation().as_pmt()
     second_tag.offset = 4
     src = blocks.vector_source_c(data, False, 1, [first_tag, second_tag])
     decoder = digital.constellation_receiver_cb(
         digital.bpsk_constellation().base(), 0, 0, 0)
     snk = blocks.vector_sink_b()
     tb = gr.top_block()
     tb.connect(src, decoder, snk)
     tb.run()
     self.assertEqual(list(snk.data()), bpsk_data + qpsk_data)
 def test_tag(self):
     # Send data through bpsk receiver
     # followed by qpsk receiver
     data = [0.9+0j, 0.1+0.9j, -1-0.1j, -0.1-0.6j]*2
     bpsk_data = [1, 1, 0, 0]
     qpsk_data = [1, 3, 0, 0]
     first_tag = gr.tag_t()
     first_tag.key = pmt.intern("set_constellation")
     first_tag.value = digital.bpsk_constellation().as_pmt()
     first_tag.offset = 0
     second_tag = gr.tag_t()
     second_tag.key = pmt.intern("set_constellation")
     second_tag.value = digital.qpsk_constellation().as_pmt()
     second_tag.offset = 4
     src = blocks.vector_source_c(data, False, 1, [first_tag, second_tag])
     decoder = digital.constellation_receiver_cb(
         digital.bpsk_constellation().base(), 0, 0, 0)
     snk = blocks.vector_sink_b()
     tb = gr.top_block()
     tb.connect(src, decoder, snk)
     tb.run()
     self.assertEqual(list(snk.data()), bpsk_data+qpsk_data)
Example #6
0
    def __init__(self):
        grc_wxgui.top_block_gui.__init__(self, title="Pam Timing")
        _icon_path = "/usr/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
        self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))

        ##################################################
        # Variables
        ##################################################
        self.time_bw = time_bw = 0
        self.spb = spb = 4.2563
        self.sig_amp = sig_amp = 1
        self.samp_rate = samp_rate = 32000
        self.rolloff = rolloff = .35
        self.noise_amp = noise_amp = 0
        self.nfilts = nfilts = 32
        self.interpratio = interpratio = 1.00
        self.freq_offset = freq_offset = 0
        self.const = const = digital.qpsk_constellation()

        ##################################################
        # Blocks
        ##################################################
        _time_bw_sizer = wx.BoxSizer(wx.VERTICAL)
        self._time_bw_text_box = forms.text_box(
        	parent=self.GetWin(),
        	sizer=_time_bw_sizer,
        	value=self.time_bw,
        	callback=self.set_time_bw,
        	label="Timing Loop BW",
        	converter=forms.float_converter(),
        	proportion=0,
        )
        self._time_bw_slider = forms.slider(
        	parent=self.GetWin(),
        	sizer=_time_bw_sizer,
        	value=self.time_bw,
        	callback=self.set_time_bw,
        	minimum=0,
        	maximum=0.1,
        	num_steps=1000,
        	style=wx.SL_HORIZONTAL,
        	cast=float,
        	proportion=1,
        )
        self.GridAdd(_time_bw_sizer, 1, 2, 1, 1)
        self.notebook_0 = self.notebook_0 = wx.Notebook(self.GetWin(), style=wx.NB_TOP)
        self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "error")
        self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "phase")
        self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "freq")
        self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "Resampled Signal")
        self.notebook_0.AddPage(grc_wxgui.Panel(self.notebook_0), "Scope")
        self.GridAdd(self.notebook_0, 1, 1, 5, 1)
        _noise_amp_sizer = wx.BoxSizer(wx.VERTICAL)
        self._noise_amp_text_box = forms.text_box(
        	parent=self.GetWin(),
        	sizer=_noise_amp_sizer,
        	value=self.noise_amp,
        	callback=self.set_noise_amp,
        	label="Channel Noise",
        	converter=forms.float_converter(),
        	proportion=0,
        )
        self._noise_amp_slider = forms.slider(
        	parent=self.GetWin(),
        	sizer=_noise_amp_sizer,
        	value=self.noise_amp,
        	callback=self.set_noise_amp,
        	minimum=0,
        	maximum=1.0,
        	num_steps=1000,
        	style=wx.SL_HORIZONTAL,
        	cast=float,
        	proportion=1,
        )
        self.GridAdd(_noise_amp_sizer, 3, 2, 1, 1)
        _interpratio_sizer = wx.BoxSizer(wx.VERTICAL)
        self._interpratio_text_box = forms.text_box(
        	parent=self.GetWin(),
        	sizer=_interpratio_sizer,
        	value=self.interpratio,
        	callback=self.set_interpratio,
        	label="Timing Offset",
        	converter=forms.float_converter(),
        	proportion=0,
        )
        self._interpratio_slider = forms.slider(
        	parent=self.GetWin(),
        	sizer=_interpratio_sizer,
        	value=self.interpratio,
        	callback=self.set_interpratio,
        	minimum=0.99,
        	maximum=1.01,
        	num_steps=1000,
        	style=wx.SL_HORIZONTAL,
        	cast=float,
        	proportion=1,
        )
        self.GridAdd(_interpratio_sizer, 2, 2, 1, 1)
        _freq_offset_sizer = wx.BoxSizer(wx.VERTICAL)
        self._freq_offset_text_box = forms.text_box(
        	parent=self.GetWin(),
        	sizer=_freq_offset_sizer,
        	value=self.freq_offset,
        	callback=self.set_freq_offset,
        	label="Frequency Offset",
        	converter=forms.float_converter(),
        	proportion=0,
        )
        self._freq_offset_slider = forms.slider(
        	parent=self.GetWin(),
        	sizer=_freq_offset_sizer,
        	value=self.freq_offset,
        	callback=self.set_freq_offset,
        	minimum=-0.5,
        	maximum=0.5,
        	num_steps=1000,
        	style=wx.SL_HORIZONTAL,
        	cast=float,
        	proportion=1,
        )
        self.GridAdd(_freq_offset_sizer, 4, 2, 1, 1)
        self.wxgui_scopesink2_0_0_1 = scopesink2.scope_sink_c(
        	self.notebook_0.GetPage(3).GetWin(),
        	title="Error",
        	sample_rate=samp_rate,
        	v_scale=.5,
        	v_offset=0,
        	t_scale=0,
        	ac_couple=False,
        	xy_mode=False,
        	num_inputs=1,
        	trig_mode=wxgui.TRIG_MODE_AUTO,
        	y_axis_label="Counts",
        )
        self.notebook_0.GetPage(3).Add(self.wxgui_scopesink2_0_0_1.win)
        self.wxgui_scopesink2_0_0_0_0 = scopesink2.scope_sink_f(
        	self.notebook_0.GetPage(2).GetWin(),
        	title="Scope Plot",
        	sample_rate=samp_rate,
        	v_scale=1.25,
        	v_offset=0,
        	t_scale=0,
        	ac_couple=False,
        	xy_mode=False,
        	num_inputs=1,
        	trig_mode=wxgui.TRIG_MODE_AUTO,
        	y_axis_label="Counts",
        )
        self.notebook_0.GetPage(2).Add(self.wxgui_scopesink2_0_0_0_0.win)
        self.wxgui_scopesink2_0_0_0 = scopesink2.scope_sink_f(
        	self.notebook_0.GetPage(1).GetWin(),
        	title="Scope Plot",
        	sample_rate=samp_rate,
        	v_scale=9,
        	v_offset=0,
        	t_scale=0,
        	ac_couple=False,
        	xy_mode=False,
        	num_inputs=1,
        	trig_mode=wxgui.TRIG_MODE_AUTO,
        	y_axis_label="Counts",
        )
        self.notebook_0.GetPage(1).Add(self.wxgui_scopesink2_0_0_0.win)
        self.wxgui_scopesink2_0_0 = scopesink2.scope_sink_f(
        	self.notebook_0.GetPage(0).GetWin(),
        	title="Error",
        	sample_rate=samp_rate,
        	v_scale=3,
        	v_offset=0,
        	t_scale=0,
        	ac_couple=False,
        	xy_mode=False,
        	num_inputs=1,
        	trig_mode=wxgui.TRIG_MODE_AUTO,
        	y_axis_label="Counts",
        )
        self.notebook_0.GetPage(0).Add(self.wxgui_scopesink2_0_0.win)
        self.wxgui_scopesink2_0 = scopesink2.scope_sink_c(
        	self.notebook_0.GetPage(4).GetWin(),
        	title="Scope Plot",
        	sample_rate=samp_rate,
        	v_scale=0,
        	v_offset=0,
        	t_scale=0,
        	ac_couple=False,
        	xy_mode=False,
        	num_inputs=1,
        	trig_mode=wxgui.TRIG_MODE_AUTO,
        	y_axis_label="Counts",
        )
        self.notebook_0.GetPage(4).Add(self.wxgui_scopesink2_0.win)
        self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(
        	  spb,
                  taps=(firdes.root_raised_cosine(nfilts, nfilts, 1.0, rolloff, 44*nfilts)),
        	  flt_size=32)
        	
        self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(spb, time_bw, (firdes.root_raised_cosine(nfilts, nfilts*spb, 1.0, rolloff, 44*nfilts)), nfilts, 16, 1.5, 1)
        self.digital_chunks_to_symbols_xx = digital.chunks_to_symbols_bc((const.points()), 1)
        self.channels_channel_model_0 = channels.channel_model(
        	noise_voltage=noise_amp,
        	frequency_offset=freq_offset,
        	epsilon=interpratio,
        	taps=(1.0, ),
        	noise_seed=42,
        	block_tags=False
        )
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((sig_amp, ))
        self.analog_random_source_x = blocks.vector_source_b(map(int, numpy.random.randint(0, const.arity(), 10000000)), True)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.blocks_throttle_0, 0), (self.digital_pfb_clock_sync_xxx_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 2), (self.wxgui_scopesink2_0_0_0_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.wxgui_scopesink2_0_0_1, 0))
        self.connect((self.pfb_arb_resampler_xxx_0, 0), (self.blocks_multiply_const_vxx_0, 0))
        self.connect((self.digital_chunks_to_symbols_xx, 0), (self.pfb_arb_resampler_xxx_0, 0))
        self.connect((self.analog_random_source_x, 0), (self.digital_chunks_to_symbols_xx, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 3), (self.wxgui_scopesink2_0_0_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 1), (self.wxgui_scopesink2_0_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 0), (self.wxgui_scopesink2_0, 0))
        self.connect((self.channels_channel_model_0, 0), (self.blocks_throttle_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0), (self.channels_channel_model_0, 0))
Example #7
0
    def __init__(self):
        gr.top_block.__init__(self, "PAM Timing")
        Qt.QWidget.__init__(self)
        self.setWindowTitle("PAM Timing")
        try:
            self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
        except:
            pass
        self.top_scroll_layout = Qt.QVBoxLayout()
        self.setLayout(self.top_scroll_layout)
        self.top_scroll = Qt.QScrollArea()
        self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
        self.top_scroll_layout.addWidget(self.top_scroll)
        self.top_scroll.setWidgetResizable(True)
        self.top_widget = Qt.QWidget()
        self.top_scroll.setWidget(self.top_widget)
        self.top_layout = Qt.QVBoxLayout(self.top_widget)
        self.top_grid_layout = Qt.QGridLayout()
        self.top_layout.addLayout(self.top_grid_layout)

        self.settings = Qt.QSettings("GNU Radio", "pam_timing")
        self.restoreGeometry(self.settings.value("geometry").toByteArray())

        ##################################################
        # Variables
        ##################################################
        self.time_bw = time_bw = 0
        self.spb = spb = 4.2563
        self.sig_amp = sig_amp = 1
        self.samp_rate = samp_rate = 32000
        self.rolloff = rolloff = .35
        self.noise_amp = noise_amp = 0
        self.nfilts = nfilts = 32
        self.interpratio = interpratio = 1
        self.freq_offset = freq_offset = 0
        self.const = const = digital.qpsk_constellation()

        ##################################################
        # Blocks
        ##################################################
        self._time_bw_range = Range(0, .1, .001, 0, 200)
        self._time_bw_win = RangeWidget(self._time_bw_range, self.set_time_bw,
                                        'Timing Loop BW', "counter_slider",
                                        float)
        self.top_grid_layout.addWidget(self._time_bw_win, 1, 2, 1, 1)
        self.notebook = Qt.QTabWidget()
        self.notebook_widget_0 = Qt.QWidget()
        self.notebook_layout_0 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                               self.notebook_widget_0)
        self.notebook_grid_layout_0 = Qt.QGridLayout()
        self.notebook_layout_0.addLayout(self.notebook_grid_layout_0)
        self.notebook.addTab(self.notebook_widget_0, 'Error')
        self.notebook_widget_1 = Qt.QWidget()
        self.notebook_layout_1 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                               self.notebook_widget_1)
        self.notebook_grid_layout_1 = Qt.QGridLayout()
        self.notebook_layout_1.addLayout(self.notebook_grid_layout_1)
        self.notebook.addTab(self.notebook_widget_1, 'Phase')
        self.notebook_widget_2 = Qt.QWidget()
        self.notebook_layout_2 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                               self.notebook_widget_2)
        self.notebook_grid_layout_2 = Qt.QGridLayout()
        self.notebook_layout_2.addLayout(self.notebook_grid_layout_2)
        self.notebook.addTab(self.notebook_widget_2, 'Freq')
        self.notebook_widget_3 = Qt.QWidget()
        self.notebook_layout_3 = Qt.QBoxLayout(Qt.QBoxLayout.TopToBottom,
                                               self.notebook_widget_3)
        self.notebook_grid_layout_3 = Qt.QGridLayout()
        self.notebook_layout_3.addLayout(self.notebook_grid_layout_3)
        self.notebook.addTab(self.notebook_widget_3, 'Resampled Signal')
        self.top_grid_layout.addWidget(self.notebook, 1, 1, 5, 1)
        self._noise_amp_range = Range(0, 1, .001, 0, 200)
        self._noise_amp_win = RangeWidget(self._noise_amp_range,
                                          self.set_noise_amp, 'Channel Noise',
                                          "counter_slider", float)
        self.top_grid_layout.addWidget(self._noise_amp_win, 3, 2, 1, 1)
        self._interpratio_range = Range(.99, 1.01, 0.0001, 1, 200)
        self._interpratio_win = RangeWidget(self._interpratio_range,
                                            self.set_interpratio,
                                            'Timing Offset', "counter_slider",
                                            float)
        self.top_grid_layout.addWidget(self._interpratio_win, 2, 2, 1, 1)
        self._freq_offset_range = Range(-.5, .5, .01, 0, 200)
        self._freq_offset_win = RangeWidget(self._freq_offset_range,
                                            self.set_freq_offset,
                                            'Frequency Offset',
                                            "counter_slider", float)
        self.top_grid_layout.addWidget(self._freq_offset_win, 4, 2, 1, 1)
        self.qtgui_time_sink_x_1_1 = qtgui.time_sink_f(
            1024,  #size
            samp_rate,  #samp_rate
            'Phase',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_1.set_update_time(0.10)
        self.qtgui_time_sink_x_1_1.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_1.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_1.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_1.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0, "")
        self.qtgui_time_sink_x_1_1.enable_autoscale(True)
        self.qtgui_time_sink_x_1_1.enable_grid(False)
        self.qtgui_time_sink_x_1_1.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_1.enable_control_panel(False)

        if not True:
            self.qtgui_time_sink_x_1_1.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_1_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_1_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_1.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_1_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_1.pyqwidget(), Qt.QWidget)
        self.notebook_layout_1.addWidget(self._qtgui_time_sink_x_1_1_win)
        self.qtgui_time_sink_x_1_0 = qtgui.time_sink_f(
            1024,  #size
            samp_rate,  #samp_rate
            'Rate',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1_0.set_update_time(0.10)
        self.qtgui_time_sink_x_1_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_1_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0, "")
        self.qtgui_time_sink_x_1_0.enable_autoscale(True)
        self.qtgui_time_sink_x_1_0.enable_grid(False)
        self.qtgui_time_sink_x_1_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_1_0.enable_control_panel(False)

        if not True:
            self.qtgui_time_sink_x_1_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_1_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_1_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1_0.pyqwidget(), Qt.QWidget)
        self.notebook_layout_2.addWidget(self._qtgui_time_sink_x_1_0_win)
        self.qtgui_time_sink_x_1 = qtgui.time_sink_f(
            1024,  #size
            samp_rate,  #samp_rate
            'Error',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_1.set_update_time(0.10)
        self.qtgui_time_sink_x_1.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_1.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_1.enable_tags(-1, True)
        self.qtgui_time_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                  qtgui.TRIG_SLOPE_POS, 0.0, 0,
                                                  0, "")
        self.qtgui_time_sink_x_1.enable_autoscale(True)
        self.qtgui_time_sink_x_1.enable_grid(False)
        self.qtgui_time_sink_x_1.enable_axis_labels(True)
        self.qtgui_time_sink_x_1.enable_control_panel(False)

        if not True:
            self.qtgui_time_sink_x_1.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_1.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_1.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_1.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_1.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_1.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_1.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_1.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_1_win = sip.wrapinstance(
            self.qtgui_time_sink_x_1.pyqwidget(), Qt.QWidget)
        self.notebook_layout_0.addWidget(self._qtgui_time_sink_x_1_win)
        self.qtgui_time_sink_x_0_0 = qtgui.time_sink_c(
            1024,  #size
            samp_rate,  #samp_rate
            'Scope Plot',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_0_0.set_update_time(0.10)
        self.qtgui_time_sink_x_0_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_0_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_0_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                    qtgui.TRIG_SLOPE_POS, 0.0,
                                                    0, 0, "")
        self.qtgui_time_sink_x_0_0.enable_autoscale(False)
        self.qtgui_time_sink_x_0_0.enable_grid(False)
        self.qtgui_time_sink_x_0_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_0_0.enable_control_panel(False)

        if not True:
            self.qtgui_time_sink_x_0_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2 * 1):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_0_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_0_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_0_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_0_0.pyqwidget(), Qt.QWidget)
        self.top_layout.addWidget(self._qtgui_time_sink_x_0_0_win)
        self.qtgui_time_sink_x_0 = qtgui.time_sink_c(
            1024,  #size
            samp_rate,  #samp_rate
            'Error',  #name
            1  #number of inputs
        )
        self.qtgui_time_sink_x_0.set_update_time(0.10)
        self.qtgui_time_sink_x_0.set_y_axis(-1, 1)

        self.qtgui_time_sink_x_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0.enable_tags(-1, True)
        self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE,
                                                  qtgui.TRIG_SLOPE_POS, 0.0, 0,
                                                  0, "")
        self.qtgui_time_sink_x_0.enable_autoscale(False)
        self.qtgui_time_sink_x_0.enable_grid(False)
        self.qtgui_time_sink_x_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_0.enable_control_panel(False)

        if not True:
            self.qtgui_time_sink_x_0.disable_legend()

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "blue"
        ]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in xrange(2 * 1):
            if len(labels[i]) == 0:
                if (i % 2 == 0):
                    self.qtgui_time_sink_x_0.set_line_label(
                        i, "Re{{Data {0}}}".format(i / 2))
                else:
                    self.qtgui_time_sink_x_0.set_line_label(
                        i, "Im{{Data {0}}}".format(i / 2))
            else:
                self.qtgui_time_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget)
        self.notebook_layout_3.addWidget(self._qtgui_time_sink_x_0_win)
        self.pfb_arb_resampler_xxx_0 = pfb.arb_resampler_ccf(
            spb,
            taps=(firdes.root_raised_cosine(nfilts, nfilts, 1.0, rolloff,
                                            44 * nfilts)),
            flt_size=32)
        self.pfb_arb_resampler_xxx_0.declare_sample_delay(0)

        self.digital_pfb_clock_sync_xxx_0 = digital.pfb_clock_sync_ccf(
            spb, time_bw, (firdes.root_raised_cosine(
                nfilts, nfilts * spb, 1.0, rolloff, 44 * nfilts)), nfilts, 16,
            1.5, 1)
        self.digital_chunks_to_symbols_xx = digital.chunks_to_symbols_bc(
            (const.points()), 1)
        self.channels_channel_model_0 = channels.channel_model(
            noise_voltage=noise_amp,
            frequency_offset=freq_offset,
            epsilon=interpratio,
            taps=(1.0, ),
            noise_seed=42,
            block_tags=False)
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex * 1,
                                                 samp_rate, True)
        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc(
            (sig_amp, ))
        self.analog_random_source_x = blocks.vector_source_b(
            map(int, numpy.random.randint(0, const.arity(), 10000000)), True)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_random_source_x, 0),
                     (self.digital_chunks_to_symbols_xx, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.channels_channel_model_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.qtgui_time_sink_x_0, 0))
        self.connect((self.blocks_throttle_0, 0),
                     (self.digital_pfb_clock_sync_xxx_0, 0))
        self.connect((self.channels_channel_model_0, 0),
                     (self.blocks_throttle_0, 0))
        self.connect((self.digital_chunks_to_symbols_xx, 0),
                     (self.pfb_arb_resampler_xxx_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 0),
                     (self.qtgui_time_sink_x_0_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 1),
                     (self.qtgui_time_sink_x_1, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 2),
                     (self.qtgui_time_sink_x_1_0, 0))
        self.connect((self.digital_pfb_clock_sync_xxx_0, 3),
                     (self.qtgui_time_sink_x_1_1, 0))
        self.connect((self.pfb_arb_resampler_xxx_0, 0),
                     (self.blocks_multiply_const_vxx_0, 0))
Example #8
0
File: qpsk.py Project: mlcomm/crml
def qpsk_awgn_generator(dataset_size=10000, vec_length=128, EbN0=-6):

    N_BITS = dataset_size * vec_length

    tb = gr.top_block()

    const = digital.qpsk_constellation()
    rrc_taps = firdes.root_raised_cosine(1, 4, 1, 0.35, 45)

    src = blocks.vector_source_b(
        map(
            int,
            np.random.randint(0, const.arity(),
                              N_BITS / const.bits_per_symbol())), False)

    mod = digital.chunks_to_symbols_bc((const.points()), 1)
    match_filter = filter.interp_fir_filter_ccc(4, (rrc_taps))
    amplitude = blocks.multiply_const_vcc((4, ))
    noise_amplitude = 1.0 / math.sqrt(10**(float(EbN0) / 10))
    noise = analog.noise_source_c(analog.GR_GAUSSIAN, noise_amplitude, 0)
    add = blocks.add_vcc(1)
    sink = blocks.vector_sink_c()
    noise_sink = blocks.vector_sink_c()

    tb.connect(src, mod, match_filter, amplitude, (add, 0), sink)
    tb.connect(noise, (add, 1))
    tb.connect(noise, noise_sink)
    tb.run()

    sample_output = np.array(sink.data(), dtype=np.complex64)
    noise_output = np.array(noise_sink.data(), dtype=np.complex64)

    sampler_indx = random.randint(50, 500)
    vec_indx = 0

    sample_data = np.zeros([dataset_size, 2, vec_length], dtype=np.float32)
    noise_data = np.zeros([dataset_size, 2, vec_length], dtype=np.float32)
    sample_labels = np.zeros([dataset_size, 2], dtype=np.int32)
    noise_labels = np.zeros([dataset_size, 2], dtype=np.int32)

    while sampler_indx + vec_length < len(
            sample_output) and vec_indx < dataset_size:
        sampled_vector = sample_output[sampler_indx:sampler_indx + vec_length]
        sample_data[vec_indx, 0, :] = np.real(sampled_vector)
        sample_data[vec_indx, 1, :] = np.imag(sampled_vector)

        noise_vector = noise_output[sampler_indx:sampler_indx + vec_length]
        noise_data[vec_indx, 0, :] = np.real(noise_vector)
        noise_data[vec_indx, 1, :] = np.imag(noise_vector)

        sample_labels[vec_indx, :] = [1, 0]
        noise_labels[vec_indx, :] = [0, 1]

        sampler_indx += vec_length
        vec_indx += 1

    data = []
    data.append(sample_data)
    data.append(noise_data)
    data = np.vstack(data)

    labels = []
    labels.append(sample_labels)
    labels.append(noise_labels)
    labels = np.vstack(labels)

    return data, labels, vec_indx