Friday, June 5, 2020

module 'gnuradio.digital.qam' has no attribute 'qam_mod'

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: Not titled yet
# Author: fabian
# GNU Radio version: 3.8.1.0

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 gnuradio import qtgui
import sip
from gnuradio import analog
from gnuradio import blocks
from gnuradio import digital
from gnuradio import gr
from gnuradio.filter import firdes
import sys
import signal
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation

from gnuradio import qtgui

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

def __init__(self):
gr.top_block.__init__(self, "Not titled yet")
Qt.QWidget.__init__(self)
self.setWindowTitle("Not titled yet")
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", "qamtest1")

try:
if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry"))
except:
pass

##################################################
# Variables
##################################################
self.fs = fs = 1e6

##################################################
# Blocks
##################################################
self.qtgui_const_sink_x_0 = qtgui.const_sink_c(
1024, #size
"", #name
1 #number of inputs
)
self.qtgui_const_sink_x_0.set_update_time(0.10)
self.qtgui_const_sink_x_0.set_y_axis(-2, 2)
self.qtgui_const_sink_x_0.set_x_axis(-2, 2)
self.qtgui_const_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "")
self.qtgui_const_sink_x_0.enable_autoscale(False)
self.qtgui_const_sink_x_0.enable_grid(False)
self.qtgui_const_sink_x_0.enable_axis_labels(True)


labels = ['', '', '', '', '',
'', '', '', '', '']
widths = [1, 1, 1, 1, 1,
1, 1, 1, 1, 1]
colors = ["blue", "red", "red", "red", "red",
"red", "red", "red", "red", "red"]
styles = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
markers = [0, 0, 0, 0, 0,
0, 0, 0, 0, 0]
alphas = [1.0, 1.0, 1.0, 1.0, 1.0,
1.0, 1.0, 1.0, 1.0, 1.0]

for i in range(1):
if len(labels[i]) == 0:
self.qtgui_const_sink_x_0.set_line_label(i, "Data {0}".format(i))
else:
self.qtgui_const_sink_x_0.set_line_label(i, labels[i])
self.qtgui_const_sink_x_0.set_line_width(i, widths[i])
self.qtgui_const_sink_x_0.set_line_color(i, colors[i])
self.qtgui_const_sink_x_0.set_line_style(i, styles[i])
self.qtgui_const_sink_x_0.set_line_marker(i, markers[i])
self.qtgui_const_sink_x_0.set_line_alpha(i, alphas[i])

self._qtgui_const_sink_x_0_win = sip.wrapinstance(self.qtgui_const_sink_x_0.pyqwidget(), Qt.QWidget)
self.top_grid_layout.addWidget(self._qtgui_const_sink_x_0_win)
self.digital_qam_mod_1 = digital.qam.qam_mod(
constellation_points=16,
mod_code="gray",
differential=True,
samples_per_symbol=2,
excess_bw=0.35,
verbose=False,
log=False)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_char*1, fs,True)
self.analog_random_uniform_source_x_0 = analog.random_uniform_source_b(0, 1, 0)



##################################################
# Connections
##################################################
self.connect((self.analog_random_uniform_source_x_0, 0), (self.blocks_throttle_0, 0))
self.connect((self.blocks_throttle_0, 0), (self.digital_qam_mod_1, 0))
self.connect((self.digital_qam_mod_1, 0), (self.qtgui_const_sink_x_0, 0))


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

def get_fs(self):
return self.fs

def set_fs(self, fs):
self.fs = fs
self.blocks_throttle_0.set_sample_rate(self.fs)





def main(top_block_cls=qamtest1, 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 sig_handler(sig=None, frame=None):
Qt.QApplication.quit()

signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)

timer = Qt.QTimer()
timer.start(500)
timer.timeout.connect(lambda: None)

def quitting():
tb.stop()
tb.wait()

qapp.aboutToQuit.connect(quitting)
qapp.exec_()

if __name__ == '__main__':
main()
Hi everyone,
just added the gnuradio-releases ppa to my Ubuntu 18.04, made sure all
old gnuradio is gone and installed it again. Version is 3.8.1.0 (using
Python 3.6.9).
However, after fiddeling a bit I made a small flow graph using the QAM
modulator, but when I start it, I get:
AttributeError: module 'gnuradio.digital.qam' has no attribute 'qam_mod'
Doc says it should be there. Installation problem? libgnuradio-digital
is installed.

Flow graph and generated python files are attached.
Anyone any idea?

Best regards,
Fabian

PS: Why is there a copyright for 2016, I thought its 2020 and I guess
there have been changes this year already.
PPS: Why do I get 3.8.1.0 if there is only an rc-1 for that version? A
release candidate is not a release in my eyes, but what do I know. ;)

No comments:

Post a Comment