1

我主要需要一个通用算法,然后我将其移植到我的系统(Arduino 板)上,但我很高兴得到继续研究其他方向的提示;

我有一组大约 650 个样本,覆盖 5 秒,代表一个周期信号,但噪声很大;样本来自 TAOS230 光传感器,信号是基于血流的人体皮肤透明度。

我需要主要/主要信号的频率,这实际上是人类的脉搏。示例看起来类似于此https://www.dropbox.com/s/fw196r6yf1awhrh/untitled2.bmp

在这里,您有大约 5k 个样本的转储https://www.dropbox.com/s/efwvyn5oec7ixgg/samples.txt

谢谢,

亚历克斯

4

1 回答 1

0

我经常为 arduino 做的事情是使用一个函数来平均输入数据,比如

newx 包含新的样本数据

 x = (9 * x +newx ) /10

这会抑制信号,还要注意焊接不良也与高噪声水平有关,也要检查一下。

下一步是定义实际平均值,然后您可能会计算出高于/低于多少次以检索频率,我会通过将其定义为 -n below 或 +n above 来做到这一点。这是一个有点模糊的实现,但会起作用。(否则,如果你不使用与平均值的距离 n,你会在平均值中得到许多误报。

使函数只计算伪代码中的状态变化:

#// counting state changes
if ( state > avg_state + n ) and (oldstate = -1)  {statecount++ : oldstate = +1 } 
if ( state < avg_state - n ) and (oldstate = +1)  {statecount-- : oldstate = -1 }

它可能有点简单(没有 FFT),但通常简单的事情效果很好。

于 2012-12-03T18:06:17.580 回答