class Average // rolling avg classs { constructor(max_count, init_val=0) { this.max_count_ = max_count; this.count_ = 0; this.sum_ = 0; this.add(init_val); } get_avg() { if(this.count_ == 0) return this.sum_; return this.sum_/this.count_; } add(val) { if(this.count_ == this.max_count_) { // console.debug("SATURATE"); this.sum_ = this.get_avg() * (this.max_count_-1) + val; } else { this.count_ += 1; this.sum_ += val; } } reset(val) { this.sum_ = val; this.count_ = 1; } }; var AccSpectrumArray = { arr_: new Array(), count_: 0, maxCount_: 3 }; var AvgCnt = 10; // Rolling average length. Smooths out spectrum drawing. var NoiseFloorAvg = new Average(AvgCnt); var SpectrumMinAvg = new Average(AvgCnt); var SpectrumMaxAvg = new Average(AvgCnt); // rolling average on array function AccumulateSpectrumArray(i_arr) { if(AccSpectrumArray.arr_.length != i_arr.length) { AccSpectrumArray.arr_ = i_arr; AccSpectrumArray.count_ = 1; return AccSpectrumArray.arr_; } if( AccSpectrumArray.count_ < AccSpectrumArray.maxCount_ ) { for(var i=0 ; i (1000/G_POWER_FPS) ) { AnimatePowerSpectrum_last = timestamp; DrawPowerSpectrum(G_PowerCanvas, G_SPECTRUM_DATA); } window.requestAnimationFrame(AnimatePowerSpectrum); } var AnimateDemod_last = 0; var G_DemodCanvas; function AnimateDemod(timestamp) { if(G_DemodCanvas == undefined) G_DemodCanvas = document.getElementById("HabDec_demodCanvas"); if(!AnimateDemod_last) AnimateDemod_last = timestamp; if( (timestamp - AnimateDemod_last) > (1000/G_DEMOD_FPS) ) { AnimateDemod_last = timestamp; DrawDemod(G_DemodCanvas, G_DEMOD_DATA); } window.requestAnimationFrame(AnimateDemod); }