fix
This commit is contained in:
25
main.cpp
25
main.cpp
@ -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,12 +1294,22 @@ 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()) {
|
||||
@ -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();
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user