示例#1
0
class FMAPRSDemodulator(gr.hier_block2, ExportedState):
    implements(IDemodulator)

    def __init__(self,
                 mode,
                 input_rate=0,
                 aprs_information=None,
                 context=None):
        assert input_rate > 0
        gr.hier_block2.__init__(
            self,
            str(mode) + ' (FM + Multimon-NG) demodulator',
            gr.io_signature(1, 1, gr.sizeof_gr_complex * 1),
            gr.io_signature(1, 1, gr.sizeof_float * 1),
        )
        self.mode = mode
        self.input_rate = input_rate

        # FM demod
        # TODO: Retry telling the NFMDemodulator to have its output rate be pipe_rate instead of using a resampler. Something went wrong when trying that before.
        self.fm_demod = NFMDemodulator(
            mode='NFM',
            input_rate=input_rate,
            no_audio_filter=True,  # don't remove CTCSS tone
            tau=None)  # no deemphasis
        assert self.fm_demod.get_output_type().get_kind() == 'MONO'
        fm_audio_rate = self.fm_demod.get_output_type().get_sample_rate()

        # Subprocess
        self.mm_demod = APRSDemodulator(aprs_information=aprs_information)
        mm_audio_rate = self.mm_demod.get_input_type().get_sample_rate()

        # Output
        self.connect(self, self.fm_demod,
                     make_resampler(fm_audio_rate, mm_audio_rate),
                     self.mm_demod, self)

    def state_def(self, callback):
        super(FMAPRSDemodulator, self).state_def(callback)
        # TODO make this possible to be decorator style
        callback(BlockCell(self, 'mm_demod'))

    def can_set_mode(self, mode):
        return False

    def get_half_bandwidth(self):
        return self.fm_demod.get_half_bandwidth()

    def get_output_type(self):
        return self.mm_demod.get_output_type()

    @exported_value()
    def get_band_filter_shape(self):
        return self.fm_demod.get_band_filter_shape()
示例#2
0
class FMAPRSDemodulator(gr.hier_block2, ExportedState):
    implements(IDemodulator)
    
    def __init__(self, mode, input_rate=0, aprs_information=None, context=None):
        assert input_rate > 0
        gr.hier_block2.__init__(
            self, str(mode) + ' (FM + Multimon-NG) demodulator',
            gr.io_signature(1, 1, gr.sizeof_gr_complex * 1),
            gr.io_signature(1, 1, gr.sizeof_float * 1),
        )
        self.mode = mode
        self.input_rate = input_rate
        
        # FM demod
        # TODO: Retry telling the NFMDemodulator to have its output rate be pipe_rate instead of using a resampler. Something went wrong when trying that before.
        self.fm_demod = NFMDemodulator(
            mode='NFM',
            input_rate=input_rate,
            no_audio_filter=True,  # don't remove CTCSS tone
            tau=None)  # no deemphasis
        assert self.fm_demod.get_output_type().get_kind() == 'MONO'
        fm_audio_rate = self.fm_demod.get_output_type().get_sample_rate()
        
        # Subprocess
        self.mm_demod = APRSDemodulator(
            aprs_information=aprs_information)
        mm_audio_rate = self.mm_demod.get_input_type().get_sample_rate()
        
        # Output
        self.connect(
            self,
            self.fm_demod,
            make_resampler(fm_audio_rate, mm_audio_rate),
            self.mm_demod,
            self)
    
    def state_def(self, callback):
        super(FMAPRSDemodulator, self).state_def(callback)
        # TODO make this possible to be decorator style
        callback(BlockCell(self, 'mm_demod'))
    
    def can_set_mode(self, mode):
        return False
    
    def get_half_bandwidth(self):
        return self.fm_demod.get_half_bandwidth()
    
    def get_output_type(self):
        return self.mm_demod.get_output_type()
    
    @exported_value()
    def get_band_filter_shape(self):
        return self.fm_demod.get_band_filter_shape()
示例#3
0
class MultimonNGDemodulator(gr.hier_block2, ExportedState):
	implements(IDemodulator)
	
	def __init__(self, mode, input_rate=0, audio_rate=0, context=None):
		assert input_rate > 0
		gr.hier_block2.__init__(
			self, str(mode) + ' (Multimon-NG) demodulator',
			gr.io_signature(1, 1, gr.sizeof_gr_complex * 1),
			# TODO: Add generic support for demodulators with no audio output
			gr.io_signature(2, 2, gr.sizeof_float * 1),
		)
		self.mode = mode
		self.input_rate = input_rate
		
		# FM demod
		self.fm_demod = NFMDemodulator(
			mode='NFM',
			input_rate=input_rate,
			audio_rate=pipe_rate,
			tau=None)  # no deemphasis
		
		# Subprocess
		self.process = SubprocessSink(
			args=['multimon-ng', '-t', 'raw', '-a', 'AFSK1200', '-A', '-v', '10', '-'],
			#args=['python', '../play16bit.py'],
			itemsize=gr.sizeof_short)
		
		# Output
		converter = blocks.float_to_short(vlen=1, scale=int_scale)
		self.connect(
			self,
			self.fm_demod,
			converter,
			self.process)
		# Dummy sink for useless stereo output of demod
		self.connect((self.fm_demod, 1), blocks.null_sink(gr.sizeof_float))
		# Audio copy output
		resampler = make_resampler(pipe_rate, audio_rate)
		self.connect(converter, blocks.short_to_float(vlen=1, scale=int_scale), resampler)
		#self.connect(self.fm_demod, resampler)
		self.connect(resampler, (self, 0))
		self.connect(resampler, (self, 1))
	
	def can_set_mode(self, mode):
		return False
	
	def get_half_bandwidth(self):
		return self.fm_demod.get_half_bandwidth()
	
	@exported_value()
	def get_band_filter_shape(self):
		return self.fm_demod.get_band_filter_shape()
示例#4
0
class FMAPRSDemodulator(gr.hier_block2, ExportedState):
    implements(IDemodulator)
    
    def __init__(self, mode, input_rate=0, context=None):
        assert input_rate > 0
        assert context is not None
        gr.hier_block2.__init__(
            self, str(mode) + ' (FM + Multimon-NG) demodulator',
            gr.io_signature(1, 1, gr.sizeof_gr_complex * 1),
            gr.io_signature(1, 1, gr.sizeof_float * 1),
        )
        self.mode = mode
        self.input_rate = input_rate
        
        # FM demod
        # TODO: Retry telling the NFMDemodulator to have its output rate be pipe_rate instead of using a resampler. Something went wrong when trying that before. Same thing is done in dsd.py
        self.fm_demod = NFMDemodulator(
            mode='NFM',
            input_rate=input_rate,
            no_audio_filter=True,  # don't remove CTCSS tone
            tau=None)  # no deemphasis
        assert self.fm_demod.get_output_type().get_kind() == 'MONO'
        fm_audio_rate = self.fm_demod.get_output_type().get_sample_rate()
        
        # Subprocess
        self.mm_demod = APRSDemodulator(context=context)
        mm_audio_rate = self.mm_demod.get_input_type().get_sample_rate()
        
        # Output
        self.connect(
            self,
            self.fm_demod,
            make_resampler(fm_audio_rate, mm_audio_rate),
            self.mm_demod,
            self)
    
    def can_set_mode(self, mode):
        return False
    
    def get_half_bandwidth(self):
        return self.fm_demod.get_half_bandwidth()
    
    def get_output_type(self):
        return self.mm_demod.get_output_type()
    
    @exported_block()
    def get_mm_demod(self):
        return self.mm_demod
    
    @exported_value()
    def get_band_filter_shape(self):
        return self.fm_demod.get_band_filter_shape()
示例#5
0
文件: dsd.py 项目: langxj/shinysdr
class DSDDemodulator(gr.hier_block2, ExportedState):
    implements(IDemodulator)
    
    def __init__(self, mode, input_rate=0, context=None):
        assert input_rate > 0
        gr.hier_block2.__init__(
            self, type(self).__name__,
            gr.io_signature(1, 1, gr.sizeof_gr_complex),
            gr.io_signature(1, 1, gr.sizeof_float))
        
        # TODO: Retry telling the NFMDemodulator to have its output rate be pipe_rate instead of using a resampler. Something went wrong when trying that before. Same thing is done in multimon.py
        self.__fm_demod = NFMDemodulator(
            mode='NFM',
            input_rate=input_rate,
            no_audio_filter=True,  # don't remove CTCSS tone
            tau=None)  # no deemphasis
        assert self.__fm_demod.get_output_type().get_kind() == 'MONO'
        fm_audio_rate = self.__fm_demod.get_output_type().get_sample_rate()

        self.__output_type = SignalType(kind='MONO', sample_rate=8000)
        
        self.connect(
            self,
            self.__fm_demod,
            make_resampler(fm_audio_rate, _demod_rate),
            dsd_block_ff(),
            self)
    
    @exported_block()
    def get_fm_demod(self):
        return self.__fm_demod
    
    def can_set_mode(self, mode):
        return False
    
    def get_output_type(self):
        return self.__output_type
    
    def get_half_bandwidth(self):
        return self.__fm_demod.get_half_bandwidth()
    
    @exported_value()
    def get_band_filter_shape(self):
        return self.__fm_demod.get_band_filter_shape()