Алгоритм маскировки времени, когда сигнал выше порога

У меня есть сигнал от датчика в реальном времени. Мне нужна логика для реализации времени маскировки, когда сигнал превышает пороговое значение. Как показано ниже:

Здесь сигнал (синий) пересекает порог. И мне нужно замаскировать любые проверки порога на период (время маскировки). (Таким образом я могу обнаружить только положительный импульс, аналогично у меня есть еще одна проверка на отрицательный импульс)

См. Код ниже:

static QTime time(QTime::currentTime());
// calculate two new data points:
double key = time.elapsed()/1000.0; // time elapsed since start of demo, in seconds
static double lastKey;

if(a_vertical> onThreshold && key-lastKey >0.2) // is this check correct for masking time?
    {
        ui->rdo_btn_vertical->show();
        ui->rdo_btn_vertical->setStyleSheet(StyleSheetOn1);
        lastKey = key;
    }
    else
    {
        ui->rdo_btn_vertical->setStyleSheet(StyleSheetOff1);
    }


Я не уверен, что выражение внутри оператора IF является правильным способом реализации времени маскировки. Любые мысли / предложения приветствуются.

РЕДАКТИРОВАТЬ

Время маскировки: это период времени, замаскированный для любой проверки порога. Это позволяет различать положительный и отрицательный пульс. См. Ниже, во время положительного импульса есть отрицательная сторона, но она не должна обнаруживаться как "отрицательный импульс". Вот почему я применил время маскировки.

1 ответ

Решение

Вы можете определить 2 сигнальных слота, которые позаботятся о запуске, остановке истекшего таймера, к счастью, у Qt есть класс, делающий это за вас, прочтите здесь документ и будьте в курсе возможных переполнений и, если необходимо, установитеQElapsedTimer::MonotonicClock

QElapsedTimer timer;
timer.start();
slowOperation1();
qDebug() << "The slow operation took" << timer.elapsed() << "milliseconds";

и запускать сигналы

if(sensorSignal>THRESHOLD_K)
    emit startTimer();
else
    emit stopTimer();
    
void startTimer()
{   
    timer.start();
}

void stopTimer()
{

    timer.elapsed();
}
Другие вопросы по тегам