SHARE
TWEET

grc_flow_graph

artynet Mar 10th, 2012 113 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/usr/bin/env python
  2. ##################################################
  3. # Gnuradio Python Flow Graph
  4. # Title: BER Simulation
  5. # Author: Example
  6. # Description: Adjust the noise and constellation... see what happens!
  7. # Generated: Sun Mar 11 02:14:07 2012
  8. ##################################################
  9.  
  10. from gnuradio import eng_notation
  11. from gnuradio import gr
  12. from gnuradio.digital import digital_swig
  13. from gnuradio.eng_option import eng_option
  14. from gnuradio.gr import firdes
  15. from gnuradio.wxgui import forms
  16. from gnuradio.wxgui import numbersink2
  17. from grc_gnuradio import blks2 as grc_blks2
  18. from grc_gnuradio import wxgui as grc_wxgui
  19. from mod_new import psk_new
  20. from optparse import OptionParser
  21. import math
  22. import random_source
  23. import wx
  24.  
  25. class ber_sim(grc_wxgui.top_block_gui):
  26.  
  27.         def __init__(self):
  28.                 grc_wxgui.top_block_gui.__init__(self, title="BER Simulation")
  29.                 _icon_path = "/home/artynet/.local/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
  30.                 self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
  31.  
  32.                 ##################################################
  33.                 # Variables
  34.                 ##################################################
  35.                 self.samp_rate = samp_rate = 32e3
  36.                 self.noise = noise = .25
  37.                 self.ebno = ebno = 0
  38.                 self.bits = bits = 2
  39.  
  40.                 ##################################################
  41.                 # Blocks
  42.                 ##################################################
  43.                 _ebno_sizer = wx.BoxSizer(wx.VERTICAL)
  44.                 self._ebno_text_box = forms.text_box(
  45.                         parent=self.GetWin(),
  46.                         sizer=_ebno_sizer,
  47.                         value=self.ebno,
  48.                         callback=self.set_ebno,
  49.                         label="ebno",
  50.                         converter=forms.float_converter(),
  51.                         proportion=0,
  52.                 )
  53.                 self._ebno_slider = forms.slider(
  54.                         parent=self.GetWin(),
  55.                         sizer=_ebno_sizer,
  56.                         value=self.ebno,
  57.                         callback=self.set_ebno,
  58.                         minimum=-50,
  59.                         maximum=100,
  60.                         num_steps=100,
  61.                         style=wx.SL_HORIZONTAL,
  62.                         cast=float,
  63.                         proportion=1,
  64.                 )
  65.                 self.Add(_ebno_sizer)
  66.                 self.wxgui_numbersink2 = numbersink2.number_sink_f(
  67.                         self.GetWin(),
  68.                         unit="",
  69.                         minval=0.0,
  70.                         maxval=1.0,
  71.                         factor=1,
  72.                         decimal_places=10,
  73.                         ref_level=0,
  74.                         sample_rate=samp_rate,
  75.                         number_rate=15,
  76.                         average=False,
  77.                         avg_alpha=None,
  78.                         label="BER",
  79.                         peak_hold=False,
  80.                         show_gauge=False,
  81.                 )
  82.                 self.GridAdd(self.wxgui_numbersink2.win, 1, 0, 1, 1)
  83.                 self.gr_vector_source_x_0 = gr.vector_source_b((random_source.OnDataSource_random(600000)), True, 1)
  84.                 self.gr_throttle = gr.throttle(gr.sizeof_char*1, samp_rate)
  85.                 self.gr_packed_to_unpacked_xx_0 = gr.packed_to_unpacked_bb(bits, gr.GR_MSB_FIRST)
  86.                 self.gr_noise_source_x = gr.noise_source_c(gr.GR_GAUSSIAN, pow(float(1)/float(pow(10, float(ebno)/float(10)))/float(2), 0.5), 42)
  87.                 self.gr_add_xx = gr.add_vcc(1)
  88.                 self.digital_psk_mod_new_0 = psk_new.psk_mod(
  89.                   constellation_points=int(pow(2,bits)),
  90.                   mod_code="gray")
  91.                  
  92.                 self.digital_psk_demod_new_0 = psk_new.psk_demod(
  93.                   constellation_points=int(pow(2,bits)),
  94.                     gray_coded="gray",)
  95.                  
  96.                 self.blks2_error_rate = grc_blks2.error_rate(
  97.                         type='BER',
  98.                         win_size=100000,
  99.                         bits_per_symbol=bits,
  100.                 )
  101.  
  102.                 ##################################################
  103.                 # Connections
  104.                 ##################################################
  105.                 self.connect((self.blks2_error_rate, 0), (self.wxgui_numbersink2, 0))
  106.                 self.connect((self.gr_noise_source_x, 0), (self.gr_add_xx, 1))
  107.                 self.connect((self.digital_psk_mod_new_0, 0), (self.gr_add_xx, 0))
  108.                 self.connect((self.gr_vector_source_x_0, 0), (self.digital_psk_mod_new_0, 0))
  109.                 self.connect((self.gr_vector_source_x_0, 0), (self.gr_throttle, 0))
  110.                 self.connect((self.gr_throttle, 0), (self.gr_packed_to_unpacked_xx_0, 0))
  111.                 self.connect((self.gr_packed_to_unpacked_xx_0, 0), (self.blks2_error_rate, 0))
  112.                 self.connect((self.gr_add_xx, 0), (self.digital_psk_demod_new_0, 0))
  113.                 self.connect((self.digital_psk_demod_new_0, 0), (self.blks2_error_rate, 1))
  114.  
  115.         def get_samp_rate(self):
  116.                 return self.samp_rate
  117.  
  118.         def set_samp_rate(self, samp_rate):
  119.                 self.samp_rate = samp_rate
  120.  
  121.         def get_noise(self):
  122.                 return self.noise
  123.  
  124.         def set_noise(self, noise):
  125.                 self.noise = noise
  126.  
  127.         def get_ebno(self):
  128.                 return self.ebno
  129.  
  130.         def set_ebno(self, ebno):
  131.                 self.ebno = ebno
  132.                 self.gr_noise_source_x.set_amplitude(pow(float(1)/float(pow(10, float(self.ebno)/float(10)))/float(2), 0.5))
  133.                 self._ebno_slider.set_value(self.ebno)
  134.                 self._ebno_text_box.set_value(self.ebno)
  135.  
  136.         def get_bits(self):
  137.                 return self.bits
  138.  
  139.         def set_bits(self, bits):
  140.                 self.bits = bits
  141.  
  142. if __name__ == '__main__':
  143.         parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
  144.         (options, args) = parser.parse_args()
  145.         tb = ber_sim()
  146.         tb.Run(True)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top