Sha256: ffe9d8bfbe40bf4ee393e4a4a7f60a95dafc66d172187405ba1fd78cf4a824ea
Contents?: true
Size: 1.72 KB
Versions: 1
Compression:
Stored size: 1.72 KB
Contents
# rubocop:disable all require "unicode_plot" require "io/console" require "stringio" require "tty-screen" module RfBeam module KLD7 class Streamer attr_accessor :radar def initialize(radar) @radar = radar end def monitor_keypress loop do key = STDIN.getch if key.downcase == "q" @stop_streaming = true break end end end def rfft out = StringIO.new def out.tty? true end Thread.new { monitor_keypress } loop do out.truncate(0) plot = rfft_plot(@radar) plot.render(out) lines = out.string.lines lines.each { |line| $stdout.print "\r#{line}" } $stdout.print "\e[0J" $stdout.flush break if @stop_streaming n = lines.count $stdout.print "\e[#{n}F" end end private def plot_data(data) { x: Array(-128...128), series1: data.shift(256).map { |value| value / 100 }, series2: data.shift(256).map { |value| value.to_i / 100 } } end def rfft_plot(radar) width = TTY::Screen.width * 0.65 data = plot_data(radar.rfft) plot = UnicodePlot.lineplot( data[:x], data[:series1], name: "IF1/2 Averaged", title: "Raw FFT", height: 25, width: width, xlabel: "Speed (km/h)", ylabel: "Signal (db)", xlim: [-128, 128], ylim: [0, 100] ) UnicodePlot.lineplot!(plot, data[:x], data[:series2], name: "Threshold") plot end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rfbeam-0.5.1 | lib/rfbeam/kld7/streamer.rb |