Ich nutze GNU Radio Companion (GRC) um von meinem USRP Daten abzuspeichern.
Im GRC kann man Variablen definieren und Blöcke aneinander reihen und so eine Architektur erstellen, wie ich das gemacht habe.
Code: Alles auswählen
+-----------------+ +------+ +----------+
| UHD USRP Source |----------->| Head |----------->| Filesink |
+-----------------+ +------+ +----------+ Ich möchte nun einfach nur über die Konsole einen Wert an dieses Python Script übergeben.
Im folgenden seht ihr die unveränderte Datei von GRC und anschliessend die von mir veränderte.
Code: Alles auswählen
#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Top Block
# Generated: Fri May 2 11:59:11 2014
##################################################
from gnuradio import blocks
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 optparse import OptionParser
import time
class top_block(gr.top_block):
def __init__(self):
gr.top_block.__init__(self, "Top Block")
##################################################
# Variables
##################################################
self.f_samp = f_samp = 10e6
self.f_center = f_center = 1.57542e9
self.USRP_Gain = USRP_Gain = 30
self.USRP_BW = USRP_BW = 0
##################################################
# Blocks
##################################################
self.uhd_usrp_source_0 = uhd.usrp_source(
device_addr="addr=192.168.10.2",
stream_args=uhd.stream_args(
cpu_format="sc16",
channels=range(1),
),
)
self.uhd_usrp_source_0.set_samp_rate(f_samp)
self.uhd_usrp_source_0.set_center_freq(f_center, 0)
self.uhd_usrp_source_0.set_gain(USRP_Gain, 0)
self.blocks_head_0 = blocks.head(gr.sizeof_short*2, int(f_samp*10e-3))
self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_short*2, "/home/gnss/GNSS_Work/Architekturen/L1.dat", False)
self.blocks_file_sink_0.set_unbuffered(False)
##################################################
# Connections
##################################################
self.connect((self.blocks_head_0, 0), (self.blocks_file_sink_0, 0))
self.connect((self.uhd_usrp_source_0, 0), (self.blocks_head_0, 0))
# QT sink close method reimplementation
def get_f_samp(self):
return self.f_samp
def set_f_samp(self, f_samp):
self.f_samp = f_samp
self.uhd_usrp_source_0.set_samp_rate(self.f_samp)
def get_f_center(self):
return self.f_center
def set_f_center(self, f_center):
self.f_center = f_center
self.uhd_usrp_source_0.set_center_freq(self.f_center, 0)
def get_USRP_Gain(self):
return self.USRP_Gain
def set_USRP_Gain(self, USRP_Gain):
self.USRP_Gain = USRP_Gain
self.uhd_usrp_source_0.set_gain(self.USRP_Gain, 0)
def get_USRP_BW(self):
return self.USRP_BW
def set_USRP_BW(self, USRP_BW):
self.USRP_BW = USRP_BW
self.uhd_usrp_source_0.set_bandwidth(self.USRP_BW, 0)
if __name__ == '__main__':
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
(options, args) = parser.parse_args()
if gr.enable_realtime_scheduling() != gr.RT_OK:
print "Error: failed to enable realtime scheduling."
tb = top_block()
tb.start()
tb.wait()
In Zeile 16, 20, 27 und 91 habe ich Änderungen angebracht.
Code: Alles auswählen
#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Top Block
# Generated: Fri May 2 11:59:11 2014
##################################################
from gnuradio import blocks
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 optparse import OptionParser
import time
import sys
class top_block(gr.top_block):
def __init__(self, f_center):
gr.top_block.__init__(self, "Top Block")
##################################################
# Variables
##################################################
self.f_samp = f_samp = 10e6
self.f_center = f_center
self.USRP_Gain = USRP_Gain = 30
self.USRP_BW = USRP_BW = 0
##################################################
# Blocks
##################################################
self.uhd_usrp_source_0 = uhd.usrp_source(
device_addr="addr=192.168.10.2",
stream_args=uhd.stream_args(
cpu_format="sc16",
channels=range(1),
),
)
self.uhd_usrp_source_0.set_samp_rate(f_samp)
self.uhd_usrp_source_0.set_center_freq(f_center, 0)
self.uhd_usrp_source_0.set_gain(USRP_Gain, 0)
self.blocks_head_0 = blocks.head(gr.sizeof_short*2, int(f_samp*10e-3))
self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_short*2, "/home/gnss/GNSS_Work/Architekturen/L1.dat", False)
self.blocks_file_sink_0.set_unbuffered(False)
##################################################
# Connections
##################################################
self.connect((self.blocks_head_0, 0), (self.blocks_file_sink_0, 0))
self.connect((self.uhd_usrp_source_0, 0), (self.blocks_head_0, 0))
# QT sink close method reimplementation
def get_f_samp(self):
return self.f_samp
def set_f_samp(self, f_samp):
self.f_samp = f_samp
self.uhd_usrp_source_0.set_samp_rate(self.f_samp)
def get_f_center(self):
return self.f_center
def set_f_center(self, f_center):
self.f_center = f_center
self.uhd_usrp_source_0.set_center_freq(self.f_center, 0)
def get_USRP_Gain(self):
return self.USRP_Gain
def set_USRP_Gain(self, USRP_Gain):
self.USRP_Gain = USRP_Gain
self.uhd_usrp_source_0.set_gain(self.USRP_Gain, 0)
def get_USRP_BW(self):
return self.USRP_BW
def set_USRP_BW(self, USRP_BW):
self.USRP_BW = USRP_BW
self.uhd_usrp_source_0.set_bandwidth(self.USRP_BW, 0)
if __name__ == '__main__':
parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
(options, args) = parser.parse_args()
if gr.enable_realtime_scheduling() != gr.RT_OK:
print "Error: failed to enable realtime scheduling."
tb = top_block()
tb.f_center = sys.argv[1]
tb.start()
tb.wait()Infos zum System:
Debian 7
Python 2.7
Wo mache ich den Fehler?
