#!/usr/bin/env python2 ################################################## # GNU Radio Python Flow Graph # Title: Top Block # Generated: Thu Jul 23 11:29:50 2015 ################################################## from gnuradio import blocks from gnuradio import eng_notation from gnuradio import fft from gnuradio import gr from gnuradio import uhd from gnuradio.eng_option import eng_option from gnuradio.fft import window from gnuradio.filter import firdes from optparse import OptionParser import specest import time import pmt from DAQ import rxcntl class top_block(gr.top_block): def __init__(self, fname1='raw1.dat', fname2='raw2.dat'): gr.top_block.__init__(self, "Top Block") ################################################## # Extra Variables ################################################## self.fname1 = fname1 self.fname2 = fname2 self.nChannels = nChannels = 1 print "Entering top_block: fname1={0:s} fname2={1:s}".format(self.fname1,self.fname2) ################################################## # Variables ################################################## self.freq1 = freq1 = 1420000000 self.freq2 = freq2 = 1420000000 self.samp_rate = samp_rate = 100000000/4. self.gain = gain = 60 self.N_average = N_average = 512 self.FFT_size = FFT_size = 32 self.BW = BW = 20000000 self.BW = BW = 25000000 ################################################## # Blocks ################################################## self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("ser=F61177", "")), uhd.stream_args( cpu_format="fc32", channels=range(self.nChannels), ), ) self.uhd_usrp_source_0.set_subdev_spec("A:A A:B", 0) self.uhd_usrp_source_0.set_samp_rate(samp_rate) self.uhd_usrp_source_0.set_center_freq(self.freq1, 0) self.uhd_usrp_source_0.set_gain(gain, 0) self.uhd_usrp_source_0.set_bandwidth(BW, 0) #sensorNames = self.uhd_usrp_source_0.get_mboard_sensor_names(0) #print "Sensor names=" + str(sensorNames) GPStime = self.uhd_usrp_source_0.get_mboard_sensor("gps_time") GPS_locked = self.uhd_usrp_source_0.get_mboard_sensor("gps_locked") print "GPS Info: {0:s}; {1:s}".format(str(GPS_locked),str(GPStime)) self.uhd_usrp_source_0.set_time_now(uhd.time_spec(time.time()), uhd.ALL_MBOARDS) if self.nChannels == 2 : self.uhd_usrp_source_0.set_center_freq(self.freq2, 1) self.uhd_usrp_source_0.set_gain(gain, 1) self.uhd_usrp_source_0.set_bandwidth(BW, 1) self.specest_moving_average_vff_0 = specest.moving_average_vff(N_average, FFT_size, 1, 4096) self.fft_vxx_0 = fft.fft_vcc(FFT_size, True, (window.blackmanharris(FFT_size)), True, 1) self.blocks_vector_to_stream_0 = blocks.vector_to_stream(gr.sizeof_float*1, FFT_size) self.blocks_stream_to_vector_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, FFT_size) self.blocks_keep_one_in_n_0_0 = blocks.keep_one_in_n(gr.sizeof_float*FFT_size, N_average) self.blocks_complex_to_mag_squared_0 = blocks.complex_to_mag_squared(FFT_size) self.blocks_file_meta_sink_0 = blocks.file_meta_sink(gr.sizeof_float*1, self.fname1, self.samp_rate, \ 1, blocks.GR_FILE_FLOAT, False, 1000000, self._extras(), False) self.blocks_file_meta_sink_0.set_unbuffered(False) if self.nChannels == 2 : self.specest_moving_average_vff_1 = specest.moving_average_vff(N_average, FFT_size, 1, 4096) self.fft_vxx_0_0 = fft.fft_vcc(FFT_size, True, (window.blackmanharris(FFT_size)), True, 1) self.blocks_vector_to_stream_0_0 = blocks.vector_to_stream(gr.sizeof_float*1, FFT_size) self.blocks_stream_to_vector_0_0 = blocks.stream_to_vector(gr.sizeof_gr_complex*1, FFT_size) self.blocks_keep_one_in_n_0_0_0 = blocks.keep_one_in_n(gr.sizeof_float*FFT_size, N_average) self.blocks_complex_to_mag_squared_0_0 = blocks.complex_to_mag_squared(FFT_size) self.blocks_file_meta_sink_0_0 = blocks.file_meta_sink(gr.sizeof_float*1, self.fname2, self.samp_rate, \ 1, blocks.GR_FILE_FLOAT, False, 1000000, self._extras(), False) self.blocks_file_meta_sink_0_0.set_unbuffered(False) ################################################## # Connections ################################################## self.connect((self.uhd_usrp_source_0, 0), (self.blocks_stream_to_vector_0, 0)) self.connect((self.blocks_stream_to_vector_0, 0), (self.fft_vxx_0, 0)) self.connect((self.fft_vxx_0, 0), (self.blocks_complex_to_mag_squared_0, 0)) self.connect((self.blocks_complex_to_mag_squared_0, 0), (self.specest_moving_average_vff_0, 0)) self.connect((self.specest_moving_average_vff_0, 0), (self.blocks_keep_one_in_n_0_0, 0)) self.connect((self.blocks_keep_one_in_n_0_0, 0), (self.blocks_vector_to_stream_0, 0)) self.connect((self.blocks_vector_to_stream_0, 0), (self.blocks_file_meta_sink_0, 0)) if nChannels == 2 : self.connect((self.uhd_usrp_source_0, 1), (self.blocks_stream_to_vector_0_0, 0)) self.connect((self.blocks_stream_to_vector_0_0, 0), (self.fft_vxx_0_0, 0)) self.connect((self.fft_vxx_0_0, 0), (self.blocks_complex_to_mag_squared_0_0, 0)) self.connect((self.blocks_complex_to_mag_squared_0_0, 0), (self.specest_moving_average_vff_1, 0)) self.connect((self.specest_moving_average_vff_1, 0), (self.blocks_keep_one_in_n_0_0_0, 0)) self.connect((self.blocks_keep_one_in_n_0_0_0, 0), (self.blocks_vector_to_stream_0_0, 0)) self.connect((self.blocks_vector_to_stream_0_0, 0), (self.blocks_file_meta_sink_0_0, 0)) def get_freq1(self): return self.freq1 def set_freq1(self, freq1): self.freq1 = freq1 self.uhd_usrp_source_0.set_center_freq(freq1, 0) def get_freq2(self): return self.freq2 def set_freq2(self, freq2): self.freq2 = freq2 self.uhd_usrp_source_0.set_center_freq(freq2, 1) def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.uhd_usrp_source_0.set_samp_rate(self.samp_rate) def get_gain(self): return self.gain def set_gain(self, gain): self.gain = gain self.uhd_usrp_source_0.set_gain(self.gain, 0) self.uhd_usrp_source_0.set_gain(self.gain, 1) def get_N_average(self): return self.N_average def set_N_average(self, N_average): self.N_average = N_average self.blocks_keep_one_in_n_0_0.set_n(self.N_average) self.blocks_keep_one_in_n_0_0_0.set_n(self.N_average) def get_FFT_size(self): return self.FFT_size def set_FFT_size(self, FFT_size): self.FFT_size = FFT_size def get_BW(self): return self.BW def set_BW(self, BW): self.BW = BW self.uhd_usrp_source_0.set_bandwidth(self.BW, 0) self.uhd_usrp_source_0.set_bandwidth(self.BW, 1) def get_filename(self): return self.filename def set_filename(self, filename): self.filename = filename def _extras(self): """ Return a PMT dictionary with the following extra header information: FFT_size, N_average, gain, BW, rx_info (optional) """ extras = pmt.make_dict() key, val = pmt.intern("FFT_size"), pmt.from_long(self.FFT_size) extras = pmt.dict_add(extras, key, val) key, val = pmt.intern("freq1"), pmt.from_long(self.freq1) extras = pmt.dict_add(extras, key, val) key, val = pmt.intern("freq2"), pmt.from_long(self.freq2) extras = pmt.dict_add(extras, key, val) key, val = pmt.intern("N_average"), pmt.from_long(self.N_average) extras = pmt.dict_add(extras, key, val) key, val = pmt.intern("gain"), pmt.from_double(self.gain) extras = pmt.dict_add(extras, key, val) key, val = pmt.intern("BW"), pmt.from_double(self.BW) extras = pmt.dict_add(extras, key, val) key, val = pmt.intern("rx_info"), pmt.intern(rxcntl.get()) extras = pmt.dict_add(extras, key, val) return pmt.serialize_str(extras) if __name__ == '__main__': parser = OptionParser(option_class=eng_option, usage="%prog: [options]") (options, args) = parser.parse_args() tb = top_block() tb.start() try: raw_input('Press Enter to quit: ') except EOFError: pass tb.stop() tb.wait()