Class: PWN::SDR::Decoder::P25::DemodIQ

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

Overview

Streaming C4FM demod for Base.run_iq — I/Q → NAC/DUID frames.

Constant Summary collapse

AUDIO_RATE =
48_000

Instance Method Summary collapse

Constructor Details

#initialize(rate:) ⇒ DemodIQ

Returns a new instance of DemodIQ.



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

def initialize(rate:)
  @rate = rate.to_f
  @dibits = []
  @seen_fs = 0
end

Instance Method Details

#feed_iq(samples, rate: nil) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/pwn/sdr/decoder/p25.rb', line 45

def feed_iq(samples, rate: nil, &)
  @rate = rate.to_f if rate
  audio = PWN::SDR::Decoder::DSP.fm_demod_iq(iq: samples)
  audio = PWN::SDR::Decoder::DSP.resample(
    samples: audio, src_rate: @rate, dst_rate: AUDIO_RATE
  )
  syms = PWN::SDR::Decoder::DSP.slice_4fsk(
    samples: audio, rate: AUDIO_RATE, baud: 4800
  )
  @dibits.concat(syms)
  scan(&) if block_given?
  @dibits.shift(@dibits.length - 4096) if @dibits.length > 8192
end