Sha256: f37475d0e0c22bb1b448ea98b2022a120fa8518907c6d4200ce36c9b191f9202

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

class Radio
  
  class PSK31
    
    class Rx

      def initialize sample_rate, format, frequency
        @filter = Filters.new sample_rate, format, frequency, 
          :dec6 => FIR_DEC6,
          :dec16 => FIR_DEC16,
          :dec4 => FIR_DEC4,
          :bit => FIR_BIT
        @bit_detect = BitDetect.new
        @decoder = Decoder.new
      end
      
      def call sample_data
        decoded = ''
        @filter.call sample_data do |i, q|
          @bit_detect.call i, q do
            @decoder.call i, q do |symbol|
              decoded += symbol
            end
          end
        end
        decoded
      end
      
      def frequency= frequency
        if frequency != @filter.frequency
          @filter.frequency = frequency
          @filter.recalc_phase_inc
          reset
        end
      end
      
      # To compensate for bad clock in A-D conversion
      def adjust_sample_clock ppm
        @filter.clock = 8000.0 * ppm / 1000000 + 8000
        @filter.recalc_phase_inc
      end
      
      def reset
        @filter.reset
        @bit_detect.reset
        @decoder.reset
      end
      
    end
    
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
radio-0.0.1 lib/radio/psk31/rx.rb