Class: PWN::SDR::Decoder::DECT::DemodIQ
- Inherits:
-
Object
- Object
- PWN::SDR::Decoder::DECT::DemodIQ
- Defined in:
- lib/pwn/sdr/decoder/dect.rb
Overview
Streaming DECT GFSK demod for Base.run_iq — I/Q → RFPI/A-field.
Instance Method Summary collapse
- #feed_bits(bits) ⇒ Object
- #feed_iq(samples, rate: nil) ⇒ Object
-
#initialize(rate:, carrier: nil, packet: :a_field, encrypted: nil, **context) ⇒ DemodIQ
constructor
A new instance of DemodIQ.
Constructor Details
#initialize(rate:, carrier: nil, packet: :a_field, encrypted: nil, **context) ⇒ DemodIQ
Returns a new instance of DemodIQ.
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/pwn/sdr/decoder/dect.rb', line 24 def initialize(rate:, carrier: nil, packet: :a_field, encrypted: nil, **context) raise ArgumentError, 'supported packets are :p00 and :p32' unless i[a_field p00 p32].include?(packet) @packet = packet @encrypted = encrypted @frame_number = context[:frame_number] @b_format = context.fetch(:b_format, :unprotected) @rate = rate.to_f @carrier = carrier @polarity_bits = { false => [], true => [] } @skip = { false => 0, true => 0 } end |
Instance Method Details
#feed_bits(bits) ⇒ Object
43 44 45 46 47 |
# File 'lib/pwn/sdr/decoder/dect.rb', line 43 def feed_bits(bits, &) [false, true].each do |inv| scan(inv ? bits.map { |b| b ^ 1 } : bits, inv, &) if block_given? end end |
#feed_iq(samples, rate: nil) ⇒ Object
37 38 39 40 41 |
# File 'lib/pwn/sdr/decoder/dect.rb', line 37 def feed_iq(samples, rate: nil, &) @rate = rate.to_f if rate @slicer ||= Bluetooth::SymbolStream.new(rate: @rate, baud: BAUD) feed_bits(@slicer.feed_iq(samples), &) end |