예제 #1
0
    def demodulate(self, samples):
        if self.demodtype == "envelop":
            return self.avgfilter(numpy.abs(samples), (self.samplerate / self.fc) / 2)
        elif self.demodtype == "avg":
            het_samples = samples * common.local_carrier(self.fc, len(samples), self.samplerate)
            #        return self.avgfilter(het_samples, SAMPLES_PER_CARRIER/2)
            return self.avgfilter(het_samples, (self.samplerate / self.fc) / 2)
        elif self.demodtype == "quad":
            """
            A quadrature demodulator.
            """
            het_samples = samples * common.local_carrier(self.fc, len(samples), self.samplerate, "demodquad")
            #        self.plot_sig_spectrum(numpy.real(het_samples),"demodulated samples before LPF - I-branch")

            # set the LPF cut-off frequency
            omega_lo = 1.5 * math.pi / self.mapper.spb
            omega_hi = self.fc * 2 * math.pi / self.samplerate
            omega_cut = (self.changap * 2 * math.pi / self.samplerate) / 2.0
            print "Rx LPF Cutoff frequency :", omega_cut

            demod_filt_out = self.lpfilter(het_samples, omega_cut, "receive LPF")
            samples_rx_out = numpy.abs(demod_filt_out)
            #        self.plot_sig_spectrum(numpy.real(demod_filt_out),
            #                               "demodulated samples after LPF - I-branch")

            #        p.show()
            return samples_rx_out
        else:
            print "Unsupported demod type"
            sys.exit(1)
예제 #2
0
 def modulate(self, samples):
     '''
     Multiply samples by a local sinusoid carrier of the same length.
     Return the multiplied result.
     '''
     print '\tNumber of samples being sent:', len(samples)
     return samples * local_carrier(self.fc, len(samples), self.samplerate)
예제 #3
0
 def modulate(self, samples):
     '''
     Multiply samples by a local sinusoid carrier of the same length.
     Return the multiplied result.
     '''
     print '\tNumber of samples being sent:', len(samples)
     return samples * local_carrier(self.fc, len(samples), self.samplerate)
예제 #4
0
 def detect_energy(self, samples):
     zerolen = self.preamble.silence * self.mapper.spb
     isamp = samples[:zerolen]
     mod_isamp = isamp * common.local_carrier(self.fc, len(isamp), self.samplerate)
     noise_mean = numpy.mean(mod_isamp)
     noise_std = numpy.std(mod_isamp)
     for offset in xrange(len(samples)):
         if abs(samples[offset] > noise_mean + 5.0 * noise_std):
             break
     return offset
예제 #5
0
 def detect_preamble(self, samples):
     """
     Preamble detection modulating over carrier (ie, not in baseband).
     """
     offset = max(0, self.detect_energy(samples))
     print "Some sort of energy detected around sample", offset
     barker = self.preamble.barker()
     presamples = self.mapper.bits2samples(barker)
     mod_presamples = presamples * common.local_carrier(self.fc, len(presamples), self.samplerate)
     x = 2 * self.preamble.barkerlen() * self.mapper.spb
     return max(0, self.correlate(mod_presamples, samples[max(0, offset - x) : offset + x]))
예제 #6
0
 def modulate(self, samples):
     '''
     Multiply samples by a local sinusoid carrier of the same length.
     Return the multiplied result.
     '''
     return samples * local_carrier(self.fc, len(samples), self.samplerate)