Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- """ Block to demodulate FSK via coherent PLL frequency estimation
- Not exactly hardcore but it works
- """
- from gnuradio import gr, gru, blks2
- from gnuradio import eng_notation
- from gnuradio.gr import firdes
- from math import pi
- from gnuradio import digital
- def euclid(numA, numB):
- while (numB != 0):
- numRem = (numA % numB)
- numA = numB
- numB = numRem
- return numA
- class fsk_demod(gr.hier_block2):
- __module__ = __name__
- def __init__(self, options):
- gr.hier_block2.__init__(self, 'fsk_demod', gr.io_signature(1, 1, gr.sizeof_gr_complex), gr.io_signature(1, 1, gr.sizeof_char))
- self._syms_per_sec = options.syms_per_sec
- self._samples_per_second = options.samples_per_second
- self._gain_mu = options.gain_mu
- self._mu = options.mu
- self._omega_relative_limit = options.omega_relative_limit
- self._freqoffset = options.offset
- self._filtdecim = 1
- self._clockrec_oversample = 10
- self._downsampletaps = gr.firdes.low_pass(1, self._samples_per_second, 10000, 1000, firdes.WIN_HANN)
- self._decim = int((self._samples_per_second / (self._syms_per_sec * self._clockrec_oversample)))
- self._demod_sample_rate = int((self._samples_per_second / self._decim))
- print ('Demodulator decimation: %i' % (self._decim))
- print ('Demodulator output sample rate: %i' % self._demod_sample_rate)
- self._downsample = gr.freq_xlating_fir_filter_ccc(self._decim, self._downsampletaps, self._freqoffset, self._samples_per_second)
- self._quad_demod = gr.quadrature_demod_cf(5.7000000000000002)
- self._lpfcoeffs = gr.firdes.low_pass(1000, self._demod_sample_rate, self._syms_per_sec, 100, firdes.WIN_HANN)
- self._lpf = gr.fir_filter_fff(self._filtdecim, self._lpfcoeffs)
- print ('Samples per symbol: %f' % ((self._demod_sample_rate / self._syms_per_sec)))
- self._softbits = digital.clock_recovery_mm_ff(((float(self._samples_per_second) / self._decim) / self._syms_per_sec), ((0.25 * self._gain_mu) * self._gain_mu), self._mu, self._gain_mu, self._omega_relative_limit)
- self._slicer = digital.binary_slicer_fb()
- self.connect(self, self._downsample, self._quad_demod, self._softbits, self._slicer, self)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement