有限长滤波器在血压测量中的运用

经过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

相关文章
相关标签/搜索