Advertisement
artynet

grc_flow_graph

Mar 10th, 2012
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.58 KB | None | 0 0
  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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement