Evening all,
我正在做一个项目,以实现某种形式的认知无线电。
我不认为这是一个真正的GNURadio问题,而是一个python问题。
到目前为止,我已经成功地启用了频谱扫描,并可以基于此设置局部变量以获得最佳通道。 此外,我已经能够将该频率(使用文件(传输到接收器以进行空中重新配置 (OTAR(。
我现在正在努力解决的问题,希望这是一个简单的解决方案,一旦我为 OTAR 发送了文件,我希望 GNURadio 生成的 python 文件在一段时间后自动关闭,比如 30 秒。 这应该触发退出规则,在此命令中打开我的第二个传输文件,该文件将发送数据文件。
有没有一种简单的方法可以让 GNURadio 文件在给定时间段后自动退出?
#!/usr/bin/env python2
#
-*- coding: utf-8 -*-
##################################################
#GNU Radio Python Flow Graph
# Title: Gmsk Tx
# Generated: Mon Jul 31 16:38:52 2017
#Edited for Project (import os and os.system("python ./Basic_SigGen.py") in def quitting():
#################################################
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 PyQt4 import Qt
from gnuradio import blocks
from gnuradio import digital
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import uhd
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 sys
import time
import os
class GMSK_TX(gr.top_block, Qt.QWidget):
def __init__(self):
gr.top_block.__init__(self, "Gmsk Tx")
Qt.QWidget.__init__(self)
self.setWindowTitle("Gmsk Tx")
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", "GMSK_TX")
self.restoreGeometry(self.settings.value("geometry").toByteArray())
##################################################
# Variables
##################################################
self.samp_rate = samp_rate = 1e6
self.freq = freq = 2e9
self.code1 = code1 = '010110011011101100010101011111101001001110001011010001101010001'
##################################################
# Blocks
##################################################
self.uhd_usrp_sink_0_0 = uhd.usrp_sink(
",".join(("", "")),
uhd.stream_args(
cpu_format="fc32",
channels=range(1),
),
)
self.uhd_usrp_sink_0_0.set_samp_rate(samp_rate)
self.uhd_usrp_sink_0_0.set_center_freq(freq, 0)
self.uhd_usrp_sink_0_0.set_gain(30, 0)
self.uhd_usrp_sink_0_0.set_antenna('TX/RX', 0)
self.digital_gmsk_mod_0 = digital.gmsk_mod(
samples_per_symbol=2,
bt=0.35,
verbose=False,
log=False,
)
self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((1, ))
self.blocks_file_source_0 = blocks.file_source(gr.sizeof_char*1, '/root/optimum_freq.csv', False)
self.blks2_packet_encoder_0 = grc_blks2.packet_mod_b(grc_blks2.packet_encoder(
samples_per_symbol=2,
bits_per_symbol=1,
preamble='',
access_code=code1,
pad_for_usrp=True,
),
payload_length=1,
)
##################################################
# Connections
##################################################
self.connect((self.blks2_packet_encoder_0, 0), (self.digital_gmsk_mod_0, 0))
self.connect((self.blocks_file_source_0, 0), (self.blks2_packet_encoder_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0_0, 0))
self.connect((self.digital_gmsk_mod_0, 0), (self.blocks_multiply_const_vxx_0, 0))
def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "GMSK_TX")
self.settings.setValue("geometry", self.saveGeometry())
event.accept()
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.uhd_usrp_sink_0_0.set_samp_rate(self.samp_rate)
def get_freq(self):
return self.freq
def set_freq(self, freq):
self.freq = freq
self.uhd_usrp_sink_0_0.set_center_freq(self.freq, 0)
def get_code1(self):
return self.code1
def set_code1(self, code1):
self.code1 = code1
def main(top_block_cls=GMSK_TX, options=None):
from distutils.version import StrictVersion
if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.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()
os.system("python ./Basic_SigGen.py")
qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting)
qapp.exec_()
if __name__ == '__main__':
main()
你可以使用 python sys 模块...
要终止 python 脚本,可以调用sys.exit()
。我想这就是你想要的...你也可以使用 python 时间模块来创建计时器。我可以让你弄清楚如何做到这一点,或者我可以编写脚本,如果你愿意,我会循环检查时间是否已经过去了。
希望这有帮助!