Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ber_rician_bpsk(stdgui2.std_top_block):
- def __init__(self, frame, panel, vbox, argv,energia,kappa,sigma):
- stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
- ##################################################
- # Variables
- ##################################################
- self.samples = samples = 500000
- self.ebno = ebno = 0
- self.samp_rate = samp_rate = 64000
- self.ebno_lin = ebno_lin = pow(10.0, ebno/10.0)
- self.eb = eb = energia
- self.bits = bits = 1
- self.kappa = kappa
- self.sigma = sigma
- ##################################################
- # Notebooks
- ##################################################
- self.notebook_0 = wx.Notebook(panel, style=wx.NB_TOP)
- self.notebook_0.AddPage(wx.Panel(self.notebook_0), "BER")
- self.notebook_0.AddPage(wx.Panel(self.notebook_0), "Costellazione")
- #self.notebook_0.AddPage(wx.Panel(self.notebook_0), "Spettro")
- ##################################################
- # Controls
- ##################################################
- _ebno_sizer = wx.BoxSizer(wx.VERTICAL)
- _ebno_sizer.Add((10,0), 0)
- self._ebno_text_box = forms.text_box(
- parent=panel,
- width=705,
- sizer=_ebno_sizer,
- value=self.ebno,
- callback=self.set_ebno,
- label="Eb/No (dB)",
- converter=forms.float_converter(),
- proportion=0,
- )
- self._ebno_slider = forms.slider(
- parent=panel,
- sizer=_ebno_sizer,
- value=self.ebno,
- callback=self.set_ebno,
- label="Eb/No",
- minimum=-30,
- maximum=60,
- num_steps=180,
- style=wx.SL_HORIZONTAL,
- cast=float,
- proportion=1,
- )
- ##################################################
- # Blocks
- ##################################################
- self.blks2_error_rate = error_rate(
- type='BER',
- win_size=samples,
- bits_per_symbol=self.bits,
- )
- self.const_source_x_0 = gr.sig_source_f(0, gr.GR_CONST_WAVE, 0, 0, ritorna_ber_ric_psk(2.0,1.0,kappa))
- self.gr_add_xx_0 = gr.add_vcc(1)
- #self.gr_add_xx_1 = gr.add_vcc(1)
- self.gr_mult_xx_0 = gr.multiply_vcc(1)
- #self.gr_mult_xx_1 = gr.multiply_vcc(1)
- self.gr_single_pole_iir_filter_xx_0 = gr.single_pole_iir_filter_ff(0.00001, 1)
- arrImg = OnDataSource_random(samples)
- self.gr_file_source_0 = gr.vector_source_b(arrImg, True,1)
- #self.gr_file_source_1 = gr.vector_source_b(arrImg, True,1)
- ###############################
- # FADING
- ##############################
- fade_coeff = rice_fading(kappa,len(arrImg),sigma)
- self.fading_source_0 = gr.vector_source_c(fade_coeff,True,1)
- #self.fading_source_1 = gr.vector_source_c(fade_coeff,True,1)
- self.gr_noise_source_x_0 = gr.noise_source_c(gr.GR_GAUSSIAN, pow(float(energia)/float(pow(10, float(ebno)/10))/float(2), 0.5), 42)
- #self.gr_noise_source_x_1 = gr.noise_source_c(gr.GR_GAUSSIAN, pow(float(energia)/float(pow(10, float(ebno)/10))/float(2), 0.5), 42)
- self.gr_packed_to_unpacked_xx_0 = gr.packed_to_unpacked_bb(self.bits, gr.GR_MSB_FIRST)
- self.gr_throttle_0 = gr.throttle(gr.sizeof_char*1, samp_rate)
- #self.gr_throttle_1 = gr.throttle(gr.sizeof_gr_complex*1, samp_rate)
- self.gr_throttle_2 = gr.throttle(gr.sizeof_float*1, samp_rate)
- #self.gr_throttle_3 = gr.throttle(gr.sizeof_float*1, samp_rate)
- #self.wxgui_fftsink2_0 = fftsink2.fft_sink_c(
- #self.notebook_0.GetPage(2),
- #baseband_freq=0,
- #y_per_div=10,
- #y_divs=10,
- #ref_level=50,
- #ref_scale=2.0,
- #sample_rate=samp_rate,
- #fft_size=1024,
- #fft_rate=30,
- #average=False,
- #avg_alpha=None,
- #title="FFT Plot",
- #peak_hold=False,
- #size=((628,410)),
- #)
- self.wxgui_numbersink2_0 = numbersink2.number_sink_f(
- parent=panel,
- unit="",
- minval=0.0,
- maxval=1.0,
- factor=1,
- decimal_places=12,
- ref_level=0,
- sample_rate=samp_rate,
- number_rate=100,
- average=False,
- avg_alpha=None,
- label="BER Sperimentale",
- peak_hold=False,
- show_gauge=False,
- size=((643,500)),
- )
- self.wxgui_scopesink2_0 = scopesink2.scope_sink_c(
- self.notebook_0.GetPage(1),
- title="Scope Plot",
- sample_rate=samp_rate,
- v_scale=1,
- v_offset=0,
- t_scale=0,
- ac_couple=False,
- xy_mode=True,
- num_inputs=1,
- )
- self.wxgui_scopesink2_1 = scopesink2_ber.scope_sink_f(
- self.notebook_0.GetPage(0),
- title="Scope Plot",
- sample_rate=samp_rate,
- v_scale=0.1,
- v_offset=0.4,
- t_scale=2.0,
- ac_couple=False,
- xy_mode=False,
- num_inputs=2,
- )
- self.mod_universale_eb_0 = bpsk.bpsk_mod(
- gray_code=True,
- bit_energy=eb,
- )
- #self.mod_universale_eb_1 = bpsk.bpsk_mod(
- #gray_code=True,
- #bit_energy=eb,
- #)
- self.demod_universale_eb_0 = bpsk.bpsk_demod2(
- gray_code=True,
- bit_energy=eb,
- )
- ##################################################
- # Connections
- ##################################################
- self.connect((self.gr_file_source_0, 0), (self.gr_throttle_0, 0))
- # RAMO SUPERIORE
- self.connect((self.gr_throttle_0, 0),(self.gr_packed_to_unpacked_xx_0, 0))
- self.connect((self.gr_packed_to_unpacked_xx_0, 0), (self.blks2_error_rate, 0))
- self.connect((self.blks2_error_rate, 0), (self.gr_throttle_2, 0))
- self.connect((self.gr_throttle_2, 0), (self.gr_single_pole_iir_filter_xx_0, 0))
- self.connect((self.gr_single_pole_iir_filter_xx_0, 0), (self.wxgui_numbersink2_0, 0))
- self.connect((self.gr_single_pole_iir_filter_xx_0, 0), (self.wxgui_scopesink2_1, 0))
- # TEORICO
- self.connect((self.const_source_x_0, 0), (self.wxgui_scopesink2_1, 1))
- # RAMO INFERIORE
- self.connect((self.gr_throttle_0, 0), (self.mod_universale_eb_0, 0))
- self.connect((self.mod_universale_eb_0, 0), (self.gr_mult_xx_0, 0))
- self.connect((self.fading_source_0, 0), (self.gr_mult_xx_0, 1))
- self.connect((self.gr_mult_xx_0, 0),(self.gr_add_xx_0, 0))
- self.connect((self.gr_noise_source_x_0, 0), (self.gr_add_xx_0, 1))
- self.connect((self.gr_add_xx_0, 0), (self.demod_universale_eb_0, 0))
- self.connect((self.demod_universale_eb_0, 0), (self.blks2_error_rate, 1))
- self.connect((self.gr_add_xx_0, 0), (self.wxgui_scopesink2_0, 0))
- ########################################################################
- # Aggiunta al frame grafico del noteboox
- ########################################################################
- vbox.Add(_ebno_sizer)
- vbox.Add(self.wxgui_numbersink2_0.win)
- vbox.Add(self.notebook_0)
- def set_ebno(self, ebno):
- self.ebno = ebno
- self.set_ebno_lin(pow(10.0, self.ebno/10.0),self.kappa)
- self._ebno_slider.set_value(self.ebno)
- self._ebno_text_box.set_value(self.ebno)
- def set_samp_rate(self, samp_rate):
- self.samp_rate = samp_rate
- self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate)
- self.wxgui_scopesink2_1.set_sample_rate(self.samp_rate)
- self.wxgui_scopesink2_0.set_sample_rate(self.samp_rate)
- def set_ebno_lin(self, ebno_lin,kappa):
- self.ebno_lin = ebno_lin
- self.kappa = kappa
- b = ritorna_ber_ric_psk(2.0,ebno_lin,kappa)
- self.const_source_x_0.set_offset(b)
- self.gr_noise_source_x_0.set_amplitude(pow(float(self.eb)/float(pow(10, float(self.ebno)/10))/float(2), 0.5))
- #self.gr_noise_source_x_1.set_amplitude(pow(float(self.eb)/float(pow(10, float(self.ebno)/10))/float(2), 0.5))
- def set_eb(self, eb):
- self.eb = eb
- def set_const(self, const):
- self.const = const
- def set_bits(self, bits):
- self.bits = bits
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement