2.MATLAB实现无限脉冲响应数字滤波器(IIR)

您所在的位置:网站首页 有限长脉冲响应滤波器 2.MATLAB实现无限脉冲响应数字滤波器(IIR)

2.MATLAB实现无限脉冲响应数字滤波器(IIR)

2024-07-10 12:19:17| 来源: 网络整理| 查看: 265

本文是IIR数字滤波器设计,如果需要了解模拟滤波器或者FIR的内容,可以看我写的另外两篇博客,如下:

1.巴特沃斯模拟滤波器(低通,高通,带通,带阻)设计-MATLAB实现

3.MATLAB实现有限脉冲响应数字滤波器(FIR)

目录 1. 基础知识介绍2. 数字滤波器简介3.IIR与FIR介绍3.1 如何选择3.2 设计方法 4.无限脉冲响应(IIR)数字滤波器设计4.1 函数介绍(1)buttord - 求解滤波器的阶数N和3dB截止频率wc(2)butter - 求解N阶滤波器的具体参数B和A,求解完B和A后滤波器就设计完成了。(3)filter - 滤波函数 4.2 直接调用Matlab函数求解(1)低通滤波器(2)高通滤波器(3)数字带通滤波器(4)数字带阻滤波器 4.3 脉冲响应不变法设计4.4 双线性变换法设计

1. 基础知识介绍

我们首先明确一个知识(这个非常重要):

某正弦信号,频率为50Hz 这意味着 信号的模拟频率 f f f= 50 (Hz),注意它的单位是Hz

信号的表达式为 y = s i n ( 2 π f t ) = s i n ( 2 π ∗ 50 t ) = s i n ( 100 π t ) y = sin(2\pi ft)=sin(2\pi *50 t)=sin(100\pi t) y=sin(2πft)=sin(2π∗50t)=sin(100πt)

由于信号也可以表示为 y = s i n ( Ω t ) y = sin(\Omega t) y=sin(Ωt)的形式,所以这里 Ω = 2 π f = 100 π \Omega=2\pi f=100\pi Ω=2πf=100π

这里的 Ω \Omega Ω 是模拟角频率,它的单位是rad/s。

注意模拟角频率 Ω \Omega Ω 和模拟频率 f f f的关系 Ω = 2 π f \Omega=2\pi f Ω=2πf

上面的信号都是模拟信号,接着对信号采样(采样频率 F s F_s Fs​ )得到一个数字频率 ω \omega ω ,它是模拟角频率 Ω \Omega Ω 对采样频率 F s F_s Fs​ 归一化得到的,即

ω = Ω F s \omega = \frac \Omega F_s ω=FΩ​s​

注意数字频率 ω \omega ω 的单位是 rad

所以原始信号 f = 50 H z f=50Hz f=50Hz,采样频率 200 H z 200Hz 200Hz 的话,有 模拟频率 f f f = 50(Hz)

模拟角频率 Ω = 100 π ( r a d / s ) \Omega = 100 \pi(rad/s) Ω=100π(rad/s) 数字频率 ω = Ω F s = 0.5 π ( r a d ) \omega = \frac \Omega F_s=0.5\pi(rad) ω=FΩ​s​=0.5π(rad) 对 π \pi π 归一化数字频率 w = 0.5 ( r a d ) w = 0.5 (rad) w=0.5(rad)

注意!!! 模拟滤波器设计中用的频率是指模拟角频率 Ω \Omega Ω 数字滤波器设计中用的频率是指归一化数字角频率 w w w

模拟滤波器设计中用的频率是指模拟角频率 Ω \Omega Ω 数字滤波器设计中用的频率是指归一化数字角频率 w w w

模拟滤波器设计中用的频率是指模拟角频率 Ω \Omega Ω 数字滤波器设计中用的频率是指归一化数字角频率 w w w

2. 数字滤波器简介

数字滤波器特点:

输入信号中有用的频率成分和希望滤除的频率成分占有不同的频带,我们需要通过一个合适的选频滤波器滤除干扰,得到纯净信号。

数字滤波器的频率响应函数为 H ( e j w ) H(e^{jw}) H(ejw) ,它可以用下式表示:

H ( e j w ) = ∣ H ( e j w ) ∣ e j θ ( w ) H(e^{jw}) = |H(e^{jw})| e^{j\theta(w)} H(ejw)=∣H(ejw)∣ejθ(w)

∣ H ( e j w ) ∣ |H(e^{jw})| ∣H(ejw)∣ - 系统的幅频特性 :表示信号通过该滤波器后各频率成分衰减情况

θ ( w ) \theta(w) θ(w) - 系统的相频特性 - 反映各频率成分通过滤波器后各频率成分的相位变化情况(时延情况)

3.IIR与FIR介绍 3.1 如何选择

