数字信号处理公式变程序(四)——巴特沃斯滤波器(上)

之前搞了一些数字信号处理算法编程(OC),一直没来得及整理,现在整理一下,包括FFT、巴特沃斯滤波器(高通、低通、带通、带阻)、数据差值(线性、sinc、三次样条*)、数据压缩(等距、平均、峰值检测)和模仿matlab的STFT功能(spectrogram函数三维绘图)。

 

注:可能会有不足或者理解偏差的地方,路过的高人请不吝赐教。

 

今天来说一下数字滤波器的代码实现(IIR)。

---------------------------------------------------------------------------------------

一、基本概念

1.数字滤波器(DF)和模拟滤波器(AF)一样,都是用来滤波的,它将信号的某些频率(频段)的信号加以放大,而将另外一些频率(频段)的信号加以抑制。借助A/D、D/A转换器,数字滤波器可以处理模拟信号也可以输出模拟信号。

2.数字滤波器有4种表示方法

①线性差分方程:也就是它的滤波作用的基本构成事数值运算的部件:相加器、相乘器、延时器。而模拟滤波器的基本部件则是电感器、电容器、电阻器及有源器件。

②系统函数。将a0归一化为a0=1,即用z^(-1)或z的有理分式表示系统函数。则有

(IIR数字滤波器)

③单位抽样响应h(n)拉氏变换得到

④线性信号流图。系统函数如下

其直接II型结构图如下

3.分类

(1)按冲激响应分为无限长冲激响应(IIR)数字滤波器和有限长冲激响应(FIR)数字滤波器。

IIR:从2②中的IIR系统函数可以看出,它是一个z^(-1)的有理分式,包括有输出到输入的反馈网络结构,此系统分母多项式A(z)决定了反馈网络,同时确定了有限z平面的极点,而分子多项式B(z)决定了正馈网络,同时确定了有限z平面的零点。

FIR:FIR滤波器系统函数可表示为z^(-1)的多项式,即IIR系统函数中ai=0(分母为1),可以写成如下形式

其中h(n)时系统的单位冲激响应,显然h(i)=bi(当ai=0时),H(z)在有限z平面只有零点,如果是因果系统则全部极点都在z=0处。系统不存在反馈网络。

(2)按滤波器幅度响应可分为低通、高通、带通、带阻、全通等。按照奈奎斯特抽样定理,信号最高频率fh只能限于fh≤fs/2(fs为臭氧频率),即wh≤π。与模拟滤波器不同,数字滤波器频率响应是以2π为周期的周期函数,这些理想的幅度响应特性(如下图所示),即“突变”型幅度响应会造成无限长的非因果的单位冲激响应,是不可实现的,只能用可实现的实际滤波来逼近它。

(3)按相位响应分类:线性相位、非线性相位。如果要求严格的线性相位,则必须使用FIR线性相位滤波器。

(4)按特殊要求分类:最小相位滞后滤波器、梳状滤波器、陷波器、全通滤波器、谐振器,甚至包括波形产生器等。采用零极点的适当配置方法,可以得到这些滤波器。

二、IIR数字滤波器的技术指标

以数字低通滤波器为例(见下图),指标包括:通带截止频率wp,阻带截止频率wst, 通带波纹δ1(Rp(dB)), 阻带波纹δ2(As(dB)) 。

通带允许的最大衰减Rp(dB)以及阻带应达到的最小衰减As(dB)范围如下(已归一化为H(e^(jw))=1):

 

注:

①高通与低通的指标一致;

②带通的技术指标通带截止频率分通带上截止频率wp2和通带下截止频率wp1,阻带截止频率分上阻带截止频率wst2和下阻带截止频率wst1;

③带阻的技术指标通带截止频率分为上通带截止频率wp2和下通带截止频率wp1,阻带截止频率分阻带上截止频率wst2和阻带下截止频率wst1。

 

三、滤波器的设计步骤

滤波器的设计就是要找到一个满足技术指标要求的可实现的因果稳定的数字滤波器来逼近理想的滤波器幅度特性。

1.滤波器设计思路

本文采用间接法设计数字滤波器(先设计模拟低通滤波器在通过双线性变换法得到数字低通、高通、带通、带阻滤波器),设计模型如下图所示。参数说明:fp——通带截止频率,fs——阻带截止频率,rp通带最大衰减,rs阻带最小衰减,N——滤波器阶数,fc——3dB截止频率,sa——原型滤波器分母多项式的系数,sb原型滤波器分子多项式的系数,za——数字滤波器系统函数分母多项式的系数,zb——数字滤波器系统函数分子多项式的系数,filter——滤波方法(将信号代入,返回滤波后的信号)。

 

即,数字滤波器的设计及滤波思路图如下图:

2.模拟滤波器设计

(1)模拟滤波器的设计步骤

①给定模拟滤波器技术指标Ωp,Ωst,(1-δ1)(或Rp dB),δ2(或As dB);

