RBW correction updated

SI443_RBW_update
erikkaashoek 4 years ago
parent 1b30f41b96
commit 272d1fcc24

@ -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,

@ -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!!!!!!

@ -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<CORRECTION_POINTS; i++) {
shell_printf("correction %s %d %D %.1f\r\n", argv[0], i, config.correction_frequency[m][i], config.correction_value[m][i]);

@ -67,7 +67,7 @@ static float old_a = -150; // cached value to reduce writes to level re
int spur_gate = 100;
#ifdef __ULTRA__
freq_t ultra_threshold;
freq_t ultra_start;
bool ultra;
static int LO_harmonic;
#endif
@ -244,7 +244,7 @@ void reset_settings(int m)
setting.mode = m;
setting.sweep = false;
#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);
ultra = config.ultra;
#endif
#ifdef TINYSA4
@ -1829,7 +1829,7 @@ pureRSSI_t get_frequency_correction(freq_t f) // Frequency dependent RSSI c
cv += float_TO_PURE_RSSI(config.drive3_level_offset);
if (ultra && f > 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

@ -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_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}, // 10-?0
{SI4463_RBW_850kHz, 8,8500,NOISE_BASE_CORRECTION + 10}, // 8->10
{SI4463_RBW_600kHz, 5,6000,NOISE_BASE_CORRECTION + 0}, //
{SI4463_RBW_850kHz, 8,8500,NOISE_BASE_CORRECTION + 10},//
#endif
};

@ -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;

Loading…
Cancel
Save

Powered by TurnKey Linux.