数字滤波器可以分为:无限脉冲响应(IIR)数字滤波器、有限脉冲响应(FIR)数字滤波器两种 我们一般使用IIR即可,因为它设计起来较为方便,当某个滤波器要求线性相位时,我们才使用FIR。

3.2 设计方法

对IIR滤波器,我们一般采用间接法来设计,即先按照参数设计好一个模拟滤波器,然后将其变换为数字滤波器,因为模拟滤波器的理论和设计方法比较成熟。

对FIR滤波器,我们一般采用窗函数设计法。

4.无限脉冲响应(IIR)数字滤波器设计 4.1 函数介绍 (1)buttord - 求解滤波器的阶数N和3dB截止频率wc [N,wc] = buttord(wp, ws, Rp, As)

该函数用于求解巴特沃斯数字滤波器的阶数N和3dB截止频率wc

输入参数如下:

通带边界数字频率wp、阻带边界模拟频率ws(对pi归一化数字角频率,单位是rad)

通带最大衰减Rp、阻带最小衰减As(单位是dB)

注:因为设计的是数字滤波器时,所以没有’s’这个参数了。

举例:原始信号 f f f=50Hz,采样频率 F s F_s Fs​=200Hz的话,有 模拟频率 f f f= 50(Hz) 模拟角频率 Ω = 100 π \Omega = 100 \pi Ω=100π (rad/s) 数字频率 ω = Ω F s = 0.5 π ( r a d ) \omega = \frac \Omega F_s=0.5\pi(rad) ω=FΩ​s​=0.5π(rad) 对 π \pi π 归一化数字角频率 w w w =0.5

所以函数输入参数 wp和ws的大小都在[0,1]之间。

(2)butter - 求解N阶滤波器的具体参数B和A,求解完B和A后滤波器就设计完成了。 [B, A] = butter(N, wc, ‘ftype’)

该函数用于求解N阶巴特沃斯数字滤波器的具体参数B和A,求解完B和A后滤波器就设计完成了。

输入参数如下: N - 滤波器阶数 wc - 3dB截止数字频率wc (单位rad,N和wc都是用buttord函数计算出来的)

ftype - 滤波器类型‘’:

当输入wc为一维向量时: 设计低通滤波器时ftype不填,设计高通滤波器的话令ftype=high

当输入wc为二维向量[wcl,wcu]时: 设计带通滤波器时ftype不填,设计带阻滤波器的话令ftype=stop

(3)filter - 滤波函数 y = filter(B,A,x)

这个就是滤波函数了,x是输入的有噪声的信号,B,A就是设计好的滤波器参数,得到的输入y就是滤波后的信号了。

4.2 直接调用Matlab函数求解 (1)低通滤波器

例: 设计数字低通滤波器,wp = 0.2 π \pi π rad,Rp = 1 dB, ws = 0.3 π \pi π rad, As = 15 dB,采样频率1Hz。

求解这个问题我们需要用到以下两个函数:

[N,wc] = buttord(wp, ws, Rp, As) [B, A] = butter(N, wc, ‘ftype’)

注意!!! 函数涉及到的频率都是对 pi 归一化后的数字角频率,单位是rad

所以 wp = 0.2 pi / pi = 0.2 ws = 0.3 pi / pi = 0.3

代码如下

wp = 0.2; ws = 0.3; Rp = 1; As = 15 [N, wc] = buttord(wp, ws, Rp, As); [B, A] = butter(N, wc);

至此,数字低通滤波器设计完成了,如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出数字低通滤波器的幅频特性曲线,代码如下:

%画图 w = 0 : 0.01 * pi : pi;%取点,从0-pi,每隔 0.01 pi 取一个点 Hk = freqz(B,A,w);%对于取的每个点,求该处的频率响应得下 figure plot(w / pi, 20 * log10(abs(Hk)));%横坐标单位是数字频率对pi的归一化值,纵坐标单位是dB, grid on; %设置横纵坐标标签 xlabel('\omega / \pi'); ylabel('幅度/dB'); %设置横纵坐标轴范围 axis([0, 1, -100, 5]);

得到的结果如下所示:

 低通数字滤波器

(2)高通滤波器

例: 设计数字低通滤波器,wp = 0.3 π \pi π rad,Rp = 1 dB, ws = 0.2 π \pi π rad, As = 15 dB.采样频率1Hz。

求解这个问题我们需要用到以下两个函数:

[N,wc] = buttord(wp, ws, Rp, As) [B, A] = butter(N, wc, ‘ftype’)

函数涉及到的频率都是对 π \pi π 归一化后的数字角频率,单位是rad

所以wp = 0.3 pi / pi = 0.3 ws = 0.2 pi / pi = 0.2

代码如下:

wp = 0.3; ws = 0.2; Rp = 1; As = 15 [N, wc] = buttord(wp, ws, Rp, As); [B, A] = butter(N, wc,'high');

