Tuesday, January 29, 2019

[Discuss-gnuradio] How to generate a bit error curve by using QT GUI Bercurve sink

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
##################################################
# GNU Radio Python Flow Graph
# Title: Top Block
# Generated: Wed Jan 30 00:37:24 2019
##################################################

from distutils.version import StrictVersion

if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print "Warning: failed to XInitThreads()"

from PyQt5 import Qt
from PyQt5 import Qt, QtCore
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5import Qt
from gnuradio import analog
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import filter
from gnuradio import gr
from gnuradio import qtgui
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from grc_gnuradio import blks2 as grc_blks2
from optparse import OptionParser
import MyCustomBlock
import math
import numpy
import sip
import sys
from gnuradio import qtgui


class top_block(gr.top_block, Qt.QWidget):

def __init__(self):
gr.top_block.__init__(self, "Top Block")
Qt.QWidget.__init__(self)
self.setWindowTitle("Top Block")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except:
pass
self.top_scroll_layout = Qt.QVBoxLayout()
self.setLayout(self.top_scroll_layout)
self.top_scroll = Qt.QScrollArea()
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
self.top_scroll_layout.addWidget(self.top_scroll)
self.top_scroll.setWidgetResizable(True)
self.top_widget = Qt.QWidget()
self.top_scroll.setWidget(self.top_widget)
self.top_layout = Qt.QVBoxLayout(self.top_widget)
self.top_grid_layout = Qt.QGridLayout()
self.top_layout.addLayout(self.top_grid_layout)

self.settings = Qt.QSettings("GNU Radio", "top_block")

if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry", type=QtCore.QByteArray))

##################################################
# Variables
##################################################
self.sps = sps = 8
self.nfilts = nfilts = 64
self.samp_rate = samp_rate = 32000
self.excess_bw = excess_bw = 0.35
self.bits_per_symbol = bits_per_symbol = 2
self.EbN0 = EbN0 = 16
self.Delay = Delay = nfilts/sps

##################################################
# Blocks
##################################################
self._EbN0_options = (10, 14, 16, 18, 30, )
self._EbN0_labels = (str(self._EbN0_options[0]), str(self._EbN0_options[1]), str(self._EbN0_options[2]), str(self._EbN0_options[3]), str(self._EbN0_options[4]), )
self._EbN0_tool_bar = Qt.QToolBar(self)
self._EbN0_tool_bar.addWidget(Qt.QLabel('EbN0 (dB)'+": "))
self._EbN0_combo_box = Qt.QComboBox()
self._EbN0_tool_bar.addWidget(self._EbN0_combo_box)
for label in self._EbN0_labels: self._EbN0_combo_box.addItem(label)
self._EbN0_callback = lambda i: Qt.QMetaObject.invokeMethod(self._EbN0_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._EbN0_options.index(i)))
self._EbN0_callback(self.EbN0)
self._EbN0_combo_box.currentIndexChanged.connect(
lambda i: self.set_EbN0(self._EbN0_options[i]))
self.top_layout.addWidget(self._EbN0_tool_bar)
self.root_raised_cosine_filter_1 = filter.fir_filter_ccf(1, firdes.root_raised_cosine(
1, sps, 1.0, excess_bw, nfilts))
self.root_raised_cosine_filter_0 = filter.fir_filter_ccf(1, firdes.root_raised_cosine(
1, sps, 1.0, excess_bw, nfilts))
self.qtgui_number_sink_0 = qtgui.number_sink(
gr.sizeof_float,
0,
qtgui.NUM_GRAPH_HORIZ,
1
)
self.qtgui_number_sink_0.set_update_time(0.10)
self.qtgui_number_sink_0.set_title("")

labels = ['', '', '', '', '',
'', '', '', '', '']
units = ['', '', '', '', '',
'', '', '', '', '']
colors = [("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"),
("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black")]
factor = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
for i in xrange(1):
self.qtgui_number_sink_0.set_min(i, -1)
self.qtgui_number_sink_0.set_max(i, 1)
self.qtgui_number_sink_0.set_color(i, colors[i][0], colors[i][1])
if len(labels[i]) == 0:
self.qtgui_number_sink_0.set_label(i, "Data {0}".format(i))
else:
self.qtgui_number_sink_0.set_label(i, labels[i])
self.qtgui_number_sink_0.set_unit(i, units[i])
self.qtgui_number_sink_0.set_factor(i, factor[i])

