Advertisement
artynet

bpsk_rician

Mar 26th, 2012
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.40 KB | None | 0 0
  1. class ber_rician_bpsk(stdgui2.std_top_block):
  2.     def __init__(self, frame, panel, vbox, argv,energia,kappa,sigma):
  3.         stdgui2.std_top_block.__init__(self, frame, panel, vbox, argv)
  4.  
  5.         ##################################################
  6.         # Variables
  7.         ##################################################
  8.         self.samples = samples = 500000
  9.         self.ebno = ebno = 0
  10.         self.samp_rate = samp_rate = 64000
  11.         self.ebno_lin = ebno_lin = pow(10.0, ebno/10.0)
  12.         self.eb = eb = energia
  13.         self.bits = bits = 1
  14.         self.kappa = kappa
  15.         self.sigma = sigma
  16.  
  17.         ##################################################
  18.         # Notebooks
  19.         ##################################################
  20.         self.notebook_0 = wx.Notebook(panel, style=wx.NB_TOP)
  21.         self.notebook_0.AddPage(wx.Panel(self.notebook_0), "BER")
  22.         self.notebook_0.AddPage(wx.Panel(self.notebook_0), "Costellazione")
  23.         #self.notebook_0.AddPage(wx.Panel(self.notebook_0), "Spettro")
  24.        
  25.  
  26.         ##################################################
  27.         # Controls
  28.         ##################################################
  29.  
  30.         _ebno_sizer = wx.BoxSizer(wx.VERTICAL)
  31.         _ebno_sizer.Add((10,0), 0)
  32.         self._ebno_text_box = forms.text_box(
  33.             parent=panel,
  34.                 width=705,
  35.             sizer=_ebno_sizer,
  36.             value=self.ebno,
  37.             callback=self.set_ebno,
  38.             label="Eb/No (dB)",
  39.             converter=forms.float_converter(),
  40.             proportion=0,
  41.         )
  42.        
  43.         self._ebno_slider = forms.slider(
  44.             parent=panel,
  45.             sizer=_ebno_sizer,
  46.             value=self.ebno,
  47.             callback=self.set_ebno,
  48.                 label="Eb/No",
  49.             minimum=-30,
  50.             maximum=60,
  51.             num_steps=180,
  52.             style=wx.SL_HORIZONTAL,
  53.             cast=float,
  54.             proportion=1,
  55.         )
  56.        
  57.        
  58.  
  59.         ##################################################
  60.         # Blocks
  61.         ##################################################
  62.         self.blks2_error_rate = error_rate(
  63.             type='BER',
  64.             win_size=samples,
  65.             bits_per_symbol=self.bits,
  66.         )
  67.        
  68.         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))
  69.        
  70.         self.gr_add_xx_0 = gr.add_vcc(1)
  71.         #self.gr_add_xx_1 = gr.add_vcc(1)
  72.         self.gr_mult_xx_0 = gr.multiply_vcc(1)
  73.         #self.gr_mult_xx_1 = gr.multiply_vcc(1)
  74.        
  75.         self.gr_single_pole_iir_filter_xx_0 = gr.single_pole_iir_filter_ff(0.00001, 1)
  76.        
  77.         arrImg = OnDataSource_random(samples)
  78.        
  79.         self.gr_file_source_0 = gr.vector_source_b(arrImg, True,1)
  80.         #self.gr_file_source_1 = gr.vector_source_b(arrImg, True,1)
  81.        
  82.         ###############################
  83.         # FADING
  84.         ##############################
  85.        
  86.         fade_coeff = rice_fading(kappa,len(arrImg),sigma)
  87.         self.fading_source_0 = gr.vector_source_c(fade_coeff,True,1)
  88.         #self.fading_source_1 = gr.vector_source_c(fade_coeff,True,1)
  89.        
  90.         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)
  91.         #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)
  92.        
  93.         self.gr_packed_to_unpacked_xx_0 = gr.packed_to_unpacked_bb(self.bits, gr.GR_MSB_FIRST)
  94.        
  95.         self.gr_throttle_0 = gr.throttle(gr.sizeof_char*1, samp_rate)
  96.         #self.gr_throttle_1 = gr.throttle(gr.sizeof_gr_complex*1, samp_rate)
  97.         self.gr_throttle_2 = gr.throttle(gr.sizeof_float*1, samp_rate)
  98.         #self.gr_throttle_3 = gr.throttle(gr.sizeof_float*1, samp_rate)
  99.        
  100.         #self.wxgui_fftsink2_0 = fftsink2.fft_sink_c(
  101.             #self.notebook_0.GetPage(2),
  102.             #baseband_freq=0,
  103.             #y_per_div=10,
  104.             #y_divs=10,
  105.             #ref_level=50,
  106.             #ref_scale=2.0,
  107.             #sample_rate=samp_rate,
  108.             #fft_size=1024,
  109.             #fft_rate=30,
  110.             #average=False,
  111.             #avg_alpha=None,
  112.             #title="FFT Plot",
  113.             #peak_hold=False,
  114.             #size=((628,410)),
  115.         #)
  116.  
  117.         self.wxgui_numbersink2_0 = numbersink2.number_sink_f(
  118.             parent=panel,
  119.             unit="",
  120.             minval=0.0,
  121.             maxval=1.0,
  122.             factor=1,
  123.             decimal_places=12,
  124.             ref_level=0,
  125.             sample_rate=samp_rate,
  126.             number_rate=100,
  127.             average=False,
  128.             avg_alpha=None,
  129.             label="BER Sperimentale",
  130.             peak_hold=False,
  131.             show_gauge=False,
  132.             size=((643,500)),
  133.         )
  134.        
  135.  
  136.        
  137.         self.wxgui_scopesink2_0 = scopesink2.scope_sink_c(
  138.             self.notebook_0.GetPage(1),
  139.             title="Scope Plot",
  140.             sample_rate=samp_rate,
  141.             v_scale=1,
  142.             v_offset=0,
  143.             t_scale=0,
  144.             ac_couple=False,
  145.             xy_mode=True,
  146.             num_inputs=1,
  147.         )
  148.        
  149.         self.wxgui_scopesink2_1 = scopesink2_ber.scope_sink_f(
  150.             self.notebook_0.GetPage(0),
  151.             title="Scope Plot",
  152.             sample_rate=samp_rate,
  153.             v_scale=0.1,
  154.             v_offset=0.4,
  155.             t_scale=2.0,
  156.             ac_couple=False,
  157.             xy_mode=False,
  158.             num_inputs=2,
  159.         )
  160.  
  161.         self.mod_universale_eb_0 = bpsk.bpsk_mod(
  162.             gray_code=True,
  163.                 bit_energy=eb,
  164.         )
  165.        
  166.         #self.mod_universale_eb_1 = bpsk.bpsk_mod(
  167.             #gray_code=True,
  168.                 #bit_energy=eb,
  169.         #)
  170.        
  171.         self.demod_universale_eb_0 = bpsk.bpsk_demod2(
  172.             gray_code=True,
  173.                 bit_energy=eb,
  174.         )
  175.  
  176.         ##################################################
  177.         # Connections
  178.         ##################################################
  179.         self.connect((self.gr_file_source_0, 0), (self.gr_throttle_0, 0))
  180.        
  181.         # RAMO SUPERIORE
  182.        
  183.         self.connect((self.gr_throttle_0, 0),(self.gr_packed_to_unpacked_xx_0, 0))
  184.         self.connect((self.gr_packed_to_unpacked_xx_0, 0), (self.blks2_error_rate, 0))
  185.         self.connect((self.blks2_error_rate, 0), (self.gr_throttle_2, 0))
  186.         self.connect((self.gr_throttle_2, 0), (self.gr_single_pole_iir_filter_xx_0, 0))
  187.         self.connect((self.gr_single_pole_iir_filter_xx_0, 0), (self.wxgui_numbersink2_0, 0))
  188.         self.connect((self.gr_single_pole_iir_filter_xx_0, 0), (self.wxgui_scopesink2_1, 0))
  189.        
  190.         # TEORICO
  191.        
  192.         self.connect((self.const_source_x_0, 0), (self.wxgui_scopesink2_1, 1))
  193.            
  194.         # RAMO INFERIORE
  195.        
  196.         self.connect((self.gr_throttle_0, 0), (self.mod_universale_eb_0, 0))
  197.         self.connect((self.mod_universale_eb_0, 0), (self.gr_mult_xx_0, 0))
  198.         self.connect((self.fading_source_0, 0), (self.gr_mult_xx_0, 1))
  199.         self.connect((self.gr_mult_xx_0, 0),(self.gr_add_xx_0, 0))
  200.         self.connect((self.gr_noise_source_x_0, 0), (self.gr_add_xx_0, 1))
  201.         self.connect((self.gr_add_xx_0, 0), (self.demod_universale_eb_0, 0))
  202.         self.connect((self.demod_universale_eb_0, 0), (self.blks2_error_rate, 1))
  203.         self.connect((self.gr_add_xx_0, 0), (self.wxgui_scopesink2_0, 0))
  204.            
  205.        
  206.        
  207.         ########################################################################
  208.         # Aggiunta al frame grafico del noteboox
  209.         ########################################################################
  210.  
  211.         vbox.Add(_ebno_sizer)
  212.         vbox.Add(self.wxgui_numbersink2_0.win)
  213.         vbox.Add(self.notebook_0)
  214.  
  215.     def set_ebno(self, ebno):
  216.         self.ebno = ebno
  217.         self.set_ebno_lin(pow(10.0, self.ebno/10.0),self.kappa)
  218.         self._ebno_slider.set_value(self.ebno)
  219.         self._ebno_text_box.set_value(self.ebno)
  220.  
  221.  
  222.     def set_samp_rate(self, samp_rate):
  223.         self.samp_rate = samp_rate
  224.         self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate)
  225.         self.wxgui_scopesink2_1.set_sample_rate(self.samp_rate)
  226.         self.wxgui_scopesink2_0.set_sample_rate(self.samp_rate)
  227.  
  228.     def set_ebno_lin(self, ebno_lin,kappa):
  229.         self.ebno_lin = ebno_lin
  230.         self.kappa = kappa
  231.         b = ritorna_ber_ric_psk(2.0,ebno_lin,kappa)
  232.         self.const_source_x_0.set_offset(b)
  233.         self.gr_noise_source_x_0.set_amplitude(pow(float(self.eb)/float(pow(10, float(self.ebno)/10))/float(2), 0.5))
  234.         #self.gr_noise_source_x_1.set_amplitude(pow(float(self.eb)/float(pow(10, float(self.ebno)/10))/float(2), 0.5))
  235.  
  236.     def set_eb(self, eb):
  237.         self.eb = eb
  238.  
  239.     def set_const(self, const):
  240.         self.const = const
  241.  
  242.     def set_bits(self, bits):
  243.         self.bits = bits
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement