当前位置:首页 > matlab在信号与图像处理中的应用第6章
第6章 数字滤波器设计与实现
在上一章中,已经对MATLAB信号处理的一些基本知识作了详细介绍,在此基础上,本章将重点介绍在MATLAB中如何按照指定要求设计并实现一个数字滤波器。这里所谓的滤波器设计是根据特定的任务需求确定一组滤波器系数的过程,而滤波器实现则涉及选取滤波器结构并将结构与滤波器系数相结合的过程。只有完成了这两个步骤,含噪声的信号才能够进行有效的滤波处理。.
数字滤波器可以分为两种类型,即无限长单位冲激响应(IIR)滤波器和有限长单位冲激(FIR)响应滤波器。在本章中,将分别介绍IIR和FIR数字滤波器设计的原理及方法,并运用大量实例说明在MATLAB中如何设计并实现数字滤波器。
学习目标
? ? ? ?
熟悉数字滤波器的设计及实现步骤 掌握IIR滤波器的设计方法 掌握FIR滤波器的设计方法
了解IIR和FIR滤波器的区别与优缺点对比
练习案例
? 设计两个Butterworth滤波器,并采用直接Ⅱ型结构实现对数据x的滤波,要求
分别利用函数dfilt和filter。
? 设计两个10阶高通Butterworth滤波器,要求截止频率为200Hz和300Hz,给
定采样频率1000Hz。
? 设计一个8阶带通和一个8阶带阻Butterworth滤波器,要求通带频率为200Hz
到300Hz,阻带频率为200Hz到300Hz,给定采样频率1000Hz。 ? 设计一个8阶低通ChebyshevⅠ型滤波器,一个8阶高通ChebyshevⅡ型滤波器,
要求通带波纹1dB,阻带衰减20dB,截止频率300Hz,定采样频率1000Hz。 ? 设计一个8阶低通椭圆滤波器,要求阻带衰减40dB,通带波纹3dB,截止频率
300Hz,给定采样频率1000Hz。
? 设计一个低通ChebyshevⅠ型滤波器,要求阻带衰减至少50dB,通带波纹小于
3dB,通带截止频率200Hz,阻带截止频率300Hz,给定采样频率1000Hz。 ? 采用冲激响应不变法和双线性变换法将一个模拟低通滤波器变换为数字滤波
器,采样频率10Hz。
1
第6章 数字滤波器设计与实现
? 利用冲激响应不变法和双线性变换法各设计一个Butterworth低通数字滤波器,
要求通带范围200Hz以下,阻带范围300Hz以上,通带波纹Rp小于3dB,阻带衰减Rs大于20dB,采样频率1kHz。 ? 利用直接设计法设计一个8阶低通滤波器,并绘出期望频响与实际频响的图形。 ? 根据Butterworth滤波器的冲击响应,恢复滤波系数。
? 设计一个48阶的FIR带通滤波器,要求通带0.25???0.55 ? 设计一个25阶FIR低通滤波器,给定频率向量f = [0 0.6 0.6 1],幅值向量m = [1
1 0 0],绘出期望响应与实际响应的对比图。
? 利用频率取样法设计FIR高通滤波器,要求截止频率3/4πrad,采样间隔为π
/6,并假设理想频率响应的一个过渡点Hd1?0.45。 ? 设计一个24阶的反对称分段线性带通FIR滤波器,并将实际频率响应与期望
频率响应绘图比较。这里期望频率响应为:f = [0 0.3 0.4 0.6 0.7 0.9];a = [0 1 0 0 0.5 0.5]。
? 设计一17阶Parks-McClellan带通滤波器,要求期望频率响应f = [0 0.3 0.4 0.6
0.7 1];a = [0 0 1 1 0 0]。
? 一混合正弦信号包含5Hz、15Hz、30Hz的三种频率信号,现要求设计适当的
滤波器,保留15Hz频率分量信号,给定采样频率100Hz。
6.1 概述
实际中接收到的信号往往掺杂着噪声或干扰,如何从接收信号中消除噪声或干扰是信号处理领域的关键问题之一,即我们这里所要介绍的滤波问题。所谓滤波,就是从接收信号中滤除噪声和干扰从而提取有用信号的过程,相应的系统或装置被称为滤波器。按照滤波器输入输出信号的类型,滤波器可分为模拟滤波器和数字滤波器,这里我们主要研究的是后者。
6.1.1 数字滤波器的分类
数字滤波器的种类多种多样,相应的分类方法也不尽相同,可以从功能上、从结构上、以及从实现方法或设计方法上进行分类,甚至也可以从滤波域进行分类,即根据滤波器是在时间域、频率域还是在空间域实现,对应有时域滤波器、频域滤波器以及空域滤波器。不过,从总体上而言,可以将滤波器分为两大类:经典滤波器和现代滤波器。 ? 经典滤波器
也称为选频滤波器,其特点是假定输入信号中的有用成分和希望滤除的成分各自分布在不同的频带,这样通过选择合适的频率进行滤波,就可达到滤除噪声的目的。可见,经典滤波器都是在频域内实现滤波处理的,因而可将其纳入频域滤波器范畴。 ? 现代滤波器
比经典滤波器更为复杂的滤波器形式,适用于当有用信号和噪声成分的频带相互重叠、经典滤波器不能有效滤除噪声的情况。这类滤波器可以按照随机信号内部的一些统计分布规律,从干扰中最佳地提取有用信号。比较典型的现代滤波器包括:维纳滤波器、卡尔曼滤波器和自适应滤波器等。与经典滤波器只集中于频域处理不同,现代滤波器已经扩展到时域和
2
6.1 概述
空域内进行。
提示:在本书中只讨论经典滤波器的设计和实现。 ? ? ? ? ? ? ?
另外,从功能上看,或者说从滤波器的频率响应特性上看,数字滤波器又可分为: 低通滤波器 高通滤波器 带通滤波器 带阻滤波器 全通滤波器
再有,按实现的网络结构或单位冲激响应的时长,数字滤波器可分成两大类: 无限冲激响应(IIR)滤波器 有限冲激响应(FIR)滤波器
本章将重点介绍IIR和FIR两类滤波器的MATLAB设计与实现。
6.1.2 数字滤波器的设计
设计一个数字滤波器,不管是IIR滤波器还是FIR滤波器,一般可以分为三个步骤。 设计步骤
[1] 首先,按照任务需求,确定滤波器的性能指标。所谓的任务需求包括滤除或保
留哪些频率成分、滤波后信号允许有多大的幅度或相位失真等,而滤波器的性能指标具体指代一组滤波器系数等参量。 [2] 其次,设计一个系统函数H?z?去逼近这个性能指标,这里的系统函数包括两类,
即IIR系统函数和FIR系统函数。这里,系统函数一般可以表示成为z?1的有理
式
H?z???bzii?0NM?i
?i1??azii?1提示:系统函数设计的关键就是求出分子和分母表达式中的系数向量a和b。
[3] 最后,实现所设计的系统函数H?z?。这里的操作包括选择运算结构、确定合适字长等,运算结构具体指代级联型、并联型、直接型等等。
在本章后续小节中,会重点介绍本部分的内容,包括IIR滤波器和FIR滤波器的设计方法及在MATLAB中如何实现。
6.1.3 数字滤波器的实现
在滤波器设计阶段已经产生了滤波器系数,向量a和b,之后在MATLAB信号处理工具
3
第6章 数字滤波器设计与实现
箱提供了两个函数用来实现数字滤波器:dfilt和filter。
6.1.3.1 dfilt函数
用来指定滤波器结构,并产生一个滤波器对象。其基本格式为: ? Hd = dfilt.structure(input1,?)
返回一个数字滤波器对象Hd,其结构为指定的“structure”类型,每种结构带有一个或更多个分量。
? Hd = [dfilt.structure(input1,?), dfilt.structure(input1,?), ?]
返回一个向量Hd,代表一组滤波器对象。
函数dfilt的“structure”指定了滤波器的结构类型,几种典型的结构列于下表。
表6-1 函数dfilt的几种典型结构类型
dfilt.structure dfilt.df1 dfilt.df2 dfilt.dffir dfilt.latticeallpass 描述 直接Ⅰ型 直接Ⅱ型 FIR直接型 格型全通 例6-1设计一个Butterworth滤波器,并采用直接Ⅱ型结构实现对数据x的滤波,要求利用函数dfilt。
% 采用dfilt函数实现直接Ⅱ型结构滤波程序 [b,a] = butter(5,0.4); Hd = dfilt.df2(b,a); filter(Hd,x)
程序中函数butter用于设计Butterworth滤波器,其具体调用格式在后面IIR滤波器设计章节中会详细介绍。
6.1.3.2 filter函数
该函数基于输入滤波系数a和b,采用一个直接Ⅱ型滤波器结构对数据进行滤波处理。其调用格式包括: ? y = filter(b,a,x)
返回值y为滤波后的输出,参量b和a分别为滤波器系统函数H?z?分子和分母上的系数,x表示输入信号向量。如果a(1)不等于1,filter函数将除以a(1)实现归一化,如果a(1)等于零,则函数filter返回错误提示。当x为一矩阵时,filter将在x的每一列执行滤波处理。 ? [y,zf] = filter(b,a,x)
返回值zf为滤波器延时的最终条件。如果输入信号x为一个行向量或列向量,则zf为一列向量,长度max(length(a), length(b))-1。当x为一矩阵时,zf则是一组向量构成的阵列,每个向量与x的每一列相对应。
提示:对输入系数a和b直接采用filter命令,可以实现滤波器归一化,方法为令输入系数a(1)为1,;而在
dfilt生成的滤波器对象基础上采用filter命令,则无法实现滤波器归一化。
4
共分享92篇相关文档