Class: PWN::SDR::Decoder::LoRa::DemodIQ

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

Overview

Streaming CSS dechirp demod for Base.run_iq.

Instance Method Summary collapse

Constructor Details

#initialize(rate:, bw: DEFAULT_BW) ⇒ DemodIQ



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

def initialize(rate:, bw: DEFAULT_BW)
  @rate = rate.to_f
  @bw   = bw.to_i
  @buf  = []
  @dchirp = {}
  @seen = {}
end

Instance Method Details

#feed_iq(samples, rate: nil, &emit) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/pwn/sdr/decoder/lora.rb', line 37

def feed_iq(samples, rate: nil, &emit)
  @rate = rate.to_f if rate
  @input ||= []
  @input.concat(samples)
  window = [(@rate * 0.001).round, 1].max * 2
  process_window(@input.shift(window), &emit) while @input.length >= window
end

#process_window(samples) ⇒ Object



45
46
47
48
49
50
51
52
53
# File 'lib/pwn/sdr/decoder/lora.rb', line 45

def process_window(samples, &)
  r = PWN::SDR::Decoder::DSP.resample_iq(
    iq: samples, src_rate: @rate, dst_rate: @bw
  )
  @buf.concat(r)
  SF_RANGE.each { |sf| try_sf(sf, &) if block_given? }
  max = ((1 << 12) * 20) * 2
  @buf.shift(@buf.length - max) if @buf.length > max
end