This commit is contained in:
awe
2026-04-27 20:15:51 +03:00
parent b9559cbe8c
commit 1eb2505e37

View File

@ -1236,6 +1236,7 @@ struct Do1NoiseSubtractState {
std::array<uint32_t, 2> step_count {};
std::array<double, 2> last_high_avg {};
std::array<bool, 2> last_high_valid {};
bool high_baseline_pending = false;
bool step_level_initialized = false;
bool step_di1_high = false;
uint16_t next_index = 1;
@ -1254,6 +1255,7 @@ struct Do1NoiseSubtractState {
clear_step();
last_high_avg = {};
last_high_valid = {};
high_baseline_pending = false;
step_level_initialized = false;
step_di1_high = false;
next_index = 1;
@ -1292,13 +1294,23 @@ struct Do1NoiseSubtractState {
last_high_valid[lch] = true;
}
bool has_last_high(uint32_t lch) const {
if (lch >= last_high_valid.size()) {
bool has_pending_high(uint32_t channel_count) const {
if (!high_baseline_pending) {
return false;
}
return last_high_valid[lch];
if (!last_high_valid[0]) {
return false;
}
if ((channel_count > 1U) && !last_high_valid[1]) {
return false;
}
return true;
}
void mark_high_pending() { high_baseline_pending = true; }
void consume_pending_high() { high_baseline_pending = false; }
double last_high(uint32_t lch) const {
if (lch >= last_high_avg.size()) {
return 0.0;
@ -1870,13 +1882,13 @@ int run(const Config& cfg) {
if (cfg.channel_count > 1U) {
tty_do1_noise_state.update_last_high(1U, ch2_avg);
}
tty_do1_noise_state.mark_high_pending();
tty_do1_noise_state.finish_step();
return;
}
if (!tty_do1_noise_state.has_last_high(0U) ||
((cfg.channel_count > 1U) && !tty_do1_noise_state.has_last_high(1U))) {
// Skip LOW output until the previous HIGH step baseline is available.
if (!tty_do1_noise_state.has_pending_high(cfg.channel_count)) {
// Skip LOW output unless a preceding HIGH step baseline is pending.
tty_do1_noise_state.finish_step();
return;
}
@ -1895,6 +1907,7 @@ int run(const Config& cfg) {
static_cast<uint16_t>(pack_raw_code_to_int16(ch2_corrected)));
++tty_do1_noise_state.next_index;
++packet_avg_steps;
tty_do1_noise_state.consume_pending_high();
tty_do1_noise_state.finish_step();
};