Class: PWN::SDR::Decoder::POCSAG::Demod
- Inherits:
-
Object
- Object
- PWN::SDR::Decoder::POCSAG::Demod
- 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
- #feed(samples, &emit) ⇒ Object
- #flush(&emit) ⇒ Object
-
#initialize(rate: 48_000) ⇒ Demod
constructor
A new instance of Demod.
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 |