Log averaging noise marker corrections

multi_trace
erikkaashoek 5 years ago
parent 3cc0c2b50e
commit a01f0c0021

@ -104,6 +104,7 @@ uint16_t adc_single_read(uint32_t chsel)
uint16_t adc1_single_read(uint32_t chsel) uint16_t adc1_single_read(uint32_t chsel)
{ {
(void)chsel;
/* ADC setup */ /* ADC setup */
adcConvert(&ADCD1, &adcgrpcfgVersion, samples, 1); adcConvert(&ADCD1, &adcgrpcfgVersion, samples, 1);
return(samples[0]); return(samples[0]);

@ -1398,7 +1398,7 @@ VNA_SHELL_FUNCTION(cmd_trace)
} }
// goto usage; // goto usage;
} }
static const char cmd_store_list[] = "store|clear|subtract"; static const char cmd_store_list[] = "store|clear|subtract|value";
if (argc == 1) { if (argc == 1) {
int type = get_str_index(argv[0], cmd_store_list); int type = get_str_index(argv[0], cmd_store_list);
if (type >= 0) { if (type >= 0) {
@ -1412,6 +1412,10 @@ VNA_SHELL_FUNCTION(cmd_trace)
case 2: case 2:
set_subtract_storage(); set_subtract_storage();
goto update; goto update;
case 3:
for (int i=0;i<sweep_points;i++) {
shell_printf("trace value %d %.2f\r\n", i, actual_t[i]);
}
} }
} }
// goto usage; // goto usage;
@ -1438,7 +1442,7 @@ VNA_SHELL_FUNCTION(cmd_trace)
} }
goto usage; goto usage;
} }
static const char cmd_load_list[] = "load"; static const char cmd_load_list[] = "value";
if (argc == 3) { if (argc == 3) {
switch (get_str_index(argv[0], cmd_load_list)) { switch (get_str_index(argv[0], cmd_load_list)) {
case 0: case 0:

@ -385,6 +385,7 @@ extern float high_out_offset(void);
#define HIGH_OUT_OFFSET high_out_offset() #define HIGH_OUT_OFFSET high_out_offset()
extern bool debug_avoid; extern bool debug_avoid;
extern void toggle_debug_avoid(void); extern void toggle_debug_avoid(void);
extern float log_averaging_correction;
#else #else
void set_10mhz(freq_t); void set_10mhz(freq_t);
#define LOW_OUT_OFFSET config.low_level_output_offset #define LOW_OUT_OFFSET config.low_level_output_offset
@ -1300,6 +1301,7 @@ extern char range_text[20];
#define rccEnableWWDG(lp) rccEnableAPB1(RCC_APB1ENR_WWDGEN, lp) #define rccEnableWWDG(lp) rccEnableAPB1(RCC_APB1ENR_WWDGEN, lp)
#define ADC_TOUCH_X ADC_CHANNEL_IN3 #define ADC_TOUCH_X ADC_CHANNEL_IN3
#define ADC_TOUCH_Y ADC_CHANNEL_IN4 #define ADC_TOUCH_Y ADC_CHANNEL_IN4
uint16_t adc1_single_read(uint32_t chsel);
#else #else
#define ADC_TOUCH_X ADC_CHSELR_CHSEL6 #define ADC_TOUCH_X ADC_CHSELR_CHSEL6
#define ADC_TOUCH_Y ADC_CHSELR_CHSEL7 #define ADC_TOUCH_Y ADC_CHSELR_CHSEL7

@ -299,7 +299,7 @@ float
marker_to_value(const int i) marker_to_value(const int i)
{ {
#ifdef __MARKER_CACHE__ #ifdef __MARKER_CACHE__
if (marker_cache_valid[i] && marker_cache_index[i] == markers[i].index) if (markers[i].mtype & M_AVER && linear_averaging && marker_cache_valid[i] && marker_cache_index[i] == markers[i].index)
return marker_cache[i]; return marker_cache[i];
#endif #endif
float *ref_marker_levels; float *ref_marker_levels;
@ -313,7 +313,7 @@ marker_to_value(const int i)
if (markers[i].mtype & M_NOISE if (markers[i].mtype & M_NOISE
#ifdef TINYSA4 #ifdef TINYSA4
&& linear_averaging && linear_averaging
#endif #endif
) )
setting.unit = U_WATT; // Noise averaging should always be done in Watts setting.unit = U_WATT; // Noise averaging should always be done in Watts
v = 0; v = 0;
@ -327,7 +327,7 @@ marker_to_value(const int i)
if (markers[i].mtype & M_NOISE){ if (markers[i].mtype & M_NOISE){
v = v - logf(actual_rbw_x10*100.0) * (10.0/logf(10.0)) v = v - logf(actual_rbw_x10*100.0) * (10.0/logf(10.0))
#ifdef TINYSA4 #ifdef TINYSA4
+ SI4463_noise_correction_x10/10.0 + SI4463_noise_correction_x10/10.0 + (linear_averaging ? 0.0 : log_averaging_correction);
#endif #endif
; ;
} }

@ -67,11 +67,12 @@ int spur_gate = 100;
freq_t ultra_threshold; freq_t ultra_threshold;
bool ultra; bool ultra;
int noise_level; int noise_level;
float log_averaging_correction;
uint32_t old_CFGR; uint32_t old_CFGR;
uint32_t orig_CFGR; uint32_t orig_CFGR;
int debug_frequencies = false; int debug_frequencies = false;
int linear_averaging = true; int linear_averaging = false;
static freq_t old_freq[5] = { 0, 0, 0, 0,0}; static freq_t old_freq[5] = { 0, 0, 0, 0,0};
static freq_t real_old_freq[5] = { 0, 0, 0, 0,0}; static freq_t real_old_freq[5] = { 0, 0, 0, 0,0};
@ -1485,17 +1486,18 @@ static const struct {
uint16_t offset_delay; uint16_t offset_delay;
uint16_t spur_div_1000; uint16_t spur_div_1000;
int16_t noise_level; int16_t noise_level;
float log_aver_correction;
} step_delay_table[]={ } step_delay_table[]={
// RBWx10 step_delay offset_delay spur_gate (value divided by 1000) // RBWx10 step_delay offset_delay spur_gate (value divided by 1000)
{ 8500, 150, 50, 400, -90}, { 8500, 150, 50, 400, -90, 0.4},
{ 6000, 150, 50, 300, -95}, { 6000, 150, 50, 300, -95, 0.5},
{ 3000, 150, 50, 200, -95}, { 3000, 150, 50, 200, -95, 0.8},
{ 1000, 600, 100, 100, -105}, { 1000, 600, 100, 100, -105, 0.4},
{ 300, 800, 120, 100, -110}, { 300, 800, 120, 100, -110, 0.9},
{ 100, 1500, 120, 100, -115}, { 100, 1500, 120, 100, -115, 0.5},
{ 30, 1500, 300, 100, -120}, { 30, 1500, 300, 100, -120, 1.2},
{ 10, 5000, 600, 100, -122}, { 10, 5000, 600, 100, -122, 1.1},
{ 3, 19000, 12000, 100, -125} { 3, 19000, 12000, 100, -125, 1.0}
}; };
#endif #endif
@ -1527,6 +1529,7 @@ void calculate_step_delay(void)
SI4432_offset_delay = step_delay_table[i].offset_delay; SI4432_offset_delay = step_delay_table[i].offset_delay;
spur_gate = step_delay_table[i].spur_div_1000 * 1000; spur_gate = step_delay_table[i].spur_div_1000 * 1000;
noise_level = step_delay_table[i].noise_level - PURE_TO_float(get_signal_path_loss()); noise_level = step_delay_table[i].noise_level - PURE_TO_float(get_signal_path_loss());
log_averaging_correction = step_delay_table[i].log_aver_correction;
#endif #endif
if (setting.step_delay_mode == SD_PRECISE) // In precise mode wait twice as long for RSSI to stabilize if (setting.step_delay_mode == SD_PRECISE) // In precise mode wait twice as long for RSSI to stabilize
SI4432_step_delay += (SI4432_step_delay>>2) ; SI4432_step_delay += (SI4432_step_delay>>2) ;

@ -1183,6 +1183,7 @@ static UI_FUNCTION_ADV_CALLBACK(menu_linear_averaging_acb)
return; return;
} }
linear_averaging = ! linear_averaging; linear_averaging = ! linear_averaging;
dirty = true;
// menu_move_back(); // menu_move_back();
ui_mode_normal(); ui_mode_normal();
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.