基于MATLAB设计IIR滤波器之BH1790GLC心率传感器.doc

上传人:白大夫 文档编号:3411110 上传时间:2019-08-22 格式:DOC 页数:4 大小:20KB
返回 下载 相关 举报
基于MATLAB设计IIR滤波器之BH1790GLC心率传感器.doc_第1页
第1页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《基于MATLAB设计IIR滤波器之BH1790GLC心率传感器.doc》由会员分享,可在线阅读,更多相关《基于MATLAB设计IIR滤波器之BH1790GLC心率传感器.doc(4页珍藏版)》请在三一文库上搜索。

1、基于MATLAB设计IIR滤波器之BH1790GLC心率传感器 一个很有意思的传感器,BH1790GLC心率传感器,这个传感器是ROHM生产的,一个日本的厂家。其他的不说,就说说这个传感器吧。作为一名硬件开发设计人员,我拿到这个模块第一反映是去官网下载其数据手册,通过数据手册去了解这个传感器的特性。当有一个脉搏信号传递过来时,会造成血管的体积发生变化,如上图所示。传感器就通过采集血管的变化来检测脉搏。整个传感器框图如下:传感器需要外接两个绿色的LED灯珠,这个LED普通的还真不行,模块使用的是SML-M13MT这个型号,它与普通的LED的区别是,其通过反射的方式,将光强在一定范围内实现等效分布

2、。芯片内部有绿色LED的驱动电路,另外在传感器的外部,有一组IRCUT滤波器,将外部的其它光线以及红外光线滤除,让绿光通过IRCUT,进入ADC去采集。最后数据通过IIC传输出来。整个传感器也没有几个用到几个器件,但是我查了,这个模块还真不便宜,网上报价是在100左右。模块的电路如下:其他参数就不多少了,详情可以查看传感器的数据手册,整个传感器的寄存器也没有几个,除了ID寄存器外,剩下就是控制寄存器,采集到的数据也是保存到DATOUT_LEDON 、DATOUT_OFF这两组数据寄存器中。还在手册上有测量控制说明,不至于让我感到太迷茫:按照这个时序,我对0x41 0x43寄存器进行了如下设置。

3、最后按照时序要求就,读出DATOUT_LEDON 、DATOUT_OFF我将读出的DATOUT_LEDON 、DATOUT_OFF值通过串口打印出来,并画了线。下图为我手指没有放上去的时候的数据波形:DATAOUT_LEDOFF(红色)、DATAOUT_LEDON(蓝色)的值几乎保持稳定,在室内数据处在260左右。放上手指,波形马上发生了变化。DATAOUT_LEDOFF(红色)马上下降到20附近、而DATAOUT_LEDON(蓝色)有了很明显跳动,跳动的幅度很小,而且DATAOUT_LEDON(蓝色)值一直上升。这样的一个波形,当然如何去提取出脉搏数据?又需要一个怎样的算法?IIR滤波器应该

4、是比较适合的一种方案。说到IIR滤波器,那就不得不说FIR滤波器,这两个都是一种数字的线性滤波器,其两者最大的区别是:1、在相同的技术指标下, IIR滤波器由于存在着输出对输入的反馈,因而可用比FIR滤波器需要更少的参数和资源。2、FIR滤波器可得到严格的线性相位, 而IIR滤波器则做不到这一点。3、IIR滤波器可以设计成标准低通、高通、带通、带阻、全通滤波器,而FIR滤波器则要灵活得多,可以设计出理想正交变换器、理想微分器、线性调频器等所以在我们的应用中,考虑IIR滤波器就可以了。相位移位对我来说,没有任何问题。针对上图中,当手指按下时的波形,需要对这个波形进行低通+高通的滤波。人体的脉搏正

5、常范围在60-100之间。考虑到极端情况下,所以设置一个3.5HZ的低通滤波器和0.5HZ的高通滤波器,只需要截取0.5HZ - 3.5HZ范围的信号。先说说IIR滤波器,我这里选择的是直接I型IIR滤波器,其基于二阶Biquad级联的方式来实现的。每个Biquad由一个二阶的滤波器组成:yn = b0 * xn + b1 * xn-1 + b2 *xn-2 + a1 * yn-1 + a2 * yn-2直接 I 型算法每个阶段需要 5 个系数和 4 个状态变量,如下图。xn就是输入变量,yn就是基于IIR滤波之后的输出值。按照这样的公式,就是可以实现一个1阶的IIR滤波器,如果你在这个滤波器

6、后面多加几个这样的滤波器,就可以实现多阶的IIR滤波器。公式有了,但是上面公式中的b0 、b1、 b2、a1、a2这些参数当怎么确定?答案是:使用MATLAB使用fdatool打开滤波器设计工具箱设置滤波器参数:注意的是:我们配置的BH1790GLC心率传感器输出数据是按照32HZ的,所以滤波器的采样频率是32HZ,截至频率是3.5HZ,滤波器参数使用MATLAB输出如下:得到了滤波器的参数,开始写代码吧。定义IIR滤波器参数结构体:IIR滤波器初始化IIR滤波器计算实现代码如下:关于滤波器的部分基本上 就是这么回事。剩下的就是使用IIR滤波器。程序按照32HZ的频率去读取传感器的数据。pw_

7、GetMeasureData(读取传感器的数据保存到s_pwDatapwCalc( 数据经过IIR滤波之得到PW数据滤波方式如下:首先原始数据先经过滑动求平均之后,经过高通滤波器之后,在经过低通滤波器,最后输出dataOut现在我将原始数据和滤波之后的数据通过串口传出来,波形显示如下:红色DATAOUT_LEDON,蓝色DATAOUT_LEDOFF,以及经过IIR滤波之后的数据 pw绿色将PW波形放大之后:可以看到,经过IIR滤波之后,pw几乎呈现很规律的正弦波,这样就可以很方便的统计出传感器的脉搏心跳。最后统计心跳,通过串口显示如下:当前心率为71,反复测试几次,数值都在70-75,看来一致性还是不错。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1