self.qtgui_number_sink_0.enable_autoscale(False)
self._qtgui_number_sink_0_win = sip.wrapinstance(self.qtgui_number_sink_0.pyqwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_number_sink_0_win)
self.qtgui_bercurve_sink_0 = qtgui.ber_sink_b(
numpy.arange(0.0, 4.0, .5), #range of esnos
1, #number of curves
100, #ensure at least
-7.0, #cutoff
[], #indiv. curve names
)
self.qtgui_bercurve_sink_0.set_update_time(0.10)
self.qtgui_bercurve_sink_0.set_y_axis(-10, 0)
self.qtgui_bercurve_sink_0.set_x_axis(numpy.arange(0.0, 4.0, .5)[0], numpy.arange(0.0, 4.0, .5)[-1])

labels = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "green", "black", "cyan",
"magenta", "yellow", "dark red", "dark green", "blue"]
styles = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
markers = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
alphas = [.35, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]
for i in xrange(1):
if len(labels[i]) == 0:
self.qtgui_bercurve_sink_0.set_line_label(i, "Data {0}".format(i))
else:
self.qtgui_bercurve_sink_0.set_line_label(i, labels[i])
self.qtgui_bercurve_sink_0.set_line_width(i, widths[i])
self.qtgui_bercurve_sink_0.set_line_color(i, colors[i])
self.qtgui_bercurve_sink_0.set_line_style(i, styles[i])
self.qtgui_bercurve_sink_0.set_line_marker(i, markers[i])
self.qtgui_bercurve_sink_0.set_line_alpha(i, alphas[i])

self._qtgui_bercurve_sink_0_win = sip.wrapinstance(self.qtgui_bercurve_sink_0.pyqwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_bercurve_sink_0_win)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char*1, samp_rate,True)
self.blocks_delay_0 = blocks.delay(gr.sizeof_char*1, Delay)
self.blocks_add_xx_0 = blocks.add_vcc(1)
self.blks2_error_rate_0 = grc_blks2.error_rate(
type='BER',
win_size=1000000,
bits_per_symbol=2,
)
self.analog_random_source_x_0 = blocks.vector_source_b(map(int, numpy.random.randint(0, 4, 1000000)), True)
self.analog_noise_source_x_0 = analog.noise_source_c(analog.GR_GAUSSIAN, 1.0 / math.sqrt(bits_per_symbol * 10**(float(EbN0) / 10)), 0)
self.MyCustomBlock_Sample_Down_0 = MyCustomBlock.Sample_Down(sps)
self.MyCustomBlock_SampleUp2_0 = MyCustomBlock.SampleUp2(sps)
self.MyCustomBlock_QPSK_Modulator_1 = MyCustomBlock.QPSK_Modulator(False)
self.MyCustomBlock_QPSK_Demodulator_0 = MyCustomBlock.QPSK_Demodulator(False)

##################################################
# Connections
##################################################
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.blks2_error_rate_0, 1))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 1))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 11))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 13))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 15))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 3))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 5))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 7))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 9))
self.connect((self.MyCustomBlock_QPSK_Modulator_1, 0), (self.MyCustomBlock_SampleUp2_0, 0))
self.connect((self.MyCustomBlock_SampleUp2_0, 0), (self.root_raised_cosine_filter_0, 0))
self.connect((self.MyCustomBlock_Sample_Down_0, 0), (self.MyCustomBlock_QPSK_Demodulator_0, 0))
self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 1))
self.connect((self.analog_random_source_x_0, 0), (self.blocks_delay_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.blocks_throttle_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 10))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 12))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 14))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 2))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 4))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 6))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 8))
self.connect((self.blks2_error_rate_0, 0), (self.qtgui_number_sink_0, 0))
self.connect((self.blocks_add_xx_0, 0), (self.root_raised_cosine_filter_1, 0))
self.connect((self.blocks_delay_0, 0), (self.blks2_error_rate_0, 0))
self.connect((self.blocks_throttle_0, 0), (self.MyCustomBlock_QPSK_Modulator_1, 0))
self.connect((self.root_raised_cosine_filter_0, 0), (self.blocks_add_xx_0, 0))
self.connect((self.root_raised_cosine_filter_1, 0), (self.MyCustomBlock_Sample_Down_0, 0))

def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "top_block")
self.settings.setValue("geometry", self.saveGeometry())
event.accept()

def get_sps(self):
return self.sps

def set_sps(self, sps):
self.sps = sps
self.set_Delay(self.nfilts/self.sps)
self.root_raised_cosine_filter_1.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))
self.root_raised_cosine_filter_0.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))

def get_nfilts(self):
return self.nfilts

def set_nfilts(self, nfilts):
self.nfilts = nfilts
self.set_Delay(self.nfilts/self.sps)
self.root_raised_cosine_filter_1.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))
self.root_raised_cosine_filter_0.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))

