Sha256: 40cc3fb6e24a15f2e583be7877a7b3335f0ffaf93b5631a7f00112148d841dc7
Contents?: true
Size: 1.36 KB
Versions: 1
Compression:
Stored size: 1.36 KB
Contents
class Radio class PSK31 class Decoder attr_accessor :mode # :bpsk or :qpsk or :qpsklsb def initialize @mode = :bpsk reset end def reset @prev_i = 0.0 @prev_q = 0.0 @this_i = 0.0 @this_q = 0.0 @code = 0 @prev_bit = false end def call new_i, new_q @prev_i = @this_i @prev_q = @this_q @this_i = new_i @this_q = new_q vect_y = @prev_i*@this_i + @prev_q*@this_q if @mode == :bpsk bit = vect_y >= 0.0 ? 1 : 0 else vect_x = @prev_i*@this_q - @this_i*@prev_q if vect_y == 0.0 # atan2 errors on (0,0) angle = PI elsif @mode == :qpsklsb angle = PI + Math.atan2(vect_y, -vect_x) else # :qpsk or :bpsk angle = PI + Math.atan2(vect_y, vect_x) end bit = viterbi angle end if bit==0 and @prev_bit==0 if @code != 0 @code >>= 2 @code &= 0x07FF ch = VARICODE_DECODE_TABLE[@code] yield ch if ch @code = 0 end else @code <<= 1 @code |= bit @prev_bit = bit end end private def viterbi raise 'todo' end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
radio-0.0.1 | lib/radio/psk31/decoder.rb |