Fix some case where adaptive_range_gain_limit would not be correctly decreased
This commit is contained in:
parent
9e671a14e4
commit
e0f7a33df4
17
adaptive.c
17
adaptive.c
|
|
@ -464,10 +464,11 @@ static void adaptive_control_update()
|
||||||
if (Modes.adaptive_range_control && !adaptive_range_change_timer) {
|
if (Modes.adaptive_range_control && !adaptive_range_change_timer) {
|
||||||
float available_range = -20 * log10(adaptive_range_smoothed / 65536.0);
|
float available_range = -20 * log10(adaptive_range_smoothed / 65536.0);
|
||||||
// allow the gain limit to increase if this gain setting is acceptable
|
// allow the gain limit to increase if this gain setting is acceptable
|
||||||
// (decreasing the limit is done separately in SCAN_UP / IDLE states when we decide to reduce gain)
|
// (decreasing the limit is done separately depending on the current state as we make slightly different decisions in IDLE
|
||||||
if (available_range >= Modes.adaptive_range_target && current_gain > adaptive_range_gain_limit)
|
// to provide hysteresis)
|
||||||
|
if (available_range >= Modes.adaptive_range_target && current_gain > adaptive_range_gain_limit) {
|
||||||
adaptive_range_gain_limit = current_gain;
|
adaptive_range_gain_limit = current_gain;
|
||||||
|
}
|
||||||
switch (adaptive_range_state) {
|
switch (adaptive_range_state) {
|
||||||
case RANGE_SCAN_UP:
|
case RANGE_SCAN_UP:
|
||||||
if (available_range < Modes.adaptive_range_target) {
|
if (available_range < Modes.adaptive_range_target) {
|
||||||
|
|
@ -476,8 +477,9 @@ static void adaptive_control_update()
|
||||||
gain_down = gain_not_up = true;
|
gain_down = gain_not_up = true;
|
||||||
gain_down_reason = "probing dynamic range gain lower bound";
|
gain_down_reason = "probing dynamic range gain lower bound";
|
||||||
adaptive_range_state = RANGE_SCAN_DOWN;
|
adaptive_range_state = RANGE_SCAN_DOWN;
|
||||||
if (adaptive_range_gain_limit >= current_gain)
|
if (adaptive_range_gain_limit >= current_gain) {
|
||||||
adaptive_range_gain_limit = current_gain - 1;
|
adaptive_range_gain_limit = current_gain - 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -507,6 +509,10 @@ static void adaptive_control_update()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (adaptive_range_gain_limit >= current_gain) {
|
||||||
|
adaptive_range_gain_limit = current_gain - 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (sdrGetGain() <= adaptive_gain_min) {
|
if (sdrGetGain() <= adaptive_gain_min) {
|
||||||
fprintf(stderr, "adaptive: reached lower gain limit, halting dynamic range scan here\n");
|
fprintf(stderr, "adaptive: reached lower gain limit, halting dynamic range scan here\n");
|
||||||
adaptive_range_state = RANGE_SCAN_IDLE;
|
adaptive_range_state = RANGE_SCAN_IDLE;
|
||||||
|
|
@ -526,8 +532,9 @@ static void adaptive_control_update()
|
||||||
if (available_range + adaptive_gain_down_db / 2 < Modes.adaptive_range_target && sdrGetGain() > adaptive_gain_min) {
|
if (available_range + adaptive_gain_down_db / 2 < Modes.adaptive_range_target && sdrGetGain() > adaptive_gain_min) {
|
||||||
fprintf(stderr, "adaptive: available dynamic range (%.1fdB) + half gain step down (%.1fdB) < required dynamic range (%.1fdB), starting downward scan\n",
|
fprintf(stderr, "adaptive: available dynamic range (%.1fdB) + half gain step down (%.1fdB) < required dynamic range (%.1fdB), starting downward scan\n",
|
||||||
available_range, Modes.adaptive_range_target, adaptive_gain_down_db);
|
available_range, Modes.adaptive_range_target, adaptive_gain_down_db);
|
||||||
if (current_gain >= adaptive_range_gain_limit)
|
if (adaptive_range_gain_limit >= current_gain) {
|
||||||
adaptive_range_gain_limit = current_gain - 1;
|
adaptive_range_gain_limit = current_gain - 1;
|
||||||
|
}
|
||||||
adaptive_range_state = RANGE_SCAN_DOWN;
|
adaptive_range_state = RANGE_SCAN_DOWN;
|
||||||
gain_down = gain_not_up = true;
|
gain_down = gain_not_up = true;
|
||||||
gain_down_reason = "dynamic range fell below target value";
|
gain_down_reason = "dynamic range fell below target value";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue