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.
23 24 25 26 27 28 |
# File 'lib/pwn/sdr/decoder/gps.rb', line 23 def initialize(rate:) @rate = rate.to_f @buf = [] @seen = {} @codes = {} end |
Instance Method Details
#feed_iq(samples, rate: nil) ⇒ Object
30 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 30 def feed_iq(samples, rate: nil) @rate = rate.to_f if rate @buf.concat(samples) need = (@rate / 1000.0 * 2).ceil * 2 # 1 ms complex + headroom return if @buf.length < need * 2 ms = PWN::SDR::Decoder::DSP.resample_iq( iq: @buf.shift(need * 2), src_rate: @rate, dst_rate: ACQ_RATE )[0, 2046 * 2] return if ms.nil? || ms.length < 2046 * 2 hits = acquire(ms) hits.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 end end |