Ejemplo n.º 1
0
 def demodulate(self,
                data,
                tone_bin,
                tone_num_samples,
                tone_phase,
                fft_bin,
                nchan,
                seq_nos=None):
     phi0 = tone_phase
     nfft = self.nfft
     ns = tone_num_samples
     offset_frequency = tone_offset_frequency(tone_bin, tone_num_samples,
                                              fft_bin, nfft)
     wc = self.compute_pfb_response(offset_frequency)
     t = np.arange(data.shape[0])
     demod = wc * np.exp(-1j *
                         (2 * np.pi * offset_frequency * t + phi0)) * data
     if type(seq_nos) is np.ndarray:
         pphase = np.exp(1j * packet_phase(seq_nos[0], offset_frequency,
                                           nchan, ns / nfft, nfft))
         demod *= pphase
     if self.hardware_delay_samples != 0:
         demod *= np.exp(2j * np.pi * self.hardware_delay_samples *
                         tone_bin / tone_num_samples)
     return demod
Ejemplo n.º 2
0
 def demodulate(self, data, tone_bin, tone_num_samples, tone_phase, fft_bin, nchan, seq_nos=None):
     phi0 = tone_phase
     nfft = self.nfft
     ns = tone_num_samples
     offset_frequency = tone_offset_frequency(tone_bin, tone_num_samples, fft_bin, nfft)
     wc = self.compute_pfb_response(offset_frequency)
     t = np.arange(data.shape[0])
     demod = wc * np.exp(-1j * (2 * np.pi * offset_frequency * t + phi0)) * data
     if type(seq_nos) is np.ndarray:
         pphase = np.exp(1j * packet_phase(seq_nos[0], offset_frequency, nchan, ns / nfft, nfft))
         demod *= pphase
     if self.hardware_delay_samples != 0:
         demod *= np.exp(2j * np.pi * self.hardware_delay_samples * tone_bin / tone_num_samples)
     return demod
Ejemplo n.º 3
0
    def __init__(self, tone_bins, phases, tone_nsamp, fft_bins, nfft=2 ** 14, num_taps=2, window=scipy.signal.flattop,
                 interpolation_factor=64, hardware_delay_samples=0, reference_sequence_number=0):
        super(StreamDemodulator, self).__init__(nfft=nfft, num_taps=num_taps, window=window,
                                                interpolation_factor=interpolation_factor,
                                                hardware_delay_samples=hardware_delay_samples)

        self.tone_bins = tone_bins
        self.num_channels = self.tone_bins.shape[0]
        self.tone_nsamp = tone_nsamp
        self.phases = phases
        self.fft_bins = fft_bins
        self.reference_sequence_number = reference_sequence_number

        self.samples_per_packet = 1024
        self.samples_per_channel_per_packet = self.samples_per_packet // self.num_channels
        self.sequence_number_increment_per_packet = self.samples_per_channel_per_packet * nfft // 2  # The 2 here is
        # because the sequence number increments once per fpga clock and there are nfft // 2 fpga clocks per sample
        self.offset_frequencies = tone_offset_frequency(self.tone_bins, self.tone_nsamp, self.fft_bins, self.nfft)
        self.max_period = get_offset_frequencies_period(self.offset_frequencies)
        self.pfb_response_correction = self.compute_pfb_response(self.offset_frequencies)

        self.demodulation_lookup = self.create_demodulation_lookup()
Ejemplo n.º 4
0
    def __init__(self,
                 tone_bins,
                 phases,
                 tone_nsamp,
                 fft_bins,
                 nfft=2**14,
                 num_taps=2,
                 window=scipy.signal.flattop,
                 interpolation_factor=64,
                 hardware_delay_samples=0,
                 reference_sequence_number=0):
        super(StreamDemodulator,
              self).__init__(nfft=nfft,
                             num_taps=num_taps,
                             window=window,
                             interpolation_factor=interpolation_factor,
                             hardware_delay_samples=hardware_delay_samples)

        self.tone_bins = tone_bins
        self.num_channels = self.tone_bins.shape[0]
        self.tone_nsamp = tone_nsamp
        self.phases = phases
        self.fft_bins = fft_bins
        self.reference_sequence_number = reference_sequence_number

        self.samples_per_packet = 1024
        self.samples_per_channel_per_packet = self.samples_per_packet // self.num_channels
        self.sequence_number_increment_per_packet = self.samples_per_channel_per_packet * nfft // 2  # The 2 here is
        # because the sequence number increments once per fpga clock and there are nfft // 2 fpga clocks per sample
        self.offset_frequencies = tone_offset_frequency(
            self.tone_bins, self.tone_nsamp, self.fft_bins, self.nfft)
        self.max_period = get_offset_frequencies_period(
            self.offset_frequencies)
        self.pfb_response_correction = self.compute_pfb_response(
            self.offset_frequencies)

        self.demodulation_lookup = self.create_demodulation_lookup()