最近買了一個(gè)心率傳感器,MAX30100但是這個(gè)傳感器讀出來的是原始數(shù)據(jù),需要大量的處理,所以就網(wǎng)上找資料,找到很多資料;
先說說這個(gè)測(cè)量心跳和血氧的原理,大概就是,使用特定紅光發(fā)射一定波長(zhǎng)的光,然后使用接收管接收,接收都是16位原始數(shù)據(jù);
因?yàn)檠汉趿繉?duì)發(fā)的紅光比較敏感,所以就可以靠,接收反射光的強(qiáng)弱來判定血氧含量;
最終的接收數(shù)據(jù)就是一個(gè)幾乎直流的信號(hào)加上一個(gè)很小的脈沖信號(hào),那個(gè)脈沖信號(hào)就是心率信號(hào)了,所以面對(duì)的問題就是怎么把脈沖信號(hào)提取出來;
重點(diǎn)就在這里;
網(wǎng)上很多人使用STM單片機(jī)做這個(gè),使用FFT,還有很多階濾波算法,我想是用51單片機(jī)來弄,但是就一個(gè)1024階FFT就讓這個(gè)單片機(jī)望而卻步了,占用內(nèi)存都19K怎么都跑不動(dòng)啊 ,
;
最后就是用了一階RC濾波就搞定了,
不過在寫RC濾波的時(shí)候出現(xiàn)一個(gè)插曲,就是網(wǎng)上找的資料10個(gè)9個(gè)都是錯(cuò)的,
這個(gè)是最后使用RC濾波,然后再減去自身得到的心跳數(shù)據(jù),所以為什么那些人要FFT那么麻煩呢 ;
這個(gè)是最終的效果圖;