我主要需要一种通用算法,然后我将在我的系统(Arduino板)上移植,但我很高兴能够在其他方向上继续进行研究。
我有一组大约650个样本,覆盖5秒代表一个周期性信号,但有很多噪音;样品来自TAOS230光传感器,信号是基于血流的人体皮肤透明度。
我需要主/主导信号的频率,实际上是人脉冲。 示例与此https://www.dropbox.com/s/fw196r6yf1awhrh/untitled2.bmp
类似这里有一个包含大约5k个样本的转储https://www.dropbox.com/s/efwvyn5oec7ixgg/samples.txt
谢谢,
亚历
答案 0 :(得分:0)
我经常为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 }
它可能有点简单(没有FFT),但通常这些简单的事情很有效。