我有一个波浪像高斯人或半高斯人的信号。我想要的是计算波峰发生时的实时和波长。例如,我收到了以下信号:
我想检测信号的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++;
}
我的代码似乎正在执行基本检测。然而,似乎我正在失去一些波浪。我猜这是基于阈值。我的第二个问题是如何保持与波的开始和结束相关的时间戳?
答案 0 :(得分:1)
您需要按样品处理样品。如果样品> min-threshold-1,它可能是wave begininig。然后你开始反击。高于min-threshold-2(低于min-threshold-1)的每个新样本递增计数器。如果反击>最小波长,然后你得到一个波。但你还在处理。如果样品&lt; min-threshold-2,然后波结束。然后一遍又一遍地重复它。