Example #1
0
    def __init__(
        self,
        parent,
        baseband_freq=0,
        ref_scale=2.0,
        y_per_div=10,
        y_divs=8,
        ref_level=50,
        sample_rate=1,
        fft_size=512,
        fft_rate=fft_window.DEFAULT_FRAME_RATE,
        average=False,
        avg_alpha=None,
        title="",
        size=fft_window.DEFAULT_WIN_SIZE,
        peak_hold=False,
        win=None,
        use_persistence=False,
        persist_alpha=None,
        **kwargs  # do not end with a comma
    ):
        # ensure avg alpha
        if avg_alpha is None:
            avg_alpha = 2.0 / fft_rate
        # ensure analog alpha
        if persist_alpha is None:
            actual_fft_rate = float(sample_rate / fft_size) / float(
                max(1, int(float((sample_rate / fft_size) / fft_rate)))
            )
            # print "requested_fft_rate ",fft_rate
            # print "actual_fft_rate    ",actual_fft_rate
            analog_cutoff_freq = 0.5  # Hertz
            # calculate alpha from wanted cutoff freq
            persist_alpha = 1.0 - math.exp(-2.0 * math.pi * analog_cutoff_freq / actual_fft_rate)

        # init
        gr.hier_block2.__init__(self, "fft_sink", gr.io_signature(1, 1, self._item_size), gr.io_signature(0, 0, 0))
        # blocks
        fft = self._fft_chain(
            sample_rate=sample_rate,
            fft_size=fft_size,
            frame_rate=fft_rate,
            ref_scale=ref_scale,
            avg_alpha=avg_alpha,
            average=average,
            win=win,
        )
        msgq = gr.msg_queue(2)
        sink = gr.message_sink(gr.sizeof_float * fft_size, msgq, True)

        # controller
        self.controller = pubsub()
        self.controller.subscribe(AVERAGE_KEY, fft.set_average)
        self.controller.publish(AVERAGE_KEY, fft.average)
        self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha)
        self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha)
        self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate)
        self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate)
        # start input watcher
        common.input_watcher(msgq, self.controller, MSG_KEY)
        # create window
        self.win = fft_window.fft_window(
            parent=parent,
            controller=self.controller,
            size=size,
            title=title,
            real=self._real,
            fft_size=fft_size,
            baseband_freq=baseband_freq,
            sample_rate_key=SAMPLE_RATE_KEY,
            y_per_div=y_per_div,
            y_divs=y_divs,
            ref_level=ref_level,
            average_key=AVERAGE_KEY,
            avg_alpha_key=AVG_ALPHA_KEY,
            peak_hold=peak_hold,
            msg_key=MSG_KEY,
            use_persistence=use_persistence,
            persist_alpha=persist_alpha,
        )
        common.register_access_methods(self, self.win)
        setattr(self.win, "set_baseband_freq", getattr(self, "set_baseband_freq"))  # BACKWARDS
        setattr(self.win, "set_peak_hold", getattr(self, "set_peak_hold"))  # BACKWARDS
        # connect
        self.wxgui_connect(self, fft, sink)
