我主要需要一个通用的算法,之后我会将它移植到我的系统( Arduino板)上,但我很高兴得到一个提示,以继续在其他方向的研究;
我有一组大约650个样本,覆盖了5秒,代表了一个周期性的信号,但有相当多的噪声;这些样本来自TAOS230光传感器,信号是基于血液流动的人体皮肤的透明度。
我需要主/主信号的频率,它实际上是人的脉搏。示例与此https://www.dropbox.com/s/fw196r6yf1awhrh/untitled2.bmp类似
这里有一个转储,里面有大约5k个样本https://www.dropbox.com/s/efwvyn5oec7ixgg/samples.txt
谢谢,
亚历克斯
发布于 2012-12-04 02:06:18
我经常为arduino做的一件事是使用一个函数对输入数据求平均值,如下所示
newx包含新的样本数据
x = (9 * x +newx ) /10这会抑制信号,也请注意,焊接不良也与高噪声水平有关,也要检查这一点。
下一步将是定义实际平均值,然后计算您在上面/下面检索频率的次数,我将通过定义下面的-n或上面的+n来实现这一点。这是一个有点模糊的实现,但会工作的。(另一方面,如果你不使用与平均值的距离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 }这可能有点简单(没有快速傅立叶变换),但它通常是那么简单的事情工作得很好。
https://stackoverflow.com/questions/10970400
复制相似问题