Алгоритм маскировки времени, когда сигнал выше порога
У меня есть сигнал от датчика в реальном времени. Мне нужна логика для реализации времени маскировки, когда сигнал превышает пороговое значение. Как показано ниже:
Здесь сигнал (синий) пересекает порог. И мне нужно замаскировать любые проверки порога на период (время маскировки). (Таким образом я могу обнаружить только положительный импульс, аналогично у меня есть еще одна проверка на отрицательный импульс)
См. Код ниже:
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();
}