From 0eb1364cf7f2763b043e9430e20beb228d1fd01d Mon Sep 17 00:00:00 2001 From: Tatu Peltola Date: Tue, 7 Jun 2016 21:00:10 +0300 Subject: [PATCH 1/4] Use FFT averaging --- plugins/dsp/csdr/plugin.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/dsp/csdr/plugin.py b/plugins/dsp/csdr/plugin.py index be31bfa..40cf8f9 100644 --- a/plugins/dsp/csdr/plugin.py +++ b/plugins/dsp/csdr/plugin.py @@ -26,7 +26,7 @@ import os import code import signal import fcntl - +fft_averages = 50 class dsp_plugin: def __init__(self): @@ -58,7 +58,8 @@ class dsp_plugin: if self.csdr_through: any_chain_base+="csdr through | " any_chain_base+=self.format_conversion+(" | " if self.format_conversion!="" else "") ##"csdr flowcontrol {flowcontrol} auto 1.5 10 | " if which == "fft": - fft_chain_base = any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logpower_cf -70 | csdr fft_exchange_sides_ff {fft_size}" + #fft_chain_base = any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logpower_cf -70 | csdr fft_exchange_sides_ff {fft_size}" + fft_chain_base = any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logaveragepower_cf -70 {fft_size} 50 | csdr fft_exchange_sides_ff {fft_size}" if self.fft_compression=="adpcm": return fft_chain_base+" | csdr compress_fft_adpcm_f_u8 {fft_size}" else: @@ -118,7 +119,7 @@ class dsp_plugin: self.fft_fps=fft_fps def fft_block_size(self): - return self.samp_rate/self.fft_fps + return self.samp_rate/self.fft_fps/fft_averages def set_format_conversion(self,format_conversion): self.format_conversion=format_conversion From e9578c620b9369364fd39e2871cc329f7f689b79 Mon Sep 17 00:00:00 2001 From: Tatu Peltola Date: Tue, 7 Jun 2016 21:51:04 +0300 Subject: [PATCH 2/4] Put number of averages in configuration --- config_webrx.py | 3 ++- openwebrx.py | 1 + plugins/dsp/csdr/plugin.py | 13 +++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/config_webrx.py b/config_webrx.py index f888c79..cd079c0 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -69,7 +69,8 @@ sdrhu_public_listing = False # ==== DSP/RX settings ==== dsp_plugin="csdr" fft_fps=9 -fft_size=4096 +fft_size=16384 # averaging only works on fft_size=16384 for some reason +fft_averages=50 samp_rate = 250000 center_freq = 145525000 diff --git a/openwebrx.py b/openwebrx.py index 1625381..9a568c7 100755 --- a/openwebrx.py +++ b/openwebrx.py @@ -270,6 +270,7 @@ def spectrum_thread_function(): dsp.set_samp_rate(cfg.samp_rate) dsp.set_fft_size(cfg.fft_size) dsp.set_fft_fps(cfg.fft_fps) + dsp.set_fft_averages(cfg.fft_averages) dsp.set_fft_compression(cfg.fft_compression) dsp.set_format_conversion(cfg.format_conversion) apply_csdr_cfg_to_dsp(dsp) diff --git a/plugins/dsp/csdr/plugin.py b/plugins/dsp/csdr/plugin.py index 40cf8f9..d82140e 100644 --- a/plugins/dsp/csdr/plugin.py +++ b/plugins/dsp/csdr/plugin.py @@ -26,7 +26,7 @@ import os import code import signal import fcntl -fft_averages = 50 + class dsp_plugin: def __init__(self): @@ -51,6 +51,7 @@ class dsp_plugin: self.csdr_print_bufsizes = False self.csdr_through = False self.squelch_level = 0 + self.fft_averages = 50 def chain(self,which): any_chain_base="ncat -v 127.0.0.1 {nc_port} | " @@ -59,7 +60,7 @@ class dsp_plugin: any_chain_base+=self.format_conversion+(" | " if self.format_conversion!="" else "") ##"csdr flowcontrol {flowcontrol} auto 1.5 10 | " if which == "fft": #fft_chain_base = any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logpower_cf -70 | csdr fft_exchange_sides_ff {fft_size}" - fft_chain_base = any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logaveragepower_cf -70 {fft_size} 50 | csdr fft_exchange_sides_ff {fft_size}" + fft_chain_base = any_chain_base+"csdr fft_cc {fft_size} {fft_block_size} | csdr logaveragepower_cf -70 {fft_size} {fft_averages} | csdr fft_exchange_sides_ff {fft_size}" if self.fft_compression=="adpcm": return fft_chain_base+" | csdr compress_fft_adpcm_f_u8 {fft_size}" else: @@ -118,8 +119,12 @@ class dsp_plugin: #to change this, restart is required self.fft_fps=fft_fps + def set_fft_averages(self,fft_averages): + #to change this, restart is required + self.fft_averages=fft_averages + def fft_block_size(self): - return self.samp_rate/self.fft_fps/fft_averages + return self.samp_rate/self.fft_fps/self.fft_averages def set_format_conversion(self,format_conversion): self.format_conversion=format_conversion @@ -182,7 +187,7 @@ class dsp_plugin: #run the command command=command_base.format( bpf_pipe=self.bpf_pipe, shift_pipe=self.shift_pipe, decimation=self.decimation, \ - last_decimation=self.last_decimation, fft_size=self.fft_size, fft_block_size=self.fft_block_size(), \ + last_decimation=self.last_decimation, fft_size=self.fft_size, fft_block_size=self.fft_block_size(), fft_averages=self.fft_averages, \ bpf_transition_bw=float(self.bpf_transition_bw)/self.if_samp_rate(), ddc_transition_bw=self.ddc_transition_bw(), \ flowcontrol=int(self.samp_rate*2), start_bufsize=self.base_bufsize*self.decimation, nc_port=self.nc_port, \ squelch_pipe=self.squelch_pipe, smeter_pipe=self.smeter_pipe ) From 6df72f3a98feb68e8498c65695f808bc75b1c5f1 Mon Sep 17 00:00:00 2001 From: Tatu Peltola Date: Tue, 7 Jun 2016 22:04:27 +0300 Subject: [PATCH 3/4] Made waterfall palette with better contrast --- config_webrx.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config_webrx.py b/config_webrx.py index cd079c0..e79c249 100644 --- a/config_webrx.py +++ b/config_webrx.py @@ -140,9 +140,9 @@ iq_server_port = 4951 #TCP port for ncat to listen on. It will send I/Q data ove #access_log = "~/openwebrx_access.log" -waterfall_colors = "[0x000000ff,0x2e6893ff, 0x69a5d0ff, 0x214b69ff, 0x9dc4e0ff, 0xfff775ff, 0xff8a8aff, 0xb20000ff]" -waterfall_min_level = -115 #in dB -waterfall_max_level = 0 +waterfall_colors = "[0x000000ff,0x0000ffff,0x00ffffff,0x00ff00ff,0xffff00ff,0xff0000ff,0xff00ffff,0xffffffff]" +waterfall_min_level = -85 #in dB +waterfall_max_level = -20 #A guide is available to help you set these values: https://github.com/simonyiszk/openwebrx/wiki/Calibrating-waterfall-display-levels #Warning! The settings below are very experimental. From e3a51a45f3071e9b63e36adae1d85f6bb229757c Mon Sep 17 00:00:00 2001 From: Tatu Peltola Date: Tue, 7 Jun 2016 22:55:58 +0300 Subject: [PATCH 4/4] Changed zoom levels --- htdocs/openwebrx.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/htdocs/openwebrx.js b/htdocs/openwebrx.js index 0055b13..770503c 100644 --- a/htdocs/openwebrx.js +++ b/htdocs/openwebrx.js @@ -1019,7 +1019,7 @@ function canvas_mousewheel(evt) zoom_max_level_hps=33; //Hz/pixel -zoom_levels_count=5; +zoom_levels_count=14; function get_zoom_coeff_from_hps(hps) { @@ -1041,8 +1041,10 @@ function mkzoomlevels() zoom_levels=[1]; maxc=get_zoom_coeff_from_hps(zoom_max_level_hps); if(maxc<1) return; + // logarithmic interpolation + zoom_ratio = Math.pow(maxc, 1/zoom_levels_count); for(i=1;i