至此,数字高通滤波器设计完成了, 如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出数字高通滤波器的幅频特性曲线,代码如下:

%画图 w = 0 : 0.01 * pi : pi;%取点,从0-pi,每隔 0.01 pi 取一个点 Hk = freqz(B,A,w);%对于取的每个点,求该处的频率响应得下 figure plot(w / pi, 20 * log10(abs(Hk)));%横坐标单位是数字频率对pi的归一化值,纵坐标单位是dB, grid on; %设置横纵坐标标签 xlabel('\omega / \pi'); ylabel('幅度/dB'); %设置横纵坐标轴范围 axis([0, 1, -100, 5]);

结果如下: 在这里插入图片描述

(3)数字带通滤波器

例: 设计数字带通滤波器,采样频率Fs = 8kHz,保留2025 - 2225 Hz的部分,幅度失真小于1dB,滤除1500Hz以下和2700Hz以上部分的噪声,衰减大于40dB。

数字频率 ω = Ω F s = 2 π f F s \omega = \frac \Omega F_s = \frac{2\pi f}{F_s} ω=FΩ​s​=Fs​2πf​

对pi归一化后

wpl = 2 pi * 2025 / 8000 / pi, wpu = 2 pi * 2225 / 8000 / pi 即wp = [2 fpl / Fs, 2 fpu / Fs]

wsl = 2 pi * 1500/ 8000 / pi, wsu = 2 pi * 2700/ 8000 / pi 即ws = [2 fsl / Fs, 2 fsu / Fs]

代码如下:

Fs = 8000 %采样频率 fpl = 2025; %通带较小频率 fpu = 2225; %通带较大频率 fsl = 1500; %阻带较小频率 fsu = 2700; %阻带较大频率 ws = [2 * fpl / Fs, 2 * fpu / Fs]; wp = [2 * fsl / Fs, 2 * fsu / Fs]; Rp = 1; As = 40; [N, wc] = buttord(wp, ws, Rp, As);%此时输入wp和ws都是二维的,输出wc也是两维的 [B, A] = butter(N, wc);

至此,数字带通滤波器设计完成了,如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出数字带通滤波器的幅频特性曲线,代码如下:

%画图 w = 0 : 0.01 * pi : pi;%取点,从0-pi,每隔 0.01 pi 取一个点 Hk = freqz(B,A,w);%对于取的每个点,求该处的频率响应得下 figure plot(w / pi, 20 * log10(abs(Hk)));%横坐标单位是数字频率对pi的归一化值,纵坐标单位是dB, grid on; %设置横纵坐标标签 xlabel('\omega / \pi'); ylabel('幅度/dB'); %设置横纵坐标轴范围 axis([0, 1, -100, 5]);

画图结果如下: 在这里插入图片描述

(4)数字带阻滤波器

例: 设计数字带阻滤波器,采样频率Fs = 8kHz,保留1500Hz以下和2700Hz以上部分的部分,幅度失真小于1dB,滤除2025 - 2225 Hz的噪声,衰减大于40dB。

数字频率 ω = Ω F s = 2 π f F s \omega = \frac \Omega F_s = \frac{2\pi f}{F_s} ω=FΩ​s​=Fs​2πf​

对pi归一化后

wpl = 2 pi * 1500/ 8000 / pi, wpu = 2 pi * 2700/ 8000 / pi

即wp = [2 fpl / Fs, 2 fpu / Fs]

wsl = 2 pi * 2025/ 8000 / pi, wsu = 2 pi * 2225/ 8000 / pi

ws = [2 fsl / Fs, 2 fsu / Fs]

代码如下:

Fs = 8000; %采样频率 fpl = 1500; %通带较小频率 fpu = 2700; %通带较大频率 fsl = 2025; %阻带较小频率 fsu = 2225; %阻带较大频率 wp = [2 * fpl / Fs, 2 * fpu / Fs]; ws = [2 * fsl / Fs, 2 * fsu / Fs]; Rp = 1; As = 40; [N, wc] = buttord(wp, ws, Rp, As);%此时输入wp和ws都是二维的,输出wc也是两维的 [B, A] = butter(N, wc,'stop');

至此,数字带阻滤波器设计完成了,如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出数字带阻滤波器的幅频特性曲线,代码如下:

%画图 w = 0 : 0.01 * pi : pi;%取点,从0-pi,每隔 0.01 pi 取一个点 Hk = freqz(B,A,w);%对于取的每个点,求该处的频率响应得下 figure plot(w / pi, 20 * log10(abs(Hk)));%横坐标单位是数字频率对pi的归一化值,纵坐标单位是dB, grid on; %设置横纵坐标标签 xlabel('\omega / \pi'); ylabel('幅度/dB'); %设置横纵坐标轴范围 axis([0, 1, -100, 5]);

画图结果如下:

在这里插入图片描述