Example #2
0
	def __init__(
		self,
		parent,
		baseband_freq=0,
		ref_scale=2.0,
		y_per_div=10,
		y_divs=8,
		ref_level=50,
		sample_rate=1,
		fft_size=512,
		fft_rate=fft_window.DEFAULT_FRAME_RATE,
		average=False,
		avg_alpha=None,
		title='',
		size=fft_window.DEFAULT_WIN_SIZE,
		peak_hold=False,
        analog_sig_source = None,
        blocks_throttle = None,
		win=None,
                use_persistence=False,
                persist_alpha=None,
		functionCallbackWhenHandleMessageSink = None,
		**kwargs
		 #do not end with a comma
	):

        
		if functionCallbackWhenHandleMessageSink is None:
			print 'function callback is null'	
			functionCallbackWhenHandleMessageSink = self.defaultHandleMessageCallback
		#ensure avg alpha
		if avg_alpha is None: avg_alpha = 2.0/fft_rate
                #ensure analog alpha
                if persist_alpha is None:
                  actual_fft_rate=float(sample_rate/fft_size)/float(max(1,int(float((sample_rate/fft_size)/fft_rate))))
                  #print "requested_fft_rate ",fft_rate
                  #print "actual_fft_rate    ",actual_fft_rate
                  analog_cutoff_freq=0.5 # Hertz
                  #calculate alpha from wanted cutoff freq
                  persist_alpha = 1.0 - math.exp(-2.0*math.pi*analog_cutoff_freq/actual_fft_rate)

		#init
		gr.hier_block2.__init__(
			self,
			"fft_sink",
			gr.io_signature(1, 1, self._item_size),
			gr.io_signature(0, 0, 0),
		)
		#blocks
		fft = self._fft_chain(
			sample_rate=sample_rate,
			fft_size=fft_size,
			frame_rate=fft_rate,
			ref_scale=ref_scale,
			avg_alpha=avg_alpha,
			average=average,
			win=win,
		)
		msgq = gr.msg_queue(2)
		sink = blocks.message_sink(gr.sizeof_float*fft_size, msgq, True)
                analog_sig_source_fromconstructor = analog_sig_source
                blocks_throttle_fromconstructor = blocks_throttle
            
		#controller
		self.controller = pubsub()
		self.controller.subscribe(AVERAGE_KEY, fft.set_average)
		self.controller.publish(AVERAGE_KEY, fft.average)
		self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha)
		self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha)
		self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate)
		self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate)
		#start input watcher
		common.input_watcher(msgq, self.controller, MSG_KEY)
		#create window
		self.win = fft_window.fft_window(
			parent=parent,
			controller=self.controller,
			size=size,
			title=title,
			real=self._real,
			fft_size=fft_size,
			baseband_freq=baseband_freq,
			sample_rate_key=SAMPLE_RATE_KEY,
			y_per_div=y_per_div,
			y_divs=y_divs,
			ref_level=ref_level,
			average_key=AVERAGE_KEY,
			avg_alpha_key=AVG_ALPHA_KEY,
			peak_hold=peak_hold,
			msg_key=MSG_KEY,
                        use_persistence=use_persistence,
                        persist_alpha=persist_alpha,
			functionCallbackWhenHandleMessage = functionCallbackWhenHandleMessageSink,
                        analog_sig_source = analog_sig_source_fromconstructor,
			blocks_throttle = blocks_throttle_fromconstructor	
		)
		common.register_access_methods(self, self.win)
		setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS
		setattr(self.win, 'set_peak_hold', getattr(self, 'set_peak_hold')) #BACKWARDS
		#connect
		self.wxgui_connect(self, fft, sink)
	def __init__(
		self,
		parent,
		baseband_freq=0,
		ref_scale=2.0,
		y_per_div=10,
		y_divs=8,
		ref_level=50,
		sample_rate=1,
		fft_size=512,
		fft_rate=fft_window.DEFAULT_FRAME_RATE,
		average=False,
		avg_alpha=None,
		title='',
		size=fft_window.DEFAULT_WIN_SIZE,
		peak_hold=False,
		win=None,
		**kwargs #do not end with a comma
	):
		#ensure avg alpha
		if avg_alpha is None: avg_alpha = 2.0/fft_rate
		#init
		gr.hier_block2.__init__(
			self,
			"fft_sink",
			gr.io_signature(1, 1, self._item_size),
			gr.io_signature(0, 0, 0),
		)
		#blocks
		fft = self._fft_chain(
			sample_rate=sample_rate,
			fft_size=fft_size,
			frame_rate=fft_rate,
			ref_scale=ref_scale,
			avg_alpha=avg_alpha,
			average=average,
			win=win,
		)
		msgq = gr.msg_queue(2)
		sink = gr.message_sink(gr.sizeof_float*fft_size, msgq, True)
		#controller
		self.controller = pubsub()
		self.controller.subscribe(AVERAGE_KEY, fft.set_average)
		self.controller.publish(AVERAGE_KEY, fft.average)
		self.controller.subscribe(AVG_ALPHA_KEY, fft.set_avg_alpha)
		self.controller.publish(AVG_ALPHA_KEY, fft.avg_alpha)
		self.controller.subscribe(SAMPLE_RATE_KEY, fft.set_sample_rate)
		self.controller.publish(SAMPLE_RATE_KEY, fft.sample_rate)
		#start input watcher
		common.input_watcher(msgq, self.controller, MSG_KEY)
		#create window
		self.win = fft_window.fft_window(
			parent=parent,
			controller=self.controller,
			size=size,
			title=title,
			real=self._real,
			fft_size=fft_size,
			baseband_freq=baseband_freq,
			sample_rate_key=SAMPLE_RATE_KEY,
			y_per_div=y_per_div,
			y_divs=y_divs,
			ref_level=ref_level,
			average_key=AVERAGE_KEY,
			avg_alpha_key=AVG_ALPHA_KEY,
			peak_hold=peak_hold,
			msg_key=MSG_KEY,
		)
		common.register_access_methods(self, self.win)
		setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS
		setattr(self.win, 'set_peak_hold', getattr(self, 'set_peak_hold')) #BACKWARDS
		#connect
		self.wxgui_connect(self, fft, sink)
	def __init__(
		self,
		parent,
		baseband_freq=0,
		ref_scale=2.0,
		y_per_div=10,
		y_divs=8,
		ref_level=50,
		sample_rate=1,
		fft_size=512,
		fft_rate=fft_window.DEFAULT_FRAME_RATE,
		average=False,
		avg_alpha=None,
		title='',
		size=fft_window.DEFAULT_WIN_SIZE,
		peak_hold=False,
		win=None,
                use_persistence=False,
                persist_alpha=None,
		**kwargs #do not end with a comma
	):
		#ensure avg alpha
		if avg_alpha is None: avg_alpha = 2.0/fft_rate
                #ensure analog alpha
                if persist_alpha is None:
                  actual_fft_rate=float(sample_rate/fft_size)/float(max(1,int(float((sample_rate/fft_size)/fft_rate))))
                  #print "requested_fft_rate ",fft_rate
                  #print "actual_fft_rate    ",actual_fft_rate
                  analog_cutoff_freq=0.5 # Hertz
                  #calculate alpha from wanted cutoff freq
                  persist_alpha = 1.0 - math.exp(-2.0*math.pi*analog_cutoff_freq/actual_fft_rate)

		#init
		gr.hier_block2.__init__(
			self,
			"fft_sink",
			gr.io_signature(1, 1, self._item_size),
			gr.io_signature(0, 0, 0),
		)


       	        self.integrating = integrating = 0


		#blocks
		self.fft = self._fft_chain(
			sample_rate=sample_rate,
			fft_size=fft_size,
			frame_rate=fft_rate,
			ref_scale=ref_scale,
			avg_alpha=avg_alpha,
			average=average,
			win=win,
		)
		msgq = gr.msg_queue(2)
		sink = blocks.message_sink(gr.sizeof_float*fft_size, msgq, True)
		# For graphical display only
		self._log=self.fft.get_log()

		# For saving data (integration)
		int_filename="integration_data2.txt"

		self.vect2str= blocks.vector_to_stream(gr.sizeof_float*1, fft_size)
       	        self.integrate = blocks.integrate_ff(fft_size, 1)
        	self.file_sink_int= blocks.file_sink(gr.sizeof_float*1, int_filename, False)
		#controls data streaming
		#self.integrating=1 #if the valve is open (1) or closed (0). Open valve stops data
		#self._valve = grc_blks2.valve(item_size=gr.sizeof_float*1, open=bool(self.integrating))

      	     #   self.selec = grc_blks2.selector(
        	#item_size=gr.sizeof_float*1,
      #  	num_inputs=2,
       # 	num_outputs=2,
        #	input_index=integrating,
        #	output_index=integrating,
        #)
	
		#just for not leave ports disconnected
       	        #self.null_source = blocks.null_source(gr.sizeof_float*1)
       	        #self.null_sink = blocks.null_sink(gr.sizeof_float*1)	

		#controller
		self.controller = pubsub()
		self.controller.subscribe(AVERAGE_KEY, self.fft.set_average)
		self.controller.publish(AVERAGE_KEY, self.fft.average)
		self.controller.subscribe(AVG_ALPHA_KEY, self.fft.set_avg_alpha)
		self.controller.publish(AVG_ALPHA_KEY, self.fft.avg_alpha)
		self.controller.subscribe(SAMPLE_RATE_KEY, self.fft.set_sample_rate)
		self.controller.publish(SAMPLE_RATE_KEY, self.fft.sample_rate)
		#start input watcher
		common.input_watcher(msgq, self.controller, MSG_KEY)
		#create window
		self.win = fft_window.fft_window(
			parent=parent,
			controller=self.controller,
			size=size,
			title=title,
			real=self._real,
			fft_size=fft_size,
			baseband_freq=baseband_freq,
			sample_rate_key=SAMPLE_RATE_KEY,
			y_per_div=y_per_div,
			y_divs=y_divs,
			ref_level=ref_level,
			average_key=AVERAGE_KEY,
			avg_alpha_key=AVG_ALPHA_KEY,
			peak_hold=peak_hold,
			msg_key=MSG_KEY,
                        use_persistence=use_persistence,
                        persist_alpha=persist_alpha,
		)
		common.register_access_methods(self, self.win)
		setattr(self.win, 'set_baseband_freq', getattr(self, 'set_baseband_freq')) #BACKWARDS
		setattr(self.win, 'set_peak_hold', getattr(self, 'set_peak_hold')) #BACKWARDS
		#connect
		self.wxgui_connect(self,self.fft, self._log, sink)# GUI
		#Save data
		#self.connect(self.null_source,(self.selec,0))#selector is in ports 0 by default
		#self.connect((self.selec,0),self.null_sink)
		#self.connect(self.fft, self.vect2str, self.integrate, (self.selec,1)) #port 1 os select is to save data
                #self.connect((self.selec,1), self.file_sink_int)#SAVE DATA
		self.connect(self.fft, self.vect2str, self.integrate, self.file_sink_int)