def get_samp_rate(self):
return self.samp_rate

def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.blocks_throttle_0.set_sample_rate(self.samp_rate)

def get_excess_bw(self):
return self.excess_bw

def set_excess_bw(self, excess_bw):
self.excess_bw = excess_bw
self.root_raised_cosine_filter_1.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))
self.root_raised_cosine_filter_0.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))

def get_bits_per_symbol(self):
return self.bits_per_symbol

def set_bits_per_symbol(self, bits_per_symbol):
self.bits_per_symbol = bits_per_symbol
self.analog_noise_source_x_0.set_amplitude(1.0 / math.sqrt(self.bits_per_symbol * 10**(float(self.EbN0) / 10)))

def get_EbN0(self):
return self.EbN0

def set_EbN0(self, EbN0):
self.EbN0 = EbN0
self._EbN0_callback(self.EbN0)
self.analog_noise_source_x_0.set_amplitude(1.0 / math.sqrt(self.bits_per_symbol * 10**(float(self.EbN0) / 10)))

def get_Delay(self):
return self.Delay

def set_Delay(self, Delay):
self.Delay = Delay
self.blocks_delay_0.set_dly(self.Delay)


def main(top_block_cls=top_block, options=None):

if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)

tb = top_block_cls()
tb.start()
tb.show()

def quitting():
tb.stop()
tb.wait()
qapp.aboutToQuit.connect(quitting)
qapp.exec_()


if __name__ == '__main__':
main()
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
##################################################
# GNU Radio Python Flow Graph
# Title: Top Block
# Generated: Wed Jan 30 00:37:24 2019
##################################################

from distutils.version import StrictVersion

if __name__ == '__main__':
import ctypes
import sys
if sys.platform.startswith('linux'):
try:
x11 = ctypes.cdll.LoadLibrary('libX11.so')
x11.XInitThreads()
except:
print "Warning: failed to XInitThreads()"

from PyQt5 import Qt
from PyQt5 import Qt, QtCore
from PyQt5.QtCore import QObject, pyqtSlot
from PyQt5 import Qt
from gnuradio import analog
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import filter
from gnuradio import gr
from gnuradio import qtgui
from gnuradio.eng_option import eng_option
from gnuradio.filter import firdes
from grc_gnuradio import blks2 as grc_blks2
from optparse import OptionParser
import MyCustomBlock
import math
import numpy
import sip
import sys
from gnuradio import qtgui


class top_block(gr.top_block, Qt.QWidget):

def __init__(self):
gr.top_block.__init__(self, "Top Block")
Qt.QWidget.__init__(self)
self.setWindowTitle("Top Block")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except:
pass
self.top_scroll_layout = Qt.QVBoxLayout()
self.setLayout(self.top_scroll_layout)
self.top_scroll = Qt.QScrollArea()
self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
self.top_scroll_layout.addWidget(self.top_scroll)
self.top_scroll.setWidgetResizable(True)
self.top_widget = Qt.QWidget()
self.top_scroll.setWidget(self.top_widget)
self.top_layout = Qt.QVBoxLayout(self.top_widget)
self.top_grid_layout = Qt.QGridLayout()
self.top_layout.addLayout(self.top_grid_layout)

self.settings = Qt.QSettings("GNU Radio", "top_block")

if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry", type=QtCore.QByteArray))

##################################################
# Variables
##################################################
self.sps = sps = 8
self.nfilts = nfilts = 64
self.samp_rate = samp_rate = 32000
self.excess_bw = excess_bw = 0.35
self.bits_per_symbol = bits_per_symbol = 2
self.EbN0 = EbN0 = 16
self.Delay = Delay = nfilts/sps

##################################################
# Blocks
##################################################
self._EbN0_options = (10, 14, 16, 18, 30, )
self._EbN0_labels = (str(self._EbN0_options[0]), str(self._EbN0_options[1]), str(self._EbN0_options[2]), str(self._EbN0_options[3]), str(self._EbN0_options[4]), )
self._EbN0_tool_bar = Qt.QToolBar(self)
self._EbN0_tool_bar.addWidget(Qt.QLabel('EbN0 (dB)'+": "))
self._EbN0_combo_box = Qt.QComboBox()
self._EbN0_tool_bar.addWidget(self._EbN0_combo_box)
for label in self._EbN0_labels: self._EbN0_combo_box.addItem(label)
self._EbN0_callback = lambda i: Qt.QMetaObject.invokeMethod(self._EbN0_combo_box, "setCurrentIndex", Qt.Q_ARG("int", self._EbN0_options.index(i)))
self._EbN0_callback(self.EbN0)
self._EbN0_combo_box.currentIndexChanged.connect(
lambda i: self.set_EbN0(self._EbN0_options[i]))
self.top_layout.addWidget(self._EbN0_tool_bar)
self.root_raised_cosine_filter_1 = filter.fir_filter_ccf(1, firdes.root_raised_cosine(
1, sps, 1.0, excess_bw, nfilts))
self.root_raised_cosine_filter_0 = filter.fir_filter_ccf(1, firdes.root_raised_cosine(
1, sps, 1.0, excess_bw, nfilts))
self.qtgui_number_sink_0 = qtgui.number_sink(
gr.sizeof_float,
0,
qtgui.NUM_GRAPH_HORIZ,
1
)
self.qtgui_number_sink_0.set_update_time(0.10)
self.qtgui_number_sink_0.set_title("")

