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

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

Overview

Stateful filters and clocks for each candidate baud; inverted bits have independent framing history, not concatenated polarity trials.

Instance Method Summary collapse

Constructor Details

#initialize(rate: 48_000) ⇒ Demod

Returns a new instance of Demod.



92
93
94
95
96
97
# File 'lib/pwn/sdr/decoder/pocsag.rb', line 92

def initialize(rate: 48_000)
  @streams = BAUDS.map do |baud|
    [Bluetooth::SymbolStream.new(rate: rate, baud: baud),
     BitStream.new(baud: baud), BitStream.new(baud: baud)]
  end
end

Instance Method Details

#feed(samples, &emit) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/pwn/sdr/decoder/pocsag.rb', line 99

def feed(samples, &emit)
  @streams.each do |slicer, normal, inverted|
    bits = slicer.feed(samples)
    normal.feed(bits, &emit)
    inverted.feed(bits.map { |b| b ^ 1 }, &emit)
  end
end

#flush(&emit) ⇒ Object



107
108
109
110
111
112
# File 'lib/pwn/sdr/decoder/pocsag.rb', line 107

def flush(&emit)
  @streams.each do |_, normal, inverted|
    normal.flush(&emit)
    inverted.flush(&emit)
  end
end