Class: PWN::SDR::Decoder::GPS::DemodIQ
- Inherits:
-
Object
- Object
- PWN::SDR::Decoder::GPS::DemodIQ
- Defined in:
- lib/pwn/sdr/decoder/gps.rb
Overview
Streaming L1 C/A acquisition demod for Base.run_iq.
Instance Method Summary collapse
- #feed_iq(samples, rate: nil) ⇒ Object
-
#initialize(rate:) ⇒ DemodIQ
constructor
A new instance of DemodIQ.
Constructor Details
#initialize(rate:) ⇒ DemodIQ
Returns a new instance of DemodIQ.
24 25 26 27 28 29 |
# File 'lib/pwn/sdr/decoder/gps.rb', line 24 def initialize(rate:) @rate = rate.to_f @buf = [] @seen = {} @codes = {} end |
Instance Method Details
#feed_iq(samples, rate: nil) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/pwn/sdr/decoder/gps.rb', line 31 def feed_iq(samples, rate: nil) @rate = rate.to_f if rate @buf.concat(samples) need = (@rate / 1000.0).ceil * 2 # 1 ms of interleaved complex samples while @buf.length >= need ms = PWN::SDR::Decoder::DSP.resample_iq( iq: @buf.shift(need), src_rate: @rate, dst_rate: ACQ_RATE )[0, 2046 * 2] next if ms.nil? || ms.length < 2046 * 2 acquire(ms).each do |h| key = "PRN#{h[:prn]}" next if @seen[key] && (@seen[key] - h[:cn0_db_hz]).abs < 1.5 @seen[key] = h[:cn0_db_hz] yield h.merge(capability: 'acquisition-only', decoded: false) end end end |