labels = ['', '', '', '', '',
'', '', '', '', '']
units = ['', '', '', '', '',
'', '', '', '', '']
colors = [("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"),
("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black")]
factor = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
for i in xrange(1):
self.qtgui_number_sink_0.set_min(i, -1)
self.qtgui_number_sink_0.set_max(i, 1)
self.qtgui_number_sink_0.set_color(i, colors[i][0], colors[i][1])
if len(labels[i]) == 0:
self.qtgui_number_sink_0.set_label(i, "Data {0}".format(i))
else:
self.qtgui_number_sink_0.set_label(i, labels[i])
self.qtgui_number_sink_0.set_unit(i, units[i])
self.qtgui_number_sink_0.set_factor(i, factor[i])

self.qtgui_number_sink_0.enable_autoscale(False)
self._qtgui_number_sink_0_win = sip.wrapinstance(self.qtgui_number_sink_0.pyqwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_number_sink_0_win)
self.qtgui_bercurve_sink_0 = qtgui.ber_sink_b(
numpy.arange(0.0, 4.0, .5), #range of esnos
1, #number of curves
100, #ensure at least
-7.0, #cutoff
[], #indiv. curve names
)
self.qtgui_bercurve_sink_0.set_update_time(0.10)
self.qtgui_bercurve_sink_0.set_y_axis(-10, 0)
self.qtgui_bercurve_sink_0.set_x_axis(numpy.arange(0.0, 4.0, .5)[0], numpy.arange(0.0, 4.0, .5)[-1])

labels = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "green", "black", "cyan",
"magenta", "yellow", "dark red", "dark green", "blue"]
styles = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
markers = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
alphas = [.35, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]
for i in xrange(1):
if len(labels[i]) == 0:
self.qtgui_bercurve_sink_0.set_line_label(i, "Data {0}".format(i))
else:
self.qtgui_bercurve_sink_0.set_line_label(i, labels[i])
self.qtgui_bercurve_sink_0.set_line_width(i, widths[i])
self.qtgui_bercurve_sink_0.set_line_color(i, colors[i])
self.qtgui_bercurve_sink_0.set_line_style(i, styles[i])
self.qtgui_bercurve_sink_0.set_line_marker(i, markers[i])
self.qtgui_bercurve_sink_0.set_line_alpha(i, alphas[i])

self._qtgui_bercurve_sink_0_win = sip.wrapinstance(self.qtgui_bercurve_sink_0.pyqwidget(), Qt.QWidget)
self.top_layout.addWidget(self._qtgui_bercurve_sink_0_win)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char*1, samp_rate,True)
self.blocks_delay_0 = blocks.delay(gr.sizeof_char*1, Delay)
self.blocks_add_xx_0 = blocks.add_vcc(1)
self.blks2_error_rate_0 = grc_blks2.error_rate(
type='BER',
win_size=1000000,
bits_per_symbol=2,
)
self.analog_random_source_x_0 = blocks.vector_source_b(map(int, numpy.random.randint(0, 4, 1000000)), True)
self.analog_noise_source_x_0 = analog.noise_source_c(analog.GR_GAUSSIAN, 1.0 / math.sqrt(bits_per_symbol * 10**(float(EbN0) / 10)), 0)
self.MyCustomBlock_Sample_Down_0 = MyCustomBlock.Sample_Down(sps)
self.MyCustomBlock_SampleUp2_0 = MyCustomBlock.SampleUp2(sps)
self.MyCustomBlock_QPSK_Modulator_1 = MyCustomBlock.QPSK_Modulator(False)
self.MyCustomBlock_QPSK_Demodulator_0 = MyCustomBlock.QPSK_Demodulator(False)

