实时检测信号中的波

时间:2015-07-10 10:26:18

标签: c# algorithm

我有一个波浪像高斯人或半高斯人的信号。我想要的是计算波峰发生时的实时和波长。例如,我收到了以下信号:

enter image description here

我想检测信号的5个主波峰。他们的最大值,持续时间和价值观。我怎样才能实时找到它们?我的信号存储在C#队列中。为了实时检测波浪,我应该怎么做?

if (currentValue >threshold1 && (currentValue - previousValue) > 0)
{
       firstCondition = true; 
}
if (currentValue > threshold2  && currentValue < threshold2  && (currentValue - previousValue) > 0 && firstCondition == true)
{
       secondCondition = true;
}
if (currentValue > (threshold2-0.02)   && (currentValue ) < threshold2 && (currentValue - previousValue) < 0 && firstCondition == true && secondCondition == true)
{
       thirdCondition = true;
       secondCondition = false;
}
if (currentValue > threshold1 && currentValue <threshold1 && (currentValue - previousValue) < 0 && thirdCondition == true)
{
      fourthCondition = true;
      firstCondition = false;
      secondCondition = false;
      thirdCondition = false;
      counter++;
}

我的代码似乎正在执行基本检测。然而,似乎我正在失去一些波浪。我猜这是基于阈值。我的第二个问题是如何保持与波的开始和结束相关的时间戳?

1 个答案:

答案 0 :(得分:1)

您需要按样品处理样品。如果样品> min-threshold-1,它可能是wave begininig。然后你开始反击。高于min-threshold-2(低于min-threshold-1)的每个新样本递增计数器。如果反击>最小波长,然后你得到一个波。但你还在处理。如果样品&lt; min-threshold-2,然后波结束。然后一遍又一遍地重复它。