correction table added to config

tinySA-v0.2
erikkaashoek 6 years ago
parent 0f14e21df3
commit 068bfacbcf

2
.gitignore vendored

@ -11,3 +11,5 @@ TAGS
.emacs-dirvars .emacs-dirvars
*png *png
*.bak *.bak
version.txt
dorelease.bat

@ -826,6 +826,8 @@ config_t config = {
.vbat_offset = 500, .vbat_offset = 500,
.low_level_offset = 100, // Uncalibrated .low_level_offset = 100, // Uncalibrated
.high_level_offset = 100, // Uncalibrated .high_level_offset = 100, // Uncalibrated
.correction_frequency = { 100000, 200000, 400000, 1000000, 2000000, 50000000, 100000000, 200000000, 300000000, 350000000 },
.correction_value = { +4.0, +2.0, +1.5, +0.5, 0.0, 0.0, +1.0, +1.0, +2.5, +5.0 },
}; };
//properties_t current_props; //properties_t current_props;
@ -2283,6 +2285,7 @@ static const VNAShellCommand commands[] =
{ "w", cmd_w, 0 }, { "w", cmd_w, 0 },
{ "o", cmd_o, 0 }, { "o", cmd_o, 0 },
{ "d", cmd_d, 0 }, { "d", cmd_d, 0 },
{ "correction", cmd_correction, 0 },
#ifdef ENABLE_THREADS_COMMAND #ifdef ENABLE_THREADS_COMMAND
{"threads" , cmd_threads , 0}, {"threads" , cmd_threads , 0},
#endif #endif

@ -51,6 +51,7 @@
#define actual_t measured[TRACE_ACTUAL] #define actual_t measured[TRACE_ACTUAL]
#define temp_t measured[TRACE_TEMP] #define temp_t measured[TRACE_TEMP]
#define CORRECTION_POINTS 10 // Frequency dependent level correction table entries
typedef float measurement_t[TRACES_MAX][POINTS_COUNT]; typedef float measurement_t[TRACES_MAX][POINTS_COUNT];
extern measurement_t measured; extern measurement_t measured;
@ -373,7 +374,9 @@ typedef struct config {
uint16_t vbat_offset; uint16_t vbat_offset;
int16_t low_level_offset; int16_t low_level_offset;
int16_t high_level_offset; int16_t high_level_offset;
uint8_t _reserved[22]; uint32_t correction_frequency[CORRECTION_POINTS];
float correction_value[CORRECTION_POINTS];
// uint8_t _reserved[22];
uint32_t checksum; uint32_t checksum;
} config_t; } config_t;

@ -338,3 +338,26 @@ VNA_SHELL_FUNCTION(cmd_w)
return; return;
set_RBW(p); set_RBW(p);
} }
VNA_SHELL_FUNCTION(cmd_correction)
{
(void)argc;
if (argc == 0) {
shell_printf("correction table\r\n");
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]);
}
return;
}
if (argc != 3) {
shell_printf("usage: correction index frequency value\r\n");
return;
}
int i = my_atoi(argv[0]);
uint32_t f = my_atoui(argv[1]);
float v = my_atof(argv[2]);
config.correction_frequency[i] = f;
config.correction_value[i] = v;
shell_printf("updated %d to %d %.1f\r\n", i, config.correction_frequency[i], config.correction_value[i]);
}

@ -549,51 +549,30 @@ void apply_settings(void)
} }
//------------------------------------------ //------------------------------------------
#if 0
#define CORRECTION_POINTS 10 #define CORRECTION_POINTS 10
static const uint32_t correction_frequency[CORRECTION_POINTS] = static const uint32_t correction_frequency[CORRECTION_POINTS] =
{ { 100000, 200000, 400000, 1000000, 2000000, 50000000, 100000000, 200000000, 300000000, 350000000 };
100000,
200000,
400000,
1000000,
2000000,
50000000,
100000000,
200000000,
300000000,
350000000
};
static const float correction_value[CORRECTION_POINTS] = static const float correction_value[CORRECTION_POINTS] =
{ { +4.0, +2.0, +1.5, +0.5, 0.0, 0.0, +1.0, +1.0, +2.5, +5.0 };
+4.0, #endif
+2.0,
+1.5,
+0.5,
0.0,
0.0,
+1.0,
+1.0,
+2.5,
+5.0
};
float get_frequency_correction(uint32_t f) float get_frequency_correction(uint32_t f)
{ {
if (!(setting.mode == M_LOW)) if (!(setting.mode == M_LOW))
return(0.0); return(0.0);
int i = 0; int i = 0;
while (f > correction_frequency[i] && i < CORRECTION_POINTS) while (f > config.correction_frequency[i] && i < CORRECTION_POINTS)
i++; i++;
if (i >= CORRECTION_POINTS) if (i >= CORRECTION_POINTS)
return(correction_value[CORRECTION_POINTS-1]); return(config.correction_value[CORRECTION_POINTS-1]);
if (i == 0) if (i == 0)
return(correction_value[0]); return(config.correction_value[0]);
f = f - correction_frequency[i-1]; f = f - config.correction_frequency[i-1];
uint32_t m = correction_frequency[i] - correction_frequency[i-1] ; uint32_t m = config.correction_frequency[i] - config.correction_frequency[i-1] ;
float cv = correction_value[i-1] + (correction_value[i] - correction_value[i-1]) * (float)f / (float)m; float cv = config.correction_value[i-1] + (config.correction_value[i] - config.correction_value[i-1]) * (float)f / (float)m;
return(cv); return(cv);
} }

Loading…
Cancel
Save

Powered by TurnKey Linux.