②计算滤波器所需阶数N;

注:本文设计的滤波器阶数N不能大于10,因为阶数越高计算出的值越不准确。

③查表确定归一化低通滤波器系统函数Has(s);

④将Has(s)转换为所需类型的低通滤波器系统函数Ha(s)。

(2)具体实现

①确定滤波器的阶数N,公式如下所示,计算得到的结果向上取整。注意此处的Ωst和Ωp为预畸后的值(预畸公式见上思路设计图中公式)

②确定3dB频率,公式如下,当选Ωc=(Ωcp+Ωcs)/2时通带阻带衰减皆可超过要求(查看matlab源码发现采用Ω=Ωcs,因此本文采取Ω=Ωcs)

③根据N的值,查表得归一化低通滤波器系统函数Has(s)的分母多项式系数,公式如下:

d0一般由Ω=0时|Han(j0)|=1(增益为1)来确定,由于a0=1,一次d0=a0=1。

附归一化巴特沃斯滤波器分母多项式的系数表如下:

 

Na0a1a2a3a4a5a6a7a8a9
111
211.4142136
3122
412.61312593.41421362.6131259
513.2360685.2360685.2360683.236068
613.86370337.46410169.14162027.46410163.8637033
714.493959210.097834714.591793914.591793910.09783474.4939592
815.125830913.137071221.84615125.688355921.84615113.13707125.1258309
915.758770516.581718731.163437541.986385741.986385731.163437516.58171875.7587705
1016.392453220.431729142.802061164.882396374.233429264.882396342.802061120.43172916.3924532

 

④转换成所需类型的低通滤波器系统函数Ha(s),去归一化另s=s/Ωc。

 

3.模拟滤波器的数字化知识

模拟滤波器的数字化方法有很多种,包括冲激响应不变法(脉冲响应不变法)、阶跃响应不变法和双线性变换法等。本文采用双线性变换法实现。

(1)基本思路

双线性变换法是使数字滤波器的频率响应与模拟滤波器的频率响应相似的一种变换,它使得Ω和ω之间是单值映射关系可以避免频率响应的混叠失真。

下图表示了变换思路,即将s平面整个变换到一个中介s1平面的一个窄带Ω:-π/T→π/T之中,然后经过z=e^(s1*T)的变换,将s1平面映射到z平面。从s1到z平面的变换是单值变换,从而使整个变换过程(s到z)成为单值的变换。

(2)变换公式

低通、高通、带通、带阻的变换关系式都在本节第一模块的“数字滤波器的设计及滤波思路图”中展现了。

4.滤波方法

如前所述,滤波过程就是解常系数线性差分方程的过程,形式如:

其中,x(n)序列为滤波前的信号序列,ak, bm为H(z)系统函数分母与分子的系统数组,求出的y(n)即为滤波后的信号序列。

注:x(n)与y(n)的长度要相等,且a0=1。

公式的化简工程如下:

默认条件,当k<0时,x(k), y(k)都为0。例如n=0时,y(0)=b0*x0+b1*x(-1)+...+bM*x(-M)-a1*y(-1)-...-aN*y(-N)=b0*x(0)。经过迭代,可以求出y(n)序列的所有值。

 

 

========================================================

OK,理论到此结束,下一节上代码!

  • 83
    点赞
  • 409
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
对于血压脉搏信号的巴特沃斯滤波器参数选择,可以考虑以下几个步骤: 1. 确定信号的采样频率:这是血压脉搏信号在离散时间域上的采样频率,通常以赫兹(Hz)为单位。 2. 确定滤波器的截止频率:根据你对信号的需求和特征,可以选择合适的截止频率。低通滤波器用于去除高频噪声,高通滤波器用于去除低频噪声。 3. 确定滤波器的阶数:滤波器的阶数决定了滤波器的陡峭程度和相位响应。一般来说,阶数越高,滤波器的陡峭程度越高,但也会引入更多的相位延迟。 4. 根据以上信息,使用MATLAB中的`butter`函数来设计巴特沃斯滤波器并获取滤波器参数。该函数的输入参数包括滤波器的阶数和截止频率,输出参数为滤波器的系数。 下面是一个示例代码,以说明如何在MATLAB中选择巴特沃斯滤波器参数: ```matlab % 信号采样频率 Fs = 100; % 假设采样频率为100Hz % 截止频率 fpass = 10; % 假设截止频率为10Hz % 滤波器阶数 order = 4; % 假设阶数为4 % 计算巴特沃斯滤波器参数 [b, a] = butter(order, fpass/(Fs/2)); % 将滤波器应用到信号 filtered_signal = filtfilt(b, a, original_signal); ``` 在上面的代码中,`Fs`表示信号的采样频率,`fpass`表示滤波器的截止频率,`order`表示滤波器的阶数。通过调整这些参数,你可以根据实际需求选择合适的巴特沃斯滤波器参数来处理血压脉搏信号。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值