Added high correction table

master
erikkaashoek 5 years ago
parent 2916b72f8a
commit 5162b521a0

@ -892,12 +892,16 @@ config_t config = {
.low_level_offset = 100, // Uncalibrated
.high_level_offset = 100, // Uncalibrated
#ifdef TINYSA3
.correction_frequency = { 10000, 100000, 200000, 500000, 50000000, 140000000, 200000000, 300000000, 330000000, 350000000 },
.correction_value = { +6.0, +2.8, +1.6, -0.4, 0.0, -0.4, +0.4, +3.0, +4.0, +8.1 },
.low_correction_frequency = { 10000, 100000, 200000, 500000, 50000000, 140000000, 200000000, 300000000, 330000000, 350000000 },
.low_correction_value = { +6.0, +2.8, +1.6, -0.4, 0.0, -0.4, +0.4, +3.0, +4.0, +8.1 },
.high_correction_frequency = { 240000000, 280000000, 300000000, 400000000, 500000000, 600000000, 700000000, 800000000, 900000000, 960000000 },
.high_correction_value = { 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0 },
#endif
#ifdef TINYSA4
.correction_frequency = { 10000, 100000, 200000, 500000, 50000000, 140000000, 200000000, 300000000, 330000000, 350000000 },
.correction_value = { 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0 },
.low_correction_frequency = { 10000, 100000, 200000, 500000, 50000000, 140000000, 200000000, 300000000, 330000000, 350000000 },
.low_correction_value = { 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0 },
.high_correction_frequency = { 10000, 100000, 200000, 500000, 50000000, 140000000, 200000000, 300000000, 330000000, 350000000 },
.high_correction_value = { 0, 0, 0, 0, 0.0, 0, 0, 0, 0, 0 },
#endif
.setting_frequency_10mhz = 10000000,
.cor_am = -14,

@ -511,8 +511,10 @@ typedef struct config {
uint16_t vbat_offset;
float low_level_offset;
float high_level_offset;
freq_t correction_frequency[CORRECTION_POINTS];
float correction_value[CORRECTION_POINTS];
freq_t low_correction_frequency[CORRECTION_POINTS];
float low_correction_value[CORRECTION_POINTS];
freq_t high_correction_frequency[CORRECTION_POINTS];
float high_correction_value[CORRECTION_POINTS];
uint32_t deviceid;
freq_t setting_frequency_10mhz;
@ -814,6 +816,9 @@ typedef struct setting
int trigger_mode;
int slider_position;
int32_t slider_span;
freq_t *correction_frequency;
float *correction_value;
uint32_t checksum; // must be last
}setting_t;

@ -622,13 +622,13 @@ VNA_SHELL_FUNCTION(cmd_correction)
if (argc == 0) {
shell_printf("index frequency value\r\n");
for (int i=0; i<CORRECTION_POINTS; i++) {
shell_printf("%d %d %.1f\r\n", i, config.correction_frequency[i], config.correction_value[i]);
shell_printf("%d %d %.1f\r\n", i, setting.correction_frequency[i], setting.correction_value[i]);
}
return;
}
if (argc == 1 && (strcmp(argv[0],"reset") == 0)) {
for (int i=0; i<CORRECTION_POINTS; i++) {
config.correction_value[i] = 0.0;
setting.correction_value[i] = 0.0;
}
shell_printf("correction table reset\r\n");
return;
@ -640,10 +640,10 @@ VNA_SHELL_FUNCTION(cmd_correction)
int i = my_atoi(argv[0]);
freq_t f = my_atoui(argv[1]);
float v = my_atof(argv[2]);
config.correction_frequency[i] = f;
config.correction_value[i] = v;
setting.correction_frequency[i] = f;
setting.correction_value[i] = v;
redraw_request|=REDRAW_AREA; // to ensure the change in level will be visible
shell_printf("updated %d to %d %.1f\r\n", i, config.correction_frequency[i], config.correction_value[i]);
shell_printf("updated %d to %d %.1f\r\n", i, setting.correction_frequency[i], setting.correction_value[i]);
}
VNA_SHELL_FUNCTION(cmd_scanraw)

@ -149,6 +149,8 @@ void reset_settings(int m)
setting.attenuate_x2 = 60;
setting.auto_attenuation = true;
setting.sweep_time_us = 0;
setting.correction_frequency = config.low_correction_frequency;
setting.correction_value = config.low_correction_value;
break;
#ifdef __ULTRA__
case M_ULTRA:
@ -165,11 +167,15 @@ void reset_settings(int m)
set_sweep_frequency(ST_SPAN, 0);
setting.sweep_time_us = 10*ONE_SECOND_TIME;
setting.step_delay_mode = SD_FAST;
setting.correction_frequency = config.low_correction_frequency;
setting.correction_value = config.low_correction_value;
break;
case M_HIGH:
set_sweep_frequency(ST_START, minFreq);
set_sweep_frequency(ST_STOP, maxFreq);
setting.sweep_time_us = 0;
setting.correction_frequency = config.high_correction_frequency;
setting.correction_value = config.high_correction_value;
break;
case M_GENHIGH:
setting.lo_drive=8;
@ -177,6 +183,8 @@ void reset_settings(int m)
set_sweep_frequency(ST_SPAN, 0);
setting.sweep_time_us = 10*ONE_SECOND_TIME;
setting.step_delay_mode = SD_FAST;
setting.correction_frequency = config.high_correction_frequency;
setting.correction_value = config.high_correction_value;
break;
}
for (uint8_t i = 0; i< MARKERS_MAX; i++) {
@ -1069,11 +1077,11 @@ static int32_t scaled_correction_value[CORRECTION_POINTS];
void calculate_correction(void)
{
scaled_correction_value[0] = config.correction_value[0] * (1 << (SCALE_FACTOR));
scaled_correction_value[0] = setting.correction_value[0] * (1 << (SCALE_FACTOR));
for (int i = 1; i < CORRECTION_POINTS; i++) {
scaled_correction_value[i] = config.correction_value[i] * (1 << (SCALE_FACTOR));
scaled_correction_value[i] = setting.correction_value[i] * (1 << (SCALE_FACTOR));
int32_t m = scaled_correction_value[i] - scaled_correction_value[i-1];
int32_t d = (config.correction_frequency[i] - config.correction_frequency[i-1]) >> SCALE_FACTOR;
int32_t d = (setting.correction_frequency[i] - setting.correction_frequency[i-1]) >> SCALE_FACTOR;
scaled_correction_multi[i] = (int32_t) ( m / d );
}
}
@ -1082,20 +1090,20 @@ void calculate_correction(void)
pureRSSI_t get_frequency_correction(freq_t f) // Frequency dependent RSSI correction to compensate for imperfect LPF
{
if (!(setting.mode == M_LOW || setting.mode == M_GENLOW))
if (setting.mode == M_GENHIGH)
return(0.0);
int i = 0;
while (f > config.correction_frequency[i] && i < CORRECTION_POINTS)
while (f > setting.correction_frequency[i] && i < CORRECTION_POINTS)
i++;
if (i >= CORRECTION_POINTS)
return(scaled_correction_value[CORRECTION_POINTS-1] >> (SCALE_FACTOR - 5) );
if (i == 0)
return(scaled_correction_value[0] >> (SCALE_FACTOR - 5) );
f = f - config.correction_frequency[i-1];
f = f - setting.correction_frequency[i-1];
#if 0
freq_t m = (config.correction_frequency[i] - config.correction_frequency[i-1]) >> SCALE_FACTOR ;
float multi = (config.correction_value[i] - config.correction_value[i-1]) * (1 << (SCALE_FACTOR -1)) / (float)m;
float cv = config.correction_value[i-1] + ((f >> SCALE_FACTOR) * multi) / (float)(1 << (SCALE_FACTOR -1)) ;
freq_t m = (setting.correction_frequency[i] - setting.correction_frequency[i-1]) >> SCALE_FACTOR ;
float multi = (setting.correction_value[i] - setting.correction_value[i-1]) * (1 << (SCALE_FACTOR -1)) / (float)m;
float cv = setting.correction_value[i-1] + ((f >> SCALE_FACTOR) * multi) / (float)(1 << (SCALE_FACTOR -1)) ;
#else
int32_t scaled_f = f >> SCALE_FACTOR;
pureRSSI_t cv = (scaled_correction_value[i-1] + (scaled_f * scaled_correction_multi[i])) >> (SCALE_FACTOR - 5) ;

Loading…
Cancel
Save

Powered by TurnKey Linux.