经过ADC采集到的位于袖袋内的压力传感器的电压值,咱们能够换算获得对应的压力值。而后根据血压算法,找到对应的收缩压和舒张压。系统实现的核心就是滤波和寻找算法。在ADC采样以前加入一个硬件的RC高通滤波器得到交流信号。可是这个交流信号采样后依然会有ADC自己的噪声和白噪声,这时就须要加入软件滤波算法。html
##有限长滤波器## 有限长滤波器是一种数字滤波器(finite impulse response filter)。窗函数法设计FIR数字滤波器是在时域进行的,于是必须由理想的频率响应推导出对应的单位取样响应hd(n),hd(n)是无限的。必须设计一个有限的单位取样响应h (n)去逼近hd(n) 。算法
有限长单位脉冲响应hd(n)能够由期待获得的频率响应函数和公式hd(n)=1/2π∫Hd(e^jw)(e^jw)dw获得。函数
##Matlab实现##设计
<!-- lang: cpp --> n=2;f0=0.6;fs=200; %2表明阶数,fs为采样率,f0是截止频率 [b,a]=butter(n,f0/(fs/2),'high') %用butter函数获取butter滤波器的系数 y(1:3)=0; %滤波后的前面3个点为0 for i=3:1:num2 %高通滤波,从第3个点到最后一个点 y(i)=-1*(a(2)*y(i-1)+a(3)*y(i-2))+b(1)*u(i)+b(2)*u(i-1)+b(3)*u(i-2);
##C实现##3d
<!-- lang: cpp --> void butter_high(double* in,double* out,int length) { int i; for(i=2;i<length-1;i++) out[i]=-1*(A2_H*out[i-1]+A3_H*out[i-2])+B1_H*in[i]+B2_H*in[i-1]+B3_H*in[i-2]; }
其中A2_H,A3_H为Matlab算得的滤波系数。我感受FIR和小波算法很像,都是构造一些系数用来卷积点。而这些系数相乘后的频率响应在频域上恰好构造了一个高通滤波器。这就达到了滤波的目的。说实话,仍是没理解太透彻。由于信号与系统实在忘得太快了。code
##Reference## [1].http://wenku.baidu.com/view/dae2fb0103d8ce2f0066236b.htmlhtm