From 5162b521a0cd32aa65f982e8988a24e449c8c5da Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Fri, 19 Feb 2021 15:40:43 +0100 Subject: [PATCH] Added high correction table --- main.c | 12 ++++++++---- nanovna.h | 9 +++++++-- sa_cmd.c | 10 +++++----- sa_core.c | 26 +++++++++++++++++--------- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/main.c b/main.c index 7569368..42f0b7b 100644 --- a/main.c +++ b/main.c @@ -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, diff --git a/nanovna.h b/nanovna.h index 6aed91f..0b94aeb 100644 --- a/nanovna.h +++ b/nanovna.h @@ -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; diff --git a/sa_cmd.c b/sa_cmd.c index 85b4663..d8986cc 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -622,13 +622,13 @@ VNA_SHELL_FUNCTION(cmd_correction) if (argc == 0) { shell_printf("index frequency value\r\n"); for (int i=0; i> 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) ;