Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实时检测信号中的波形_C#_Algorithm - Fatal编程技术网

C# 实时检测信号中的波形

C# 实时检测信号中的波形,c#,algorithm,C#,Algorithm,我有一个像高斯或半高斯波的信号。我想要的是实时计算波峰发生的时间和波长。例如,我得到了以下信号: 我想检测信号的5个主波峰。它们的最大值、持续时间和值。我如何实时定位它们?我的信号存储在一个C#队列中。为了实时检测波浪,我应该执行什么操作 if (currentValue >threshold1 && (currentValue - previousValue) > 0) { firstCondition = true; } if (currentV

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

我想检测信号的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++;
}
if(currentValue>threshold1&&(currentValue-previousValue)>0)
{
firstCondition=true;
}
如果(currentValue>threshold2&¤tValue0&&firstCondition==true)
{
secondCondition=true;
}
如果(currentValue>(threshold2-0.02)和(currentValue)如果(currentValue>threshold1&¤tValue您需要逐个样本处理样本。如果样本>min-threshold-1,则可能是一个波形开始。然后您启动计数器。每个新样本高于min-threshold-2(略低于min-threshold-1)递增计数器。如果计数器>最小波长,则得到一个波。但您仍在处理。如果采样我投票结束这个问题,因为这是一个算法,您可以使用平滑来简化搜索(框平滑将是最简单的).之后的事情应该很简单。我在第一步做的是将信号与参考波交叉相关。因此,我得到了作为信号的互相关输出,这是一个平滑的信号。然而,在平滑信号后,我必须执行一些试探法,以获得我想要的波。你能详细说明一下吗e更多。例如,min_threshold-1可以是0.4(为什么min-threshold-2比min-1低?)我的信号取0-1的值。你能给我一个简单的例子吗?好的,这意味着我的信号必须从第一个阈值开始计数,然后从第二个阈值开始计数。如果计数器的波长大于第三个阈值,我得到一个窗口。我说得对吗?我该怎么做呢e、 为了检查这些条件是否满足,我必须创建标志吗?为了检查这两个阈值,我必须有嵌套的if语句,以便同时检查这些条件是否满足?例如,实时创建一个可以读取样本的线程。它将在无限循环GetMextSample()中执行。如果没有新样本,它只是等待。如果新样本到达,它会检查此样本是否高于或低于阈值等。此线程应该有状态,它应该知道它是否在内波。如果它在内波,而新样本低于阈值,那么我们有了新波,它可以引发事件NewWaveFound。因为我是一个现在不工作,有点忙。我的信号是实时更新的。因为我不熟悉c#中的线程和基于事件的编码,我所做的只是添加了4个带有所需条件的if语句和4个标志,我将它们从一个if传递到另一个if,以检查if语句是否按特定顺序发生。(我感谢您的帮助。)(尤其是因为你在工作)。