4.3 脉冲响应不变法设计 脉冲响应不变法就是先计算模拟滤波器对应的参数,设计好模拟滤波器,接着使用impinvar函数转为数字滤波器。脉冲响应不变法一般只能用来设计低通和带通滤波器,对于高通和带阻滤波器容易出现频谱混叠现象。

例: 设计数字低通滤波器,wp = 0.2 pi rad,Rp = 1 dB, ws = 0.35 pi rad, As = 10 dB.采样频率1Hz。

首先求出模拟滤波器的参数,

由 ω = Ω F s \omega = \frac \Omega F_s ω=FΩ​s​ 可知 模拟角频率 Ω = ω F s \Omega = \omega F_s Ω=ωFs​

所以 Ω p = ω p F s = 0.2 π ( r a d / s ) \Omega_p = \omega_p F_s = 0.2\pi (rad/s) Ωp​=ωp​Fs​=0.2π(rad/s)

Ω s = ω s F s = 0.35 π ( r a d / s ) \Omega_s = \omega_s F_s = 0.35\pi (rad/s) Ωs​=ωs​Fs​=0.35π(rad/s)

按照这两个参数设计模拟低通滤波器

% 脉冲响应不变法低通 Fs = 1; %采样频率 %此处的wp和ws都是模拟角频率 wp = 0.2 * pi * Fs; ws = 0.35 * pi * Fs; Rp = 1; As = 10; %低通模拟滤波器设计,注意加上's' [N, wc] = buttord(wp, ws, Rp, As,'s'); [Bs, As] = butter(N, wc, 's'); %把模拟滤波器转换为数字滤波器 [B,A] = impinvar(Bs, As, Fs);

至此,脉冲响应不变法的数字低通滤波器设计完成了

如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出数字低通滤波器的幅频特性曲线,代码如下:

%画图 w = 0 : 0.01 * pi : pi;%取点,从0-pi,每隔 0.01 pi 取一个点 Hk = freqz(B,A,w);%对于取的每个点,求该处的频率响应得下 figure plot(w / pi, 20 * log10(abs(Hk)));%横坐标单位是数字频率对pi的归一化值,纵坐标单位是dB, grid on; %设置横纵坐标标签 xlabel('\omega / \pi'); ylabel('幅度/dB'); %设置横纵坐标轴范围 axis([0, 1, -100, 5]);

结果如下:

在这里插入图片描述

4.4 双线性变换法设计 与脉冲响应不变法不同,双线性变化法利用下式 Ω = 2 T t a n ( w 2 ) \Omega = \frac{2}{T} tan(\frac{w}{2}) Ω=T2​tan(2w​) 将数字频率变为模拟角频率,然后设计模拟滤波器,再通过bilinear()函数转换为数字滤波器。

例: 设计数字低通滤波器,频率低于0.2 π \pi π rad时,衰减小于1dB,频率大于0.3 π \pi π 时衰减大于15dB。

利用 Ω = 2 T t a n ( w 2 ) \Omega = \frac{2}{T} tan(\frac{w}{2}) Ω=T2​tan(2w​) 计算得到模拟角频率

Ω p = 2 T t a n ( w p 2 ) \Omega_p = \frac{2}{T} tan(\frac{w_p}{2}) Ωp​=T2​tan(2wp​​)

Ω s = 2 T t a n ( w s 2 ) \Omega_s = \frac{2}{T} tan(\frac{w_s}{2}) Ωs​=T2​tan(2ws​​)

然后设计模拟滤波器,再转化为数字滤波器

滤波器设计代码如下:

%双线性变化法低通 T = 1; wpz = 0.2 * pi; wsz = 0.3 * pi; Rp = 1; As = 15; wp = (2 / T) * tan(wpz / 2); %双线性变换 ws = (2 / T) * tan(wsz / 2);%双线性变换 [N, wc] = buttord(wp, ws, Rp, As,'s'); [Bs, As] = butter(N, wc, 's'); [B,A] = bilinear(B,A, 1/T);%将模拟滤波器转化为数字滤波器

至此,双线性变换法的数字低通滤波器设计完成了

如果有输入噪声信号x的话,调用y = filter(B,A,x),得到的y就是滤波后的信号了。

接着我们画出数字低通滤波器的幅频特性曲线,代码如下:

%画图 w = 0 : 0.01 * pi : pi;%取点,从0-pi,每隔 0.01 pi 取一个点 Hk = freqz(B,A,w);%对于取的每个点,求该处的频率响应得下 figure plot(w / pi, 20 * log10(abs(Hk)));%横坐标单位是数字频率对pi的归一化值,纵坐标单位是dB, grid on; %设置横纵坐标标签 xlabel('\omega / \pi'); ylabel('幅度/dB'); %设置横纵坐标轴范围 axis([0, 1, -100, 5]);

绘图结果如下:

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