Class: PWN::SDR::Decoder::POCSAG::Demod

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

Overview

Streaming POCSAG demodulator fed by Base.run_native.

Instance Method Summary collapse

Constructor Details

#initialize(rate: 48_000) ⇒ Demod

Returns a new instance of Demod.



30
31
32
33
34
35
36
# File 'lib/pwn/sdr/decoder/pocsag.rb', line 30

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

Instance Method Details

#feed(samples) ⇒ Object



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

def feed(samples, &)
  @buf.concat(samples)
  max = (@rate * 3.5).to_i
  @buf.shift(@buf.length - max) if @buf.length > max
  return if @buf.length < @rate # need ≥1 s to lock

  try_lock unless @baud
  return unless @baud

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