Corrected subtract and average count bug

tinySA-V4-SI4463
erikkaashoek 5 years ago
parent 8562d8b41c
commit a2ebce9079

@ -1046,6 +1046,7 @@ typedef struct setting
uint32_t rbw_x10; uint32_t rbw_x10;
uint32_t vbw_x100; uint32_t vbw_x100;
uint32_t scan_after_dirty[TRACES_MAX];
float reflevel; float reflevel;
float scale; float scale;

@ -1698,7 +1698,7 @@ static void cell_draw_marker_info(int x0, int y0)
} }
uint16_t color; uint16_t color;
int level = temppeakLevel - get_attenuation() + setting.external_gain; int level = temppeakLevel - get_attenuation() + setting.external_gain;
if ((!setting.normalized[t]) && // Disabled when normalized if ((!setting.normalized[t] && !setting.subtract[t]) && // Disabled when normalized or subtract
((setting.mode == M_LOW && level > -10) ((setting.mode == M_LOW && level > -10)
|| (setting.mode == M_HIGH && level > -29) || (setting.mode == M_HIGH && level > -29)
|| (setting.mode == M_LOW && (markers[i].mtype & M_NOISE) && vbwSteps > 1)) //MAXPEAK increases noise marker, should reduce span. || (setting.mode == M_LOW && (markers[i].mtype & M_NOISE) && vbwSteps > 1)) //MAXPEAK increases noise marker, should reduce span.

@ -245,7 +245,8 @@ void reset_settings(int m)
} }
for (int l=0;l<LIMITS_MAX;l++) for (int l=0;l<LIMITS_MAX;l++)
setting.limits[l].enabled = false; setting.limits[l].enabled = false;
setting.stored[TRACE_STORED] = true; if (in_selftest)
setting.stored[TRACE_STORED] = true;
TRACE_DISABLE(TRACE_STORED_FLAG|TRACE_TEMP_FLAG); TRACE_DISABLE(TRACE_STORED_FLAG|TRACE_TEMP_FLAG);
#ifdef TINYSA4 #ifdef TINYSA4
setting.harmonic = 3; // Automatically used when above ULTRA_MAX_FREQ setting.harmonic = 3; // Automatically used when above ULTRA_MAX_FREQ
@ -995,7 +996,12 @@ void subtract_trace(int t, int f)
setting.subtract[t] = f+1; setting.subtract[t] = f+1;
setting.normalize_level = 0.0; setting.normalize_level = 0.0;
setting.auto_attenuation = false; // Otherwise noise level may move leading to strange measurements setting.auto_attenuation = false; // Otherwise noise level may move leading to strange measurements
for (int i=0;i<POINTS_COUNT;i++)
measured[t][i] -= measured[f][i]; // pre-load AVER
} else } else
for (int i=0;i<POINTS_COUNT;i++)
measured[t][i] += measured[f][i]; // pre-load AVER
setting.subtract[t] = 0; setting.subtract[t] = 0;
} }
@ -1005,6 +1011,7 @@ void toggle_normalize(int t)
if (setting.normalized_trace == -1) { if (setting.normalized_trace == -1) {
copy_trace(t,TRACE_TEMP); copy_trace(t,TRACE_TEMP);
setting.normalized_trace = t; setting.normalized_trace = t;
TRACE_DISABLE(1<<TRACE_TEMP);
} }
setting.normalized[t] = true; setting.normalized[t] = true;
for (int i=0;i<POINTS_COUNT;i++) for (int i=0;i<POINTS_COUNT;i++)
@ -1012,11 +1019,17 @@ void toggle_normalize(int t)
setting.auto_attenuation = false; // Otherwise noise level may move leading to strange measurements setting.auto_attenuation = false; // Otherwise noise level may move leading to strange measurements
setting.normalize_level = 0.0; setting.normalize_level = 0.0;
} else { } else {
if (setting.normalized_trace == t) for (int f=0; f<TRACES_MAX-1;f++) {
if (setting.normalized[f] && (setting.normalized_trace == t || f == t)) {
for (int i=0;i<POINTS_COUNT;i++)
measured[f][i] += measured[TRACE_TEMP][i]; // pre-load AVER
setting.normalized[f] = false;
}
}
if (setting.normalized_trace == t) {
setting.normalized_trace = -1; setting.normalized_trace = -1;
setting.normalized[t] = 0; setting.stored[TRACE_TEMP] = false;
for (int i=0;i<POINTS_COUNT;i++) }
measured[t][i] += measured[TRACE_TEMP][i]; // pre-load AVER
} }
} }
@ -1197,10 +1210,8 @@ void set_average(int t, int v)
&& (v != AV_QUASI) && (v != AV_QUASI)
#endif #endif
); );
if (enable && !IS_TRACES_ENABLED(TRACE_TEMP_FLAG) && setting.normalized_trace == -1) { if (enable) {
enableTracesAtComplete(TRACE_TEMP_FLAG); setting.scan_after_dirty[t] = 0;
setting.stored[TRACE_TEMP] = false;
scan_after_dirty = 0;
} }
// else // else
// TRACE_DISABLE(TRACE_TEMP_FLAG); // TRACE_DISABLE(TRACE_TEMP_FLAG);
@ -2727,7 +2738,8 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) /
old_a = -150; // clear cached level setting old_a = -150; // clear cached level setting
// Initialize HW // Initialize HW
scandirty = true; // This is the first pass with new settings scandirty = true; // This is the first pass with new settings
scan_after_dirty = 0; for (int t=0;t<TRACES_MAX;t++)
setting.scan_after_dirty[t] = 0;
dirty = false; dirty = false;
sweep_elapsed = chVTGetSystemTimeX(); // for measuring accumulated time sweep_elapsed = chVTGetSystemTimeX(); // for measuring accumulated time
// Set for actual time pre calculated value (update after sweep) // Set for actual time pre calculated value (update after sweep)
@ -2773,9 +2785,10 @@ pureRSSI_t perform(bool break_on_operation, int i, freq_t f, int tracking) /
} }
} }
} }
if (i == 0) if (i == 0) {
scan_after_dirty += 1; for (int t=0;t<TRACES_MAX;t++)
setting.scan_after_dirty[t] += 1;
}
// --------------------------------- Pulse at start of low output sweep -------------------------- // --------------------------------- Pulse at start of low output sweep --------------------------
if ((setting.mode == M_GENLOW || (setting.pulse && setting.mode == M_LOW)) && ( setting.frequency_step != 0 || setting.level_sweep != 0.0)) {// pulse high out if ((setting.mode == M_GENLOW || (setting.pulse && setting.mode == M_LOW)) && ( setting.frequency_step != 0 || setting.level_sweep != 0.0)) {// pulse high out
@ -4174,17 +4187,17 @@ static volatile int dummy;
#if 0 #if 0
int old_unit = setting.unit; int old_unit = setting.unit;
setting.unit = U_WATT; // Power averaging should always be done in Watts setting.unit = U_WATT; // Power averaging should always be done in Watts
trace_data[i] = to_dBm((value(trace_data[i])*(scan_after_dirty-1) + value(RSSI_calc)) / scan_after_dirty ); trace_data[i] = to_dBm((value(trace_data[i])*(setting.scan_after_dirty[t]-1) + value(RSSI_calc)) / setting.scan_after_dirty[t] );
setting.unit = old_unit; setting.unit = old_unit;
#else #else
float v = (expf(trace_data[i]*(logf(10.0)/10.0)) * (scan_after_dirty-1) + expf(RSSI_calc * (logf(10.0)/10.0))) / scan_after_dirty; float v = (expf(trace_data[i]*(logf(10.0)/10.0)) * (setting.scan_after_dirty[t]-1) + expf(RSSI_calc * (logf(10.0)/10.0))) / setting.scan_after_dirty[t];
trace_data[i] = logf(v)*(10.0/logf(10.0)); trace_data[i] = logf(v)*(10.0/logf(10.0));
#endif #endif
} }
else else
trace_data[i] = (trace_data[i]*(scan_after_dirty-1) + RSSI_calc)/ scan_after_dirty; trace_data[i] = (trace_data[i]*(setting.scan_after_dirty[t]-1) + RSSI_calc)/ setting.scan_after_dirty[t];
#else #else
trace_data[i] = (trace_data[i]*(scan_after_dirty-1) + RSSI_calc)/ scan_after_dirty; trace_data[i] = (trace_data[i]*(setting.scan_after_dirty[t]-1) + RSSI_calc)/ setting.scan_after_dirty[t];
#endif #endif
break; break;
#ifdef __QUASI_PEAK__ #ifdef __QUASI_PEAK__

@ -1645,8 +1645,9 @@ static UI_FUNCTION_ADV_CALLBACK(menu_traces_acb)
// kp_help_text = "Ref level"; // kp_help_text = "Ref level";
// ui_mode_keypad(KM_REFLEVEL); // ui_mode_keypad(KM_REFLEVEL);
// setting.normalize_level = 20.0; // uistat.value; // setting.normalize_level = 20.0; // uistat.value;
} else } else {
set_auto_reflevel(true); // set_auto_reflevel(true);
}
} }
break; break;
case 3: case 3:

Loading…
Cancel
Save

Powered by TurnKey Linux.