Class: PWN::SDR::Decoder::Flex::Demod

Inherits:
Object
  • Object
show all
Defined in:
lib/pwn/sdr/decoder/flex.rb

Overview

Streaming FLEX demodulator fed by Base.run_native.

Instance Method Summary collapse

Constructor Details

#initialize(rate: 48_000) ⇒ Demod

Returns a new instance of Demod.



33
34
35
36
37
38
# File 'lib/pwn/sdr/decoder/flex.rb', line 33

def initialize(rate: 48_000)
  @rate  = rate
  @buf   = []
  @inv   = nil
  @carry = []
end

Instance Method Details

#feed(samples) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/pwn/sdr/decoder/flex.rb', line 40

def feed(samples, &)
  @buf.concat(samples)
  max = (@rate * 4).to_i
  @buf.shift(@buf.length - max) if @buf.length > max
  return if @buf.length < (@rate * 2) # need ≥1 frame

  try_lock if @inv.nil?
  return if @inv.nil?

  bits = PWN::SDR::Decoder::DSP.nrz_slice(samples: @buf, rate: @rate, baud: 1600, invert: @inv)
  @buf.clear
  bits = @carry + bits
  @carry = Flex.decode_bits(bits: bits, &)
end