#!/usr/bin/env python2 # -*- coding: utf-8 -*- ################################################## # GNU Radio Python Flow Graph # Title: Transceptor FM # Author: DMR_Marcianito100% # Generated: Sat Apr 22 12:03:11 2017 ################################################## from gnuradio import analog from gnuradio import audio from gnuradio import blocks from gnuradio import eng_notation from gnuradio import filter 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 TRX__VOZ_2017_r02(gr.top_block): def __init__(self, audio2=15, faudio1=700, faudio2=1300, rxfreq=467.7125e6, rxgain=0.5, sel=0, txfreq=467.7125e6, txgain=0.5, umbral=-90, audio1=1): gr.top_block.__init__(self, "Transceptor FM") ################################################## # Parameters ################################################## self.audio2 = audio2 self.faudio1 = faudio1 self.faudio2 = faudio2 self.rxfreq = rxfreq self.rxgain = rxgain self.sel = sel self.txfreq = txfreq self.txgain = txgain self.umbral = umbral self.audio1 = audio1 ################################################## # Variables ################################################## self.audio_rate = audio_rate = 32000 ################################################## # Blocks ################################################## self.usrp_simple_sink_x_0 = uhd.usrp_sink( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.usrp_simple_sink_x_0.set_samp_rate(audio_rate*10) self.usrp_simple_sink_x_0.set_center_freq(txfreq, 0) self.usrp_simple_sink_x_0.set_normalized_gain(txgain, 0) self.usrp_simple_sink_x_0.set_antenna("TX/RX", 0) self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_source_0.set_samp_rate(audio_rate*10) self.uhd_usrp_source_0.set_center_freq(rxfreq, 0) self.uhd_usrp_source_0.set_normalized_gain(rxgain, 0) self.uhd_usrp_source_0.set_antenna("RX2", 0) self.low_filter = filter.fir_filter_fff(1, firdes.low_pass( 1, audio_rate, 4e3, 1e3, firdes.WIN_HAMMING, 6.76)) self.blocks_wavfile_source_0 = blocks.wavfile_source("/home/root/Queen_-_Killer_Queen.wav", True) self.blocks_multiply_const_vxx_1_0 = blocks.multiply_const_vff((0.2, )) self.blocks_multiply_const_vxx_1 = blocks.multiply_const_vff((0.8, )) self.blocks_multiply_const_vxx_0_0_0 = blocks.multiply_const_vff((audio1, )) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((audio2*8, )) self.blocks_add_xx_0 = blocks.add_vff(1) self.blks_nbfm_tx_0 = analog.nbfm_tx( audio_rate=audio_rate, quad_rate=audio_rate*10, tau=75e-6, max_dev=2500, ) self.audio_source_0 = audio.source(32000, "", True) self.audio_sink_0 = audio.sink(32000, "", True) self.analog_simple_squelch_cc_0 = analog.simple_squelch_cc(umbral, 1) self.analog_nbfm_rx_0 = analog.nbfm_rx( audio_rate=audio_rate, quad_rate=audio_rate*10, tau=75e-6, max_dev=2500, ) self.analog_fm_preemph_0 = analog.fm_preemph(fs=32000, tau=75e-6) self.analog_fm_deemph_0 = analog.fm_deemph(fs=audio_rate, tau=75e-6) ################################################## # Connections ################################################## self.connect((self.analog_fm_deemph_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.analog_fm_preemph_0, 0), (self.blocks_multiply_const_vxx_0_0_0, 0)) self.connect((self.analog_nbfm_rx_0, 0), (self.analog_fm_deemph_0, 0)) self.connect((self.analog_simple_squelch_cc_0, 0), (self.analog_nbfm_rx_0, 0)) self.connect((self.audio_source_0, 0), (self.blocks_multiply_const_vxx_1, 0)) self.connect((self.blks_nbfm_tx_0, 0), (self.usrp_simple_sink_x_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.analog_fm_preemph_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.audio_sink_0, 0)) self.connect((self.blocks_multiply_const_vxx_0_0_0, 0), (self.low_filter, 0)) self.connect((self.blocks_multiply_const_vxx_1, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_multiply_const_vxx_1_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.blocks_wavfile_source_0, 0), (self.blocks_multiply_const_vxx_1_0, 0)) self.connect((self.low_filter, 0), (self.blks_nbfm_tx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.analog_simple_squelch_cc_0, 0)) def get_audio2(self): return self.audio2 def set_audio2(self, audio2): self.audio2 = audio2 self.blocks_multiply_const_vxx_0.set_k((self.audio2*8, )) def get_faudio1(self): return self.faudio1 def set_faudio1(self, faudio1): self.faudio1 = faudio1 def get_faudio2(self): return self.faudio2 def set_faudio2(self, faudio2): self.faudio2 = faudio2 def get_rxfreq(self): return self.rxfreq def set_rxfreq(self, rxfreq): self.rxfreq = rxfreq self.uhd_usrp_source_0.set_center_freq(self.rxfreq, 0) def get_rxgain(self): return self.rxgain def set_rxgain(self, rxgain): self.rxgain = rxgain self.uhd_usrp_source_0.set_normalized_gain(self.rxgain, 0) def get_sel(self): return self.sel def set_sel(self, sel): self.sel = sel def get_txfreq(self): return self.txfreq def set_txfreq(self, txfreq): self.txfreq = txfreq self.usrp_simple_sink_x_0.set_center_freq(self.txfreq, 0) def get_txgain(self): return self.txgain def set_txgain(self, txgain): self.txgain = txgain self.usrp_simple_sink_x_0.set_normalized_gain(self.txgain, 0) def get_umbral(self): return self.umbral def set_umbral(self, umbral): self.umbral = umbral self.analog_simple_squelch_cc_0.set_threshold(self.umbral) def get_audio1(self): return self.audio1 def set_audio1(self, audio1): self.audio1 = audio1 self.blocks_multiply_const_vxx_0_0_0.set_k((self.audio1, )) def get_audio_rate(self): return self.audio_rate def set_audio_rate(self, audio_rate): self.audio_rate = audio_rate self.low_filter.set_taps(firdes.low_pass(1, self.audio_rate, 4e3, 1e3, firdes.WIN_HAMMING, 6.76)) self.uhd_usrp_source_0.set_samp_rate(self.audio_rate*10) self.usrp_simple_sink_x_0.set_samp_rate(self.audio_rate*10) def argument_parser(): parser = OptionParser(option_class=eng_option, usage="%prog: [options]") parser.add_option( "-v", "--audio2", dest="audio2", type="eng_float", default=eng_notation.num_to_str(15), help="Set Ganancia parlante [default=%default]") parser.add_option( "-a", "--faudio1", dest="faudio1", type="eng_float", default=eng_notation.num_to_str(700), help="Set Frecuencia de audio 1 [default=%default]") parser.add_option( "-b", "--faudio2", dest="faudio2", type="eng_float", default=eng_notation.num_to_str(1300), help="Set Frecuencia de audio 2 [default=%default]") parser.add_option( "-r", "--rxfreq", dest="rxfreq", type="eng_float", default=eng_notation.num_to_str(467.7125e6), help="Set Frec. de Recepcion [default=%default]") parser.add_option( "-G", "--rxgain", dest="rxgain", type="eng_float", default=eng_notation.num_to_str(0.5), help="Set Ganancia de RF Recepcion [default=%default]") parser.add_option( "-s", "--sel", dest="sel", type="intx", default=0, help="Set Selector [default=%default]") parser.add_option( "-t", "--txfreq", dest="txfreq", type="eng_float", default=eng_notation.num_to_str(467.7125e6), help="Set Frec. de Transmision [default=%default]") parser.add_option( "-g", "--txgain", dest="txgain", type="eng_float", default=eng_notation.num_to_str(0.5), help="Set Ganancia de RF Transmision [default=%default]") parser.add_option( "-u", "--umbral", dest="umbral", type="eng_float", default=eng_notation.num_to_str(-90), help="Set Umbral [default=%default]") parser.add_option( "-m", "--audio1", dest="audio1", type="eng_float", default=eng_notation.num_to_str(1), help="Set Ganancia microfono [default=%default]") return parser def main(top_block_cls=TRX__VOZ_2017_r02, options=None): if options is None: options, _ = argument_parser().parse_args() tb = top_block_cls(audio2=options.audio2, faudio1=options.faudio1, faudio2=options.faudio2, rxfreq=options.rxfreq, rxgain=options.rxgain, sel=options.sel, txfreq=options.txfreq, txgain=options.txgain, umbral=options.umbral, audio1=options.audio1) tb.start() try: raw_input('Press Enter to quit: ') except EOFError: pass tb.stop() tb.wait() if __name__ == '__main__': main()