我正在尝试构建一个心率监测器,打算将其编码为一个移动应用程序。目前,我正在应用程序中接收数据。以下是数据示例:
但是,我真的很希望能够通过某种高通滤波器去除脉动曲线下方的静态元素。目前,我有以下代码:
//HIGH PASS
//Fetch the next measurement item
j = float.Parse(Encoding.Default.GetString(e.Characteristic.Value));
counter++;
total += j;
if (counter % 5 == 0)
{
avg = total / counter;
total = 0;
counter = 0;
}
if (j < h || h > avg && h >= 0)
{
h = j;
}
else if (h <= 0) //Initially h is 0
{
h = j;
}
float g = j-(h-5); //This is the output
该代码在一定程度上可以正常工作。它的作用是监视数据并设置h = j(如果存在较低的值)(通过这样做,我一直在曲线上找到最低点,然后可以将其删除)。 此外,每5个数据点都会有一个新的平均值。首先要经常检查滤波器的设置是否太高。 (我每秒大约有6个数据点)
代码并非真正理想。主要缺陷之一是,如果我从心率传感器上移开手指(j值明显降低),则意味着该曲线几乎没有HR正弦曲线。
我可以将h=avg;
添加到计数器的if语句中。但这会导致曲线不断地上下波动。
您的建议是什么?我该如何调整?