我最近一直在使用python学习GNU Radio,并且在制作ASCII来浮动符号分层块调制时,我遇到了这个错误:
Qt GUI: Could not restore geometry: restoreGeometry(self, geometry: Union[QByteArray, bytes, bytearray]): argument 1 has unexpected type 'NoneType'
Traceback (most recent call last):
File "C:\Users\alper\Documents\GNU Radio\asc2sym_bf.py", line 201, in <module>
main()
File "C:\Users\alper\Documents\GNU Radio\asc2sym_bf.py", line 179, in main
tb = top_block_cls(a_bpsym=options.a_bpsym, b_eds=options.b_eds, c_pol=options.c_pol, d_inv=options.d_inv, e_true_asc=options.e_true_asc)
File "C:\Users\alper\Documents\GNU Radio\asc2sym_bf.py", line 82, in __init__
self.blocks_packed_to_unpacked_xx_0 = blocks.packed_to_unpacked_bb(1, 1)
TypeError: __init__(): incompatible constructor arguments. The following argument types are supported:
1. gnuradio.blocks.blocks_python.packed_to_unpacked_bb(bits_per_chunk: int, endianness: gnuradio.gr.gr_python.endianness_t)
Invoked with: 1, 1
我尝试调试它,但没有成功:(,所以请帮助我,这是我写的代码:
from packaging.version import Version as StrictVersion
from PyQt5 import Qt
from gnuradio import qtgui
from gnuradio import blocks
from gnuradio import digital
from gnuradio import gr
from gnuradio.filter import firdes
from gnuradio.fft import window
import sys
import signal
from PyQt5 import Qt
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation
class asc2sym_bf(gr.top_block, Qt.QWidget):
def \__init_\_(self, a_bpsym=1, b_eds=1, c_pol=1, d_inv=0, e_true_asc=0):
gr.top_block.\__init_\_(self, "ASCII to Float Symbols", catch_exceptions=True)
Qt.QWidget.\__init_\_(self)
self.setWindowTitle("ASCII to Float Symbols")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except BaseException as exc:
print(f"Qt GUI: Could not set Icon: {str(exc)}", file=sys.stderr)
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", "asc2sym_bf")
try:
if StrictVersion(Qt.qVersion()) \< StrictVersion("5.0.0"):
self.restoreGeometry(self.settings.value("geometry").toByteArray())
else:
self.restoreGeometry(self.settings.value("geometry"))
except BaseException as exc:
print(f"Qt GUI: Could not restore geometry: {str(exc)}", file=sys.stderr)
##################################################
# Parameters
##################################################
self.a_bpsym = a_bpsym
self.b_eds = b_eds
self.c_pol = c_pol
self.d_inv = d_inv
self.e_true_asc = e_true_asc
##################################################
# Variables
##################################################
self.M = M = 2\*\*a_bpsym
##################################################
# Blocks
##################################################
self.digital_map_bb_0 = digital.map_bb(d_inv\*list(2\*\*8-1-i for i in range(2\*\*8))+(1-d_inv)\*list(range(2\*\*8)))
self.blocks_packed_to_unpacked_xx_0 = blocks.packed_to_unpacked_bb(1, 1)
self.blocks_char_to_float_0 = blocks.char_to_float(1, (c_pol\*0.5+(1-c_pol)\*1))
self.blocks_and_const_xx_0 = blocks.and_const_bb(255)
self.blocks_add_const_vxx_0 = blocks.add_const_ff((-c_pol\*(M-1)+(1-c_pol)\*0))
##################################################
# Connections
##################################################
self.connect((self.blocks_add_const_vxx_0, 0), (self, 0))
self.connect((self.blocks_and_const_xx_0, 0), (self.digital_map_bb_0, 0))
self.connect((self.blocks_char_to_float_0, 0), (self.blocks_add_const_vxx_0, 0))
self.connect((self.blocks_packed_to_unpacked_xx_0, 0), (self.blocks_char_to_float_0, 0))
self.connect((self.digital_map_bb_0, 0), (self.blocks_packed_to_unpacked_xx_0, 0))
self.connect((self, 0), (self.blocks_and_const_xx_0, 0))
def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "asc2sym_bf")
self.settings.setValue("geometry", self.saveGeometry())
self.stop()
self.wait()
event.accept()
def get_a_bpsym(self):
return self.a_bpsym
def set_a_bpsym(self, a_bpsym):
self.a_bpsym = a_bpsym
self.set_M(2\*\*self.a_bpsym)
def get_b_eds(self):
return self.b_eds
def set_b_eds(self, b_eds):
self.b_eds = b_eds
def get_c_pol(self):
return self.c_pol
def set_c_pol(self, c_pol):
self.c_pol = c_pol
self.blocks_add_const_vxx_0.set_k((-self.c_pol\*(self.M-1)+(1-self.c_pol)\*0))
self.blocks_char_to_float_0.set_scale((self.c_pol\*0.5+(1-self.c_pol)\*1))
def get_d_inv(self):
return self.d_inv
def set_d_inv(self, d_inv):
self.d_inv = d_inv
def get_e_true_asc(self):
return self.e_true_asc
def set_e_true_asc(self, e_true_asc):
self.e_true_asc = e_true_asc
def get_M(self):
return self.M
def set_M(self, M):
self.M = M
self.blocks_add_const_vxx_0.set_k((-self.c_pol\*(self.M-1)+(1-self.c_pol)\*0))
def argument_parser():
description = 'Conversion from ASCII (bytes) to M-ary symbols'
parser = ArgumentParser(description=description)
parser.add_argument(
"--a-bpsym", dest="a_bpsym", type=intx, default=1,
help="Set Bits per Symbol \[default=%(default)r\]")
parser.add_argument(
"--b-eds", dest="b_eds", type=intx, default=1,
help="Set LSB First \[default=%(default)r\]")
parser.add_argument(
"--c-pol", dest="c_pol", type=intx, default=1,
help="Set Polar \[default=%(default)r\]")
parser.add_argument(
"--d-inv", dest="d_inv", type=intx, default=0,
help="Set Invert Bits \[default=%(default)r\]")
parser.add_argument(
"--e-true-asc", dest="e_true_asc", type=intx, default=0,
help="Set 7-Bit ASCII \[default=%(default)r\]")
return parser
def main(top_block_cls=asc2sym_bf, options=None):
if options is None:
options = argument_parser().parse_args()
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(a_bpsym=options.a_bpsym, b_eds=options.b_eds, c_pol=options.c_pol, d_inv=options.d_inv, e_true_asc=options.e_true_asc)
tb.start()
tb.show()
def sig_handler(sig=None, frame=None):
tb.stop()
tb.wait()
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)
qapp.exec\_()
if __name__ == '__main__':
main()
我很确定代码是正确的,但无法理解错误。
有人可以帮助我吗?
您使用
1
作为“字节序”参数。但我不知道这是什么意思,GNU Radio 也不知道!
您必须使用两个有效值之一:
gr.endianess_t.GR_MSB_FIRST
或 ….GR_LSB_FIRST
。