Ref marker value bug solved

Removed_REF_marker
erikkaashoek 5 years ago
parent 1baebddaf1
commit c307abaf55

@ -5,7 +5,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-644081821413706" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1672673687719504" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
@ -17,7 +17,7 @@
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-644081821413706" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-1672673687719504" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>

@ -1012,10 +1012,10 @@ config_t config = {
.frequency_IF2 = 0,
.ultra_threshold = 750000000,
.low_level_offset = 100.0, // Uncalibrated
.high_level_offset = 100.0, // Uncalibrated
.high_level_offset = 100, // Uncalibrated
.lna_level_offset = 100,
.low_level_output_offset = 100.0, // Uncalibrated
.high_level_output_offset = 100.0, // Uncalibrated
.high_level_output_offset = 0, // Uncalibrated, but checking code is not yet present
.correction_frequency =
{
{ 10000, 100000, 300000, 1000000, 30000000, 500000000, 750000000, 750000010, 1000000000, 1500000000, 1520000000, 2000000000, 2500000000, 3000000000, 3500000000, 4000000000, 4500000000, 5000000000, 5500000000, 6000000000 },
@ -1986,7 +1986,7 @@ VNA_SHELL_FUNCTION(cmd_marker)
if (argc == 0) {
for (t = 0; t < MARKERS_MAX; t++) {
if (markers[t].enabled) {
shell_printf("%d %d %D %f\r\n", t+1, markers[t].index, markers[t].frequency, value(actual_t[markers[t].index]));
shell_printf("%d %d %D %f\r\n", t+1, markers[t].index, markers[t].frequency, marker_to_value(t));
}
}
return;
@ -2003,7 +2003,7 @@ VNA_SHELL_FUNCTION(cmd_marker)
goto usage;
if (argc == 1) {
display_marker:
shell_printf("%d %d %D %.2f\r\n", t+1, markers[t].index, markers[t].frequency, value(actual_t[markers[t].index]));
shell_printf("%d %d %D %.2f\r\n", t+1, markers[t].index, markers[t].frequency, marker_to_value(t));
active_marker = t;
// select active marker
markers[t].enabled = TRUE;

@ -396,6 +396,8 @@ extern float low_out_offset(void);
extern float high_out_offset(void);
#define LOW_OUT_OFFSET low_out_offset()
#define HIGH_OUT_OFFSET high_out_offset()
extern bool debug_avoid;
extern void toggle_debug_avoid(void);
#else
void set_10mhz(freq_t);
#define LOW_OUT_OFFSET config.low_level_output_offset

@ -292,6 +292,17 @@ index_to_value(const int i)
return(value(actual_t[i]));
}
float
marker_to_value(const int i)
{
float *ref_marker_levels;
if (markers[i].mtype & M_STORED )
ref_marker_levels = stored_t;
else
ref_marker_levels = actual_t;
return(value(ref_marker_levels[markers[i].index]));
}
// Function for convert to different type of values from dBm
// Replaced some equal functions and use recalculated constants:
// powf(10,x) = expf(x * logf(10))
@ -1342,11 +1353,11 @@ static void trace_print_value_string( // Only used at one place
if (mtype & M_DELTA) {
*ptr2++ = S_DELTA[0];
unit_index+= 5;
int ridx = markers[ri].index;
freq_t ref_freq = markers[ri].frequency;
int ridx = markers[ri].index;
if (ridx > idx) {freq = ref_freq - freq; idx = ridx - idx; *ptr2++ = '-';}
else {freq = freq - ref_freq; idx = idx - ridx; *ptr2++ = '+';}
v-= value(coeff[ridx]);
v-= marker_to_value(ri);
} else
freq += (setting.frequency_offset - FREQUENCY_SHIFT);
@ -1417,7 +1428,7 @@ static void cell_draw_marker_info(int x0, int y0)
#ifdef AM_IN_VOLT
int old_unit = setting.unit;
setting.unit = U_VOLT;
float level = (index_to_value(markers[1].index) + index_to_value(markers[2].index))/2 / index_to_value(markers[0].index);
float level = (marker_to_value(1) + marker_to_value(2))/2 / marker_to_value(0);
setting.unit = old_unit;
int depth = (int)( level * 2.0 * 80.0) + 20;
#else
@ -1448,13 +1459,13 @@ static void cell_draw_marker_info(int x0, int y0)
} else if (setting.measurement == M_THD && markers[0].enabled && (markers[0].index << 5) > sweep_points ) {
int old_unit = setting.unit;
setting.unit = U_WATT;
float p = index_to_value(markers[0].index);
float p = marker_to_value(0);
int h_i = 2;
freq_t f = markers[0].frequency;
float h = 0.0;
while (f * h_i < frequencies[sweep_points-1]) {
if (search_maximum(1, f*h_i, 4*h_i) ) // use marker 1 for searching harmonics
h += index_to_value(markers[1].index);
h += marker_to_value(1);
h_i++;
}
float thd = 100.0 * sqrtf(h/p);
@ -1468,10 +1479,10 @@ static void cell_draw_marker_info(int x0, int y0)
}
} else
if (i >= 2 && setting.measurement == M_OIP3 && markers[2].enabled && markers[3].enabled) {
float il = index_to_value(markers[2].index);
float ir = index_to_value(markers[3].index);
float sl = index_to_value(markers[0].index);
float sr = index_to_value(markers[1].index);
float il = marker_to_value(2);
float ir = marker_to_value(3);
float sl = marker_to_value(0);
float sr = marker_to_value(1);
float ip = sl+ (sr - il)/2;
j = 2;

@ -37,6 +37,7 @@
// uint8_t dirty = true;
uint8_t scandirty = true;
bool debug_avoid = false;
bool debug_avoid_second = false;
setting_t setting;
freq_t frequencies[POINTS_COUNT];
@ -511,9 +512,11 @@ void toggle_debug_avoid(void)
if (debug_avoid) {
setting.show_stored = true;
trace[TRACE_STORED].enabled = true;
trace[TRACE_TEMP].enabled = true;
} else {
setting.show_stored = false;
trace[TRACE_STORED].enabled = false;
trace[TRACE_TEMP].enabled = false;
}
dirty = true;
}
@ -2182,6 +2185,8 @@ static freq_t spur_table[] = // Frequencies to
487541650, // OK This is linked to the MODULO of the ADF4350
650687000, // OK
731780000, // OK
977400000,
977400000*2,
#else
// 580000, // 433.8 MHz table
// 880000, //?
@ -2264,18 +2269,20 @@ int binary_search(freq_t f)
static const uint8_t spur_div[] = {4, 3, 3, 2, 3, 4};
static const uint8_t spur_mul[] = {1, 1, 1, 1, 2, 3};
#define IF_OFFSET 468750*4 //
void fill_spur_table(void)
{
for (uint8_t i=0; i < sizeof(spur_div)/sizeof(uint8_t); i++)
uint8_t i;
freq_t corr_IF;
for (i=0; i < sizeof(spur_div)/sizeof(uint8_t); i++)
{
freq_t corr_IF;
if (!setting.auto_IF)
corr_IF = setting.frequency_IF;
else {
corr_IF = config.frequency_IF1 + STATIC_DEFAULT_SPUR_OFFSET/2 - DEFAULT_SPUR_OFFSET/2;
setting.frequency_IF = corr_IF;
}
if (!setting.auto_IF)
corr_IF = setting.frequency_IF;
else {
corr_IF = config.frequency_IF1 + STATIC_DEFAULT_SPUR_OFFSET/2 - DEFAULT_SPUR_OFFSET/2;
setting.frequency_IF = corr_IF;
}
if (i != 4)
corr_IF -= IF_OFFSET;
else
@ -2293,6 +2300,13 @@ void fill_spur_table(void)
else
spur_table[i] = target;
}
if (!setting.auto_IF)
corr_IF = setting.frequency_IF;
else {
corr_IF = config.frequency_IF1 + STATIC_DEFAULT_SPUR_OFFSET/2 - DEFAULT_SPUR_OFFSET/2;
}
spur_table[i++] = corr_IF - IF_OFFSET*3/2;
spur_table[i++] = corr_IF*2 - IF_OFFSET;
}
#endif
@ -2334,8 +2348,9 @@ int avoid_spur(freq_t f) // find if this frequency should be a
else
{
#ifdef TINYSA4
fmin = f - spur_gate;
fplus = f + spur_gate;
int w = (m >= sizeof(spur_div)/sizeof(uint8_t) ? 3 : 1);
fmin = f - spur_gate*w;
fplus = f + spur_gate*w;
if (spur_table[m] < fmin || spur_table[m] > fplus)
return F_NEAR_SPUR; // index is m
else
@ -2803,15 +2818,26 @@ modulation_again:
if (debug_avoid){ // For debugging the spur avoidance control
stored_t[i] = -90.0; // Display when to do spur shift in the stored trace
}
int local_vbw_steps = vbwSteps;
freq_t local_IF;
#ifdef TINYSA4
local_IF = config.frequency_IF1 + STATIC_DEFAULT_SPUR_OFFSET/2;
if (setting.mode == M_LOW && ultra &&
((f < ULTRA_MAX_FREQ && f > MAX_LO_FREQ - local_IF) ||
( f > config.ultra_threshold && f < MIN_BELOW_LO + local_IF))
) {
local_vbw_steps *= 2;
}
#endif
int t = 0;
do {
freq_t lf = f;
if (vbwSteps > 1) { // Calculate sub steps
if (local_vbw_steps > 1) { // Calculate sub steps
#ifdef TINYSA4
int offs_div10 = (t - (vbwSteps >> 1)) * 100; // steps of x10 * settings.
if ((vbwSteps & 1) == 0) // Uneven steps, center
int offs_div10 = (t - (local_vbw_steps >> 1)) * 100; // steps of x10 * settings.
if ((local_vbw_steps & 1) == 0) // Uneven steps, center
offs_div10+= 50; // Even, shift half step
int offs = (offs_div10 * (int32_t)setting.vbw_x10 )/ vbwSteps;
int offs = (offs_div10 * (int32_t)setting.vbw_x10 )/ local_vbw_steps;
// if (setting.step_delay_mode == SD_PRECISE)
// offs>>=1; // steps of a quarter rbw
// if (lf > -offs) // No negative frequencies
@ -2820,8 +2846,8 @@ modulation_again:
// if (lf > MAX_LO_FREQ)
// lf = 0;
#else
int offs_div10 = (t - (vbwSteps >> 1)) * 500 / 10; // steps of half the rbw
if ((vbwSteps & 1) == 0) // Uneven steps, center
int offs_div10 = (t - (local_vbw_steps >> 1)) * 500 / 10; // steps of half the rbw
if ((local_vbw_steps & 1) == 0) // Uneven steps, center
offs_div10+= 250 / 10; // Even, shift half step
int offs = offs_div10 * actual_rbw_x10;
if (setting.step_delay_mode == SD_PRECISE)
@ -2834,7 +2860,6 @@ modulation_again:
if (/* MODE_INPUT(setting.mode) && */ i > 0 && FREQ_IS_CW()) // In input mode in zero span mode after first setting of the LO's
goto skip_LO_setting; // No more LO changes required, save some time and jump over the code
freq_t local_IF;
#ifdef __SPUR__
spur_second_pass = false;
again: // Spur reduction jumps to here for second measurement
@ -2902,25 +2927,39 @@ again: // Spur redu
#endif
)
{ // below/above IF
if ((debug_avoid && debug_avoid_second) || spur_second_pass) {
setting.below_IF = S_AUTO_ON;
#ifdef TINYSA4
local_IF = local_IF - DEFAULT_SPUR_OFFSET/4; // shift a bit to avoid multiple IF spurs
local_IF = local_IF + DEFAULT_SPUR_OFFSET/4; // apply IF spur shift
#endif
if (spur_second_pass)
setting.below_IF = S_AUTO_ON;
else
} else {
setting.below_IF = S_AUTO_OFF; // use below IF in second pass
#ifdef TINYSA4
local_IF = local_IF - DEFAULT_SPUR_OFFSET/4; // apply IF spur shift
#endif
}
}
else
else if (setting.auto_IF)
{
#ifdef TINYSA4
LO_shifting = true;
#endif
if (spur_second_pass) {
if ((debug_avoid && debug_avoid_second) || spur_second_pass) {
#ifdef TINYSA4
local_IF = local_IF + DEFAULT_SPUR_OFFSET/2; // apply IF spur shift
if (config.frequency_IF1-6500000 < f && f < config.frequency_IF1+500000 ) {
local_IF = local_IF + DEFAULT_SPUR_OFFSET*3/4; // apply IF spur shift
if (debug_avoid)
stored_t[i] = -90.0; // Display when to do spur shift in the stored trace
} else {
local_IF = local_IF + DEFAULT_SPUR_OFFSET/2; // apply IF spur shift
}
LO_shifted = true;
} else {
local_IF = local_IF - DEFAULT_SPUR_OFFSET/2; // apply IF spur shift
if (config.frequency_IF1-6500000 < f && f < config.frequency_IF1+500000) {
local_IF = local_IF - DEFAULT_SPUR_OFFSET*3/4; // apply IF spur shift
} else {
local_IF = local_IF - DEFAULT_SPUR_OFFSET/2; // apply IF spur shift
}
}
#else
local_IF = local_IF + 500000; // apply IF spur shift
@ -2930,12 +2969,31 @@ again: // Spur redu
} else {
int spur_flag = avoid_spur(lf);
#ifdef TINYSA4
if(spur_flag) { // check if alternate IF is needed to avoid spur.
if (debug_avoid) {
if (spur_flag == F_NEAR_SPUR) {
stored_t[i] = -70.0; // Display when to do spur shift in the stored trace
local_IF -= DEFAULT_SPUR_OFFSET/2;
if (debug_avoid){ // For debugging the spur avoidance control
stored_t[i] = -70.0; // Display when to do spur shift in the stored trace
} else if (spur_flag == F_AT_SPUR){
stored_t[i] = -60.0;
// Display when to do spur shift in the stored trace
if (debug_avoid_second) {
if (S_IS_AUTO(setting.below_IF) && lf < local_IF/2 - 2000000) {
setting.below_IF = S_AUTO_ON;
local_IF = local_IF; // No spure removal and no spur, center in IF
} else if (setting.auto_IF) {
local_IF = local_IF + DEFAULT_SPUR_OFFSET/2;
// if (actual_rbw_x10 == 6000 )
// local_IF = local_IF + 50000;
LO_shifted = true;
}
}
} else {
stored_t[i] = -90.0; // Display when to do spur shift in the stored trace
}
} else
if(spur_flag) { // check if alternate IF is needed to avoid spur.
if (spur_flag == F_NEAR_SPUR) {
local_IF -= DEFAULT_SPUR_OFFSET/2;
} else {
if (S_IS_AUTO(setting.below_IF) && lf < local_IF/2 - 2000000) {
setting.below_IF = S_AUTO_ON;
@ -2946,9 +3004,6 @@ again: // Spur redu
// local_IF = local_IF + 50000;
LO_shifted = true;
}
if (debug_avoid){ // For debugging the spur avoidance control
stored_t[i] = -60.0; // Display when to do spur shift in the stored trace
}
}
}
#else
@ -3358,7 +3413,7 @@ again: // Spur redu
// }
#ifdef __SPUR__
static pureRSSI_t spur_RSSI = -1; // Initialization only to avoid warning.
if (setting.mode == M_LOW && S_STATE(setting.spur_removal)) {
if (setting.mode == M_LOW && S_STATE(setting.spur_removal) && !debug_avoid) {
if (!spur_second_pass) { // If first spur pass
spur_RSSI = pureRSSI; // remember measure RSSI
spur_second_pass = true;
@ -3383,7 +3438,7 @@ again: // Spur redu
t++; // one subscan done
if (break_on_operation && operation_requested) // break subscanning if requested
break; // abort
} while (t < vbwSteps); // till all sub steps done
} while (t < local_vbw_steps); // till all sub steps done
#ifdef TINYSA4
if (old_CFGR != orig_CFGR) {
old_CFGR = orig_CFGR;
@ -3476,6 +3531,9 @@ sweep_again: // stay in sweep loop when output mo
// ------------------------- start sweep loop -----------------------------------
for (int i = 0; i < sweep_points; i++) {
debug_avoid_second = false;
debug_avoid_label:
debug_avoid_second = debug_avoid_second;
// --------------------- measure -------------------------
pureRSSI_t rssi = perform(break_on_operation, i, frequencies[i], setting.tracking); // Measure RSSI for one of the frequencies
#ifdef TINYSA4
@ -3551,6 +3609,16 @@ sweep_again: // stay in sweep loop when output mo
ili9341_set_background(LCD_BG_COLOR);
ili9341_fill(OFFSETX+pos, CHART_BOTTOM+1, WIDTH-pos, 1);
}
// ----------------------- debug avoid --------------------------------
if (debug_avoid) {
if (!debug_avoid_second) {
temp_t[i] = RSSI;
debug_avoid_second = true;
goto debug_avoid_label;
} else {
debug_avoid_second = false;
}
}
// ------------------------ do all RSSI calculations from CALC menu -------------------

@ -913,6 +913,19 @@ static UI_FUNCTION_ADV_CALLBACK(menu_ultra_acb)
static UI_FUNCTION_ADV_CALLBACK(menu_debug_avoid_acb)
{
(void)data;
(void)item;
if (b){
b->icon = debug_avoid == 0 ? BUTTON_ICON_NOCHECK : BUTTON_ICON_CHECK;
return;
}
toggle_debug_avoid();
// menu_move_back();
ui_mode_normal();
}
static UI_FUNCTION_ADV_CALLBACK(menu_debug_freq_acb)
{
(void)data;
@ -2092,6 +2105,7 @@ static const menuitem_t menu_settings3[] =
static const menuitem_t menu_settings4[] =
{
{ MT_ADV_CALLBACK, 0, "DEBUG\nFREQ", menu_debug_freq_acb},
{ MT_ADV_CALLBACK, 0, "DEBUG\nAVOID", menu_debug_avoid_acb},
#if 1 // only used during development
{ MT_KEYPAD, KM_COR_AM, "COR\nAM", "Enter AM modulation correction"},
{ MT_KEYPAD, KM_COR_WFM, "COR\nWFM", "Enter WFM modulation correction"},

Loading…
Cancel
Save

Powered by TurnKey Linux.