From 1eb2505e37513df48262a32d381864f2bb09da5b Mon Sep 17 00:00:00 2001 From: awe Date: Mon, 27 Apr 2026 20:15:51 +0300 Subject: [PATCH] fix --- main.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/main.cpp b/main.cpp index 219ea10..0d005b5 100644 --- a/main.cpp +++ b/main.cpp @@ -1236,6 +1236,7 @@ struct Do1NoiseSubtractState { std::array step_count {}; std::array last_high_avg {}; std::array 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(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(); };