added command line option parsing

git-svn-id: http://op25.osmocom.org/svn/trunk@16 65a5c917-d112-43f1-993d-58c26a4786be
This commit is contained in:
mossmann 2008-04-05 17:14:26 +00:00
parent 9cd3c149b0
commit 747d4a7d88
1 changed files with 28 additions and 26 deletions

View File

@ -1,4 +1,7 @@
#!/usr/bin/env python
from gnuradio import gr, gru, blks
from gnuradio.eng_option import eng_option
from optparse import OptionParser
"""
simple frequency demodulator for captured P25 C4FM signals
@ -7,47 +10,46 @@ input: complex sample captured by USRP
output: real baseband sample at 48 ksps
"""
from gnuradio import gr, gru, blks
import math
class my_graph(gr.flow_graph):
def __init__(self):
class app_flow_graph(gr.flow_graph):
def __init__(self, options):
gr.flow_graph.__init__(self)
### set these manually for target sample
input_sample_rate = 500e3 # trunk control channel sample
# frequency is relative to input sample
#frequency = 87.5e3 # lower band of trunk control channel sample
frequency = 100e3 # higher band of trunk control channel sample
#input_sample_rate = 256e3 # *-256KSS.dat samples
#frequency = 0 # baseband-complex-256KSS.dat
#frequency = 30e3 # sample-complex-256KSS.dat
bandwidth = 12.5e3
###
src = gr.file_source(gr.sizeof_gr_complex, "infile")
symbol_rate = 4800
output_samples_per_symbol = 10
output_sample_rate = output_samples_per_symbol * symbol_rate
lcm = gru.lcm(input_sample_rate, output_sample_rate)
intrp = int(lcm // input_sample_rate)
output_sample_rate = options.samples_per_symbol * symbol_rate
lcm = gru.lcm(options.sample_rate, output_sample_rate)
intrp = int(lcm // options.sample_rate)
decim = int(lcm // output_sample_rate)
src = gr.file_source(gr.sizeof_gr_complex, options.input_file)
ddc_coeffs = \
gr.firdes.low_pass (1.0,
input_sample_rate,
options.sample_rate,
bandwidth/2,
bandwidth/2,
gr.firdes.WIN_HANN)
ddc = gr.freq_xlating_fir_filter_ccf (1,ddc_coeffs,-frequency,input_sample_rate)
ddc = gr.freq_xlating_fir_filter_ccf (1,ddc_coeffs,-options.frequency,options.sample_rate)
resampler = blks.rational_resampler_ccc(self, intrp, decim)
qdemod = gr.quadrature_demod_cf(1.0)
f2c = gr.float_to_complex()
sink = gr.file_sink(gr.sizeof_float, "demod")
sink = gr.file_sink(gr.sizeof_float, options.output_file)
self.connect(src,ddc,resampler,qdemod,sink)
if __name__ == '__main__':
def main():
parser = OptionParser(option_class=eng_option)
parser.add_option("-i", "--input-file", type="string", default="in.dat", help="specify the input file")
parser.add_option("-o", "--output-file", type="string", default="demod.dat", help="specify the output file")
parser.add_option("-r", "--sample-rate", type="eng_float", default=500e3, help="sample rate of input file", metavar="Hz")
parser.add_option("-f", "--frequency", type="eng_float", default=0, help="frequency of signal to demodulate", metavar="Hz")
parser.add_option("-s", "--samples-per-symbol", type="int", default=10, help="samples per symbol in output file")
(options, args) = parser.parse_args()
fg = app_flow_graph(options)
try:
my_graph().run()
fg.run()
except KeyboardInterrupt:
pass
if __name__ == "__main__":
main()