From 272d1fcc24e7bcdab8df2c3ff7b68aba5ec737d9 Mon Sep 17 00:00:00 2001 From: erikkaashoek Date: Mon, 30 May 2022 10:23:42 +0200 Subject: [PATCH] RBW correction updated --- main.c | 4 ++-- nanovna.h | 5 +++-- sa_cmd.c | 23 +++++++++++++++++++---- sa_core.c | 30 +++++++++++++++++------------- si4468.c | 18 +++++++++--------- ui_sa.c | 8 ++++---- 6 files changed, 54 insertions(+), 34 deletions(-) diff --git a/main.c b/main.c index fc3b27f..298d985 100644 --- a/main.c +++ b/main.c @@ -963,7 +963,7 @@ config_t config = { .cor_nfm = 0, //-18, .ext_zero_level = 128, #ifdef __ULTRA - .ultra_threshold = 350000000, + .ultra_start = 350000000, .ultra = false, #endif #endif @@ -972,7 +972,7 @@ config_t config = { .vbat_offset = 220, .frequency_IF1 = DEFAULT_IF, .frequency_IF2 = 0, - .ultra_threshold = ULTRA_AUTO, + .ultra_start = ULTRA_AUTO, .low_level_offset = 100.0, // Uncalibrated .high_level_offset = 100, // Uncalibrated .lna_level_offset = 100, diff --git a/nanovna.h b/nanovna.h index 64695c5..d21752f 100644 --- a/nanovna.h +++ b/nanovna.h @@ -330,7 +330,7 @@ extern float channel_power_watt[3]; extern const char * const unit_string[]; extern uint16_t vbwSteps; #ifdef __ULTRA__ -extern freq_t ultra_threshold; +extern freq_t ultra_start; extern bool ultra; #endif #ifdef TINYSA4 @@ -739,7 +739,7 @@ typedef struct config { freq_t frequency_IF2; #endif #ifdef __ULTRA__ - freq_t ultra_threshold; + freq_t ultra_start; freq_t direct_start; freq_t direct_stop; int8_t ultra; @@ -1102,6 +1102,7 @@ typedef struct setting uint8_t subtract[TRACES_MAX];// index uint8_t measurement; // enum uint8_t spur_removal; // enum + uint8_t disable_correction; int8_t normalized_trace; int8_t tracking; // -1...1 Can NOT convert to bool!!!!!! diff --git a/sa_cmd.c b/sa_cmd.c index 21ad376..951c917 100644 --- a/sa_cmd.c +++ b/sa_cmd.c @@ -171,10 +171,12 @@ VNA_SHELL_FUNCTION(cmd_ultra) case 3: if (argc != 2) goto usage; + if (get_str_index(argv[1], ultra_cmd)== 2) + goto auto_label; a = my_atoui(argv[1]); auto_label: - config.ultra_threshold = a; - ultra_threshold = a; + config.ultra_start = a; + ultra_start = a; dirty = true; break; default: @@ -1006,14 +1008,27 @@ VNA_SHELL_FUNCTION(cmd_correction) { (void)argc; #ifdef TINYSA4 - static const char cmd[] = "low|lna|ultra|ultra_lna|out|high"; + static const char cmd[] = "low|lna|ultra|ultra_lna|out|high|off|on"; static const char range[] = "0-19"; #else static const char cmd[] = "low|high"; static const char range[] = "0-9"; #endif int m = get_str_index(argv[0], cmd); - if (argc == 1) { + if (argc == 1 && m >=0) { +#ifdef TINYSA4 + switch(m) { + case 6: // Off + setting.disable_correction = true; + goto show; + case 7: // on + setting.disable_correction = false; + show: + dirty = true; // recalculate intermediate table + shell_printf("correction %s\r\n", (setting.disable_correction ? "off":"on")); + return; + } +#endif shell_printf("index frequency value\r\n"); for (int i=0; i ultra_threshold) { + if (ultra && f > ultra_start) { c = CORRECTION_LOW_ULTRA; if (LO_harmonic) { cv += float_TO_PURE_RSSI(config.harmonic_level_offset); // +10.5dB correction. @@ -1871,6 +1871,10 @@ pureRSSI_t get_frequency_correction(freq_t f) // Frequency dependent RSSI c if (f > ULTRA_MAX_FREQ) { cv += float_TO_PURE_RSSI(+4); // 4dB loss in harmonic mode } +#endif +#ifdef TINYSA4 + if (setting.disable_correction) + goto done; #endif int i = 0; while (f > config.correction_frequency[c][i] && i < CORRECTION_POINTS) @@ -3387,7 +3391,7 @@ modulation_again: #endif { enable_ADF_output(true); - if (ultra && f > ultra_threshold) { + if (ultra && f > ultra_start) { enable_ultra(true); #ifdef __NEW_SWITCHES__ enable_direct(false); @@ -3415,7 +3419,7 @@ modulation_again: #if 0 if (setting.mode == M_LOW && setting.frequency_step > 0 && ultra && ((f < ULTRA_MAX_FREQ && f > MAX_LO_FREQ - local_IF) || - ( f > ultra_threshold && f < MIN_BELOW_LO + local_IF)) + ( f > ultra_start && f < MIN_BELOW_LO + local_IF)) ) { local_vbw_steps *= 2; } @@ -3505,7 +3509,7 @@ again: // Spur redu } else { #ifdef __ULTRA__ if (S_IS_AUTO(setting.spur_removal)) { - if (ultra && lf >= ultra_threshold) { + if (ultra && lf >= ultra_start) { setting.spur_removal= S_AUTO_ON; } else { setting.spur_removal= S_AUTO_OFF; @@ -4365,11 +4369,11 @@ static bool sweep(bool break_on_operation) float temp_min_level = 100; // Initialize the peak search algorithm int16_t downslope = true; #ifdef __ULTRA__ - if (setting.mode == M_LOW && config.ultra_threshold == ULTRA_AUTO) { + if (setting.mode == M_LOW && config.ultra_start == ULTRA_AUTO) { if (getFrequency(sweep_points-1) <= 800000000) - ultra_threshold = 800000000; + ultra_start = 800000000; else - ultra_threshold = 700000000; + ultra_start = 700000000; } #endif // ------------------------- start sweep loop ----------------------------------- @@ -5913,7 +5917,7 @@ void test_prepare(int i) #endif #ifdef __ULTRA__ ultra = true; - ultra_threshold = 2000000000; + ultra_start = 2000000000; #endif setting.auto_IF = true; setting.auto_attenuation = false; @@ -6013,10 +6017,10 @@ common_silent: switch(test_case[i].setup) { // Prepare test conditions #ifdef TINYSA4 case TP_30MHZ_ULTRA: - ultra_threshold = 0; + ultra_start = 0; break; case TP_30MHZ_DIRECT: - ultra_threshold = 800000000; + ultra_start = 800000000; saved_direct = config.direct; config.direct = true; saved_direct_start = config.direct_start; @@ -6326,7 +6330,7 @@ quit: if (setting.test_argument) set_sweep_frequency(ST_CENTER, ((freq_t)setting.test_argument)); #ifdef __ULTRA__ - ultra_threshold = (config.ultra_threshold == ULTRA_AUTO ? DEFAULT_ULTRA_THRESHOLD : config.ultra_threshold); + ultra_start = (config.ultra_start == ULTRA_AUTO ? DEFAULT_ULTRA_THRESHOLD : config.ultra_start); #endif test_acquire(TEST_LEVEL); // Acquire test test_validate(TEST_LEVEL); // Validate test diff --git a/si4468.c b/si4468.c index 63396eb..cbbd433 100644 --- a/si4468.c +++ b/si4468.c @@ -1718,15 +1718,15 @@ static const RBW_t RBW_choices[] = #else #define NOISE_BASE_CORRECTION 7 - {SI4463_RBW_02kHz, 18,3, NOISE_BASE_CORRECTION + 10}, // 15 ->10 - {SI4463_RBW_1kHz, 15,10, NOISE_BASE_CORRECTION + -5}, // 5 -> -5 - {SI4463_RBW_3kHz, 10,30, NOISE_BASE_CORRECTION + -5}, // 0 ->-5 - {SI4463_RBW_10kHz, 14,100,NOISE_BASE_CORRECTION + 0}, // 0 -> 0 - {SI4463_RBW_30kHz, 0,300, NOISE_BASE_CORRECTION + -5}, // 5 -> -5 - {SI4463_RBW_100kHz, 0,1000,NOISE_BASE_CORRECTION + -5}, // 5 -> -5 - {SI4463_RBW_300kHz, 0,3000,NOISE_BASE_CORRECTION}, // 300k must have RSSI correction = 0 - {SI4463_RBW_600kHz, 5,6000,NOISE_BASE_CORRECTION + 0}, // 10-?0 - {SI4463_RBW_850kHz, 8,8500,NOISE_BASE_CORRECTION + 10}, // 8->10 + {SI4463_RBW_02kHz, 15,3, NOISE_BASE_CORRECTION + 10}, // + {SI4463_RBW_1kHz, 15,10, NOISE_BASE_CORRECTION + -5},// + {SI4463_RBW_3kHz, 10,30, NOISE_BASE_CORRECTION + -5},// + {SI4463_RBW_10kHz, 14,100,NOISE_BASE_CORRECTION + 0}, // + {SI4463_RBW_30kHz, 0,300, NOISE_BASE_CORRECTION + -5},// + {SI4463_RBW_100kHz, 0,1000,NOISE_BASE_CORRECTION + -5},// + {SI4463_RBW_300kHz, 0,3000,NOISE_BASE_CORRECTION}, // 300k must have RSSI correction = 0 + {SI4463_RBW_600kHz, 5,6000,NOISE_BASE_CORRECTION + 0}, // + {SI4463_RBW_850kHz, 8,8500,NOISE_BASE_CORRECTION + 10},// #endif }; diff --git a/ui_sa.c b/ui_sa.c index e6f5efc..76c1995 100644 --- a/ui_sa.c +++ b/ui_sa.c @@ -3295,8 +3295,8 @@ static void fetch_numeric_target(uint8_t mode) #endif #ifdef __ULTRA__ case KM_ULTRA_START: - uistat.freq_value = config.ultra_threshold; - if (config.ultra_threshold == ULTRA_AUTO) + uistat.freq_value = config.ultra_start; + if (config.ultra_start == ULTRA_AUTO) plot_printf(uistat.text, sizeof uistat.text, "AUTO"); else plot_printf(uistat.text, sizeof uistat.text, "%.3QHz", uistat.freq_value ); @@ -3488,10 +3488,10 @@ set_numeric_value(void) #endif #ifdef __ULTRA__ case KM_ULTRA_START: - config.ultra_threshold = uistat.freq_value; + config.ultra_start = uistat.freq_value; reset_settings(setting.mode); // config_save(); // TODO not now - //ultra_threshold = config.ultra_threshold; + //ultra_start = config.ultra_start; break; case KM_DIRECT_START: config.direct_start = uistat.freq_value;