##################################################
# Connections
##################################################
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.blks2_error_rate_0, 1))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 1))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 11))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 13))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 15))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 3))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 5))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 7))
self.connect((self.MyCustomBlock_QPSK_Demodulator_0, 0), (self.qtgui_bercurve_sink_0, 9))
self.connect((self.MyCustomBlock_QPSK_Modulator_1, 0), (self.MyCustomBlock_SampleUp2_0, 0))
self.connect((self.MyCustomBlock_SampleUp2_0, 0), (self.root_raised_cosine_filter_0, 0))
self.connect((self.MyCustomBlock_Sample_Down_0, 0), (self.MyCustomBlock_QPSK_Demodulator_0, 0))
self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 1))
self.connect((self.analog_random_source_x_0, 0), (self.blocks_delay_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.blocks_throttle_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 0))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 10))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 12))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 14))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 2))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 4))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 6))
self.connect((self.analog_random_source_x_0, 0), (self.qtgui_bercurve_sink_0, 8))
self.connect((self.blks2_error_rate_0, 0), (self.qtgui_number_sink_0, 0))
self.connect((self.blocks_add_xx_0, 0), (self.root_raised_cosine_filter_1, 0))
self.connect((self.blocks_delay_0, 0), (self.blks2_error_rate_0, 0))
self.connect((self.blocks_throttle_0, 0), (self.MyCustomBlock_QPSK_Modulator_1, 0))
self.connect((self.root_raised_cosine_filter_0, 0), (self.blocks_add_xx_0, 0))
self.connect((self.root_raised_cosine_filter_1, 0), (self.MyCustomBlock_Sample_Down_0, 0))

def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "top_block")
self.settings.setValue("geometry", self.saveGeometry())
event.accept()

def get_sps(self):
return self.sps

def set_sps(self, sps):
self.sps = sps
self.set_Delay(self.nfilts/self.sps)
self.root_raised_cosine_filter_1.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))
self.root_raised_cosine_filter_0.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))

def get_nfilts(self):
return self.nfilts

def set_nfilts(self, nfilts):
self.nfilts = nfilts
self.set_Delay(self.nfilts/self.sps)
self.root_raised_cosine_filter_1.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))
self.root_raised_cosine_filter_0.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))

def get_samp_rate(self):
return self.samp_rate

def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.blocks_throttle_0.set_sample_rate(self.samp_rate)

def get_excess_bw(self):
return self.excess_bw

def set_excess_bw(self, excess_bw):
self.excess_bw = excess_bw
self.root_raised_cosine_filter_1.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))
self.root_raised_cosine_filter_0.set_taps(firdes.root_raised_cosine(1, self.sps, 1.0, self.excess_bw, self.nfilts))

def get_bits_per_symbol(self):
return self.bits_per_symbol

def set_bits_per_symbol(self, bits_per_symbol):
self.bits_per_symbol = bits_per_symbol
self.analog_noise_source_x_0.set_amplitude(1.0 / math.sqrt(self.bits_per_symbol * 10**(float(self.EbN0) / 10)))

def get_EbN0(self):
return self.EbN0

def set_EbN0(self, EbN0):
self.EbN0 = EbN0
self._EbN0_callback(self.EbN0)
self.analog_noise_source_x_0.set_amplitude(1.0 / math.sqrt(self.bits_per_symbol * 10**(float(self.EbN0) / 10)))

def get_Delay(self):
return self.Delay

def set_Delay(self, Delay):
self.Delay = Delay
self.blocks_delay_0.set_dly(self.Delay)


def main(top_block_cls=top_block, options=None):

if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
style = gr.prefs().get_string('qtgui', 'style', 'raster')
Qt.QApplication.setGraphicsSystem(style)
qapp = Qt.QApplication(sys.argv)

tb = top_block_cls()
tb.start()
tb.show()

def quitting():
tb.stop()
tb.wait()
qapp.aboutToQuit.connect(quitting)
qapp.exec_()


if __name__ == '__main__':
main()

Hello,
I am working with GNU Radio Companion 3.7.11 .I would like to generate a bit error curve by using QT GUI Bercurve sink.So I have been using Random source,Qpsk Modulator ,sample up,Root Raised Cosine filter ,noise source With (1.0 / math.sqrt(bits_per_symbol * 10**(float(EbN0) / 10)) this para meter,sample down, Qpsk demodulate,Error rate and  QT GUI Bercurve sink .

I am getting perfect Bit Error rate however when I am trying to generate a bit error curve for 0 db,15 db,10db,20,db,22db like this Unfortunately QT GUI Bercurve sink is not working .
Could you please have a look about my problem that will be great .For better explanation here I am providing my systems Screen shorts and Top Block.
Thanks in advance.
Regards,
Arefin 

1 comment: