Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- ##################################################
- # Gnuradio Python Flow Graph
- # Title: BER Simulation
- # Author: Example
- # Description: Adjust the noise and constellation... see what happens!
- # Generated: Sun Mar 11 02:14:07 2012
- ##################################################
- from gnuradio import eng_notation
- from gnuradio import gr
- from gnuradio.digital import digital_swig
- from gnuradio.eng_option import eng_option
- from gnuradio.gr import firdes
- from gnuradio.wxgui import forms
- from gnuradio.wxgui import numbersink2
- from grc_gnuradio import blks2 as grc_blks2
- from grc_gnuradio import wxgui as grc_wxgui
- from mod_new import psk_new
- from optparse import OptionParser
- import math
- import random_source
- import wx
- class ber_sim(grc_wxgui.top_block_gui):
- def __init__(self):
- grc_wxgui.top_block_gui.__init__(self, title="BER Simulation")
- _icon_path = "/home/artynet/.local/share/icons/hicolor/32x32/apps/gnuradio-grc.png"
- self.SetIcon(wx.Icon(_icon_path, wx.BITMAP_TYPE_ANY))
- ##################################################
- # Variables
- ##################################################
- self.samp_rate = samp_rate = 32e3
- self.noise = noise = .25
- self.ebno = ebno = 0
- self.bits = bits = 2
- ##################################################
- # Blocks
- ##################################################
- _ebno_sizer = wx.BoxSizer(wx.VERTICAL)
- self._ebno_text_box = forms.text_box(
- parent=self.GetWin(),
- sizer=_ebno_sizer,
- value=self.ebno,
- callback=self.set_ebno,
- label="ebno",
- converter=forms.float_converter(),
- proportion=0,
- )
- self._ebno_slider = forms.slider(
- parent=self.GetWin(),
- sizer=_ebno_sizer,
- value=self.ebno,
- callback=self.set_ebno,
- minimum=-50,
- maximum=100,
- num_steps=100,
- style=wx.SL_HORIZONTAL,
- cast=float,
- proportion=1,
- )
- self.Add(_ebno_sizer)
- self.wxgui_numbersink2 = numbersink2.number_sink_f(
- self.GetWin(),
- unit="",
- minval=0.0,
- maxval=1.0,
- factor=1,
- decimal_places=10,
- ref_level=0,
- sample_rate=samp_rate,
- number_rate=15,
- average=False,
- avg_alpha=None,
- label="BER",
- peak_hold=False,
- show_gauge=False,
- )
- self.GridAdd(self.wxgui_numbersink2.win, 1, 0, 1, 1)
- self.gr_vector_source_x_0 = gr.vector_source_b((random_source.OnDataSource_random(600000)), True, 1)
- self.gr_throttle = gr.throttle(gr.sizeof_char*1, samp_rate)
- self.gr_packed_to_unpacked_xx_0 = gr.packed_to_unpacked_bb(bits, gr.GR_MSB_FIRST)
- 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)
- self.gr_add_xx = gr.add_vcc(1)
- self.digital_psk_mod_new_0 = psk_new.psk_mod(
- constellation_points=int(pow(2,bits)),
- mod_code="gray")
- self.digital_psk_demod_new_0 = psk_new.psk_demod(
- constellation_points=int(pow(2,bits)),
- gray_coded="gray",)
- self.blks2_error_rate = grc_blks2.error_rate(
- type='BER',
- win_size=100000,
- bits_per_symbol=bits,
- )
- ##################################################
- # Connections
- ##################################################
- self.connect((self.blks2_error_rate, 0), (self.wxgui_numbersink2, 0))
- self.connect((self.gr_noise_source_x, 0), (self.gr_add_xx, 1))
- self.connect((self.digital_psk_mod_new_0, 0), (self.gr_add_xx, 0))
- self.connect((self.gr_vector_source_x_0, 0), (self.digital_psk_mod_new_0, 0))
- self.connect((self.gr_vector_source_x_0, 0), (self.gr_throttle, 0))
- self.connect((self.gr_throttle, 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.gr_add_xx, 0), (self.digital_psk_demod_new_0, 0))
- self.connect((self.digital_psk_demod_new_0, 0), (self.blks2_error_rate, 1))
- def get_samp_rate(self):
- return self.samp_rate
- def set_samp_rate(self, samp_rate):
- self.samp_rate = samp_rate
- def get_noise(self):
- return self.noise
- def set_noise(self, noise):
- self.noise = noise
- def get_ebno(self):
- return self.ebno
- def set_ebno(self, ebno):
- self.ebno = ebno
- self.gr_noise_source_x.set_amplitude(pow(float(1)/float(pow(10, float(self.ebno)/float(10)))/float(2), 0.5))
- self._ebno_slider.set_value(self.ebno)
- self._ebno_text_box.set_value(self.ebno)
- def get_bits(self):
- return self.bits
- def set_bits(self, bits):
- self.bits = bits
- if __name__ == '__main__':
- parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
- (options, args) = parser.parse_args()
- tb = ber_sim()
- tb.Run(True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement