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

该博客探讨了在血压监测系统中,如何利用ADC采集袖袋内压力传感器的电压值,并通过硬件RC高通滤波器和软件FIR滤波算法去除噪声,提取出收缩压和舒张压。文章介绍了FIR滤波器的设计原理,以Matlab和C代码展示了滤波过程,强调了滤波在信号处理中的核心作用。
摘要由CSDN通过智能技术生成

通过ADC采集到的位于袖袋内的压力传感器的电压值,我们可以换算得到对应的压力值。然后根据血压算法,找到对应的收缩压和舒张压。系统实现的核心就是滤波和寻找算法。在ADC采样之前加入一个硬件的RC高通滤波器获得交流信号。但是这个交流信号采样后依然会有ADC本身的噪声和白噪声,这时就需要加入软件滤波算法。

##有限长滤波器## 有限长滤波器是一种数字滤波器(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实现##

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实现##

void butter_high(double*in,double*out,intlength)

{

int i;

for(i=2;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和小波算法很像,都是构造一些系数用来卷积点。而这些系数相乘后的频率响应在频域上刚好构造了一个高通滤波器。这就达到了滤波的目的。说实话,还是没理解太透彻。因为信号与系统实在忘得太快了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值