基于Matlab的IIR数字滤波器设计(脉冲响应不变法)毕业论文 下载本文

(此文档为word格式,下载后您可任意编辑修改!)

课 程 设 计 说 明 书

题目:基于Matlab的IIR数字滤波器设计

0 课程设计(论文)任务书

院(系) 基层教学单位 学 号 学生姓名 专业(班级) 设计题基于Matlab的IIR数字滤波器设计(脉冲响应不变法) 目 设 计 技 术 参 数 设 计 要 求 工 作 量 基于Matlab软件,利用脉冲响应不变法设计IIR低通、高通、带通、带阻数字滤波器,并分析滤波器单位脉冲响应,频率响应特性。 1. 设计报告中要求画出所设计的滤波器的网络结构图。 2. 设计出滤波器,并查看其波形。 3. GUIDE的界面设计。并将其运行观察。 查找资料,学习使用MATLAB设计滤波器。分别设计出低通,高通,带通,帯阻四种数字滤波器。观察各滤波器的频率响应。设计GUIDE界面。 第一天:查资料,够造思路。 第二天到第三天:各基本程序的编写和调试。 第四天:观察各滤波器的波形,并修改程序。 第五天:设计GUIDE界面,并用其演示波形。 第六天:撰写课程设计报告册。 1谢平,林洪彬 信号处理原理及应用 北京:机械工程出版社 2008.10 2刘波.MATLAB信号处理[M].北京:电子工业出版社,2006。 3 张圣勤 MATLAB7.0实用教程 北京:机械工程出版社 2006年3月 工 作 计 划 参 考 资 料 指导教师签字 基层教学单位主任签字 说明:此表一式四份,学生、指导教师、基层教学单位、系部各一份。

1

摘 要

数字滤波是数字信号处理的重要内容,是由乘法器、加法器和单位延时器组成的一种运算过程,其功能是对输人离散信号进行运算处理,以达到改变信号频谱的目的。数字滤波器根据频域特性可分为低通、高通、带通和带阻四个基本类型。

本文用脉冲响应不变法设计的一个满足指标的巴特沃斯IIR滤波器,利用了一种

基于Matlab软件的数字滤波器设计方法,完成了低通,高通,带通,帯阻IIR滤波器的设计, 文中深入分析了该滤波器系统设计的功能特点、实现原理以及技术关键,阐述了使用MATLAB进行带通滤波器设计及仿真的具体方法。最后把整个设计方案用GUIDE界面制作并演示出来。文章根据IIR滤波器的设计原理,重点介绍巴特沃斯数字滤波器的设计方法和操作步骤,并以实例形式列出设计程序。

关键词: 信号 巴特沃斯 Matlab IIR滤波器 脉冲响应不变法

- 2 -

目 录

摘要……………………………………………………………………………….. 3 目录……………………………………………………………………………….....4 第一章绪论…………………………………………………………………………..5 1.1信号数字现状与数字滤波器意义……………………………………………….5 1.2 设计平台…………………………………………………………………………6 1.3数字滤波器概述……………………………………………………………….....6 第二章 IIR数字滤波器的设计……………………………………………………….7 2.1 IIR滤波器的基本结构………………………………………………………..…..7 2.2 滤波器的性能指标……………………………………………………………….10 2.3 IIR数字滤波器的设计方法………………………………………………..……11 2.4巴特沃斯滤波器。……………………………………………………….……….13 第三章 IIR频率响应滤波器的实例………………………………………….……….15 3.2 用脉冲响应不变法设计IIR低通数字滤波器实例………………………………15 3.2 用脉冲响应不变法设计IIR高通数字滤波器实例………………………………17 3.3 用脉冲响应不变法设计IIR带通数字滤波器实例……………………………...19 3.4 用脉冲响应不变法设计IIR帯阻数字滤波器实例……………….……………...21 3.5(附)滤波信号的输入...............................................24 3.6 滤波的效果...............................................................................................................24 第四章 界面设计…………………………………………………………………….25 4.1主界面………………………………………………………………………………25 4.2 软件功能及使用方法……………………………………………………………..26 总结..................................................................27 程序清单 ………………………………………………………………………………29

3

第一章 绪论

1.1信号数字现状与数字滤波器意义

当今,数字信号处理 (DSP:Digtal Signal Processing)技术正飞速发展,它不但自成一门学科,更是以不同形式影响和渗透到其他学科:它与国民经济息息相关,与国防建设紧密相连;它影响或改变着我们的生产、生活方式,因此受到人们普遍的关注。数字信号实际上是用数字序列表示的信号,语音信号经采样和量化后,得到的数字信号是一个一维离散时间序列;而图像信号经采样和量化后,得到的数字信号是一个二维离散空间序列。数字信号处理,就是用数值计算的方法对数字序列进行各种处理,把信号变换成符合需要的某种形式。例如,对数字信号经行滤波以限制他的频带或滤除噪音和干扰,或将他们与其他信号进行分离;对信号进行频谱分析或功率谱分析以了解信号的频谱组成,进而对信号进行识别;对信号进行某种变换,使之更适合于传输,存储和应用;对信号进行编码以达到数据压缩的目的,等等。数字化、智能化和网络化是当代信息技术发展的大趋势,而数字化是智能化和网络化的基础,实际生活中遇到的信号多种多样,例如广播信号、电视信号、雷达信号、通信信号、导航信号、射电天文信号、生物医学信号、控制信号、气象信号、地震勘探信号、机械振动信号、遥感遥测信号,等等。上述这些信号大部分是模拟信号,也有小部分是数字信号。模拟信号是自变量的连续函数,自变量可以是一维的,也可以是二维或多维的。大多数情况下一维模拟信号的自变量是时间,经过时间上的离散化(采样)和幅度上的离散化(量化),这类模拟信号便成为一维数字信号。

在信号处理过程中,所处理的信号往往混有噪音,从接收到的信号中消除或减弱噪音是信号传输和处理中十分重要的问题。根据有用信号和噪音的不同特性,提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在近代电信设备和各类控制系统中,数字滤波器应用极为广泛。数字滤波器精确度高、使用灵活、可靠性高,具有模拟设备所没有的许多优点,已广泛地应用于各个科学技术领域, 例如数字电视、语音、通信、雷达、声纳、遥感、图像、生物医学以及许多工程应用领域。随着信息时代数字时代的到来,数字滤波技术已经成为一门极其重要的学科和技术领域。以往的滤波器大多采用模拟电路技术,但是,模拟电路技术存在很多难以解决的问题,例如,模拟电路元件对温度的敏感性,等等。而采用数字技术则避免很多类似的难题,当然数字滤波器在其他方面也有很多突出的优点,在前面部分已经提到,这些都是模拟技术所不能及的,所以采用数字滤波器对信号进行处理是目前的发展方向。

4 [1]

1.2 设计平台

MATLAB是美国MathWorks公司生产的一个为科学和工程计算专门设计的交互式大型软件,是一个可以完成各种精确计算和数据处理的、可视化的、强大的计算工具。它集图示和精确计算于一身,在应用数学、物理、化工、机电工程、医学、金融和其他需要进行复杂数值计算的领域得到了广泛应用。它不仅是一个在各类工程设计中便于使用的计算工具,而且也是一个在数学、数值分析和工程计算等课程教学中的优秀的数学工具,在世界各地的高和大型计算机上运行,适用于Windows、UNIX等多种系统平台。

MATLAB作为一种科学计算的高级语言之所以受欢迎,就是因为它有丰富的函数资源和工具箱资源,编程人员可以根据自己的需要选择函数,而无需再去编写大量繁琐的程序代码,从而减轻了编程人员的工作负担,被称为第四代编程语言的MATLAB最大的特点就是简洁开放的程序代码和直观实用的开发环境[1]。

1.3数字滤波器概述

数字滤波器可以用查分方程、单位取样响应以及系统函数等表示。对于研究系统的实现方法,即它的运算结构来说,用框图表示最为直接。

一个给定的输入输出关系,可以用多种不同的数字网络来实现。在不考虑量化影响时,这些不同的实现方法是等效的;但在考虑量化影响时,这些不同的实现方法性能上就有差异。因此,运算结构是很重要的,同一系统函数H(z),运算结构的不同,将会影响系统的精度、误差、稳定性、经济性以及运算速度等许多重要性能。IIR(无限冲激响应)滤波器与FIR(有限冲激响应)滤波器在结构上有自己不同的特点,在设计时需综合考虑

作为线形时不变系统的数字滤波器可以用系统函数来表示,而实现一个系统函数表达式所表示的系统可以用两种方法:一种方法是采用计算机软件实现;另一种方法是用加法器、乘法器、和延迟器等元件设计出专用的数字硬件系统,即硬件实现。不论软件实现还是硬件实现,在滤波器设计过程中,由同一系统函数可以构成很多不同的运算结构。对于无限精度的系数和变量,不同结构可能是等效的,与其输入和输出特性无关;但是在系数和变量精度是有限的情况下,不同运算结构的性能就有很大的差异。因此,有必要对离散时间系统的结构有一基本认识。

5

第二章 IIR数字滤波器的设计

2.1 IIR滤波器的基本结构

一个数字滤波器可以用系统函数表示为:

(2-1)

由这样的系统函数可以得到表示系统输入与输出关系的常系数线形差分程为:

y(n)??aky(n?k)??bkx(n?k)

k?0k?0NM(2-2)

可见数字滤波器的功能就是把输入序列x(n)通过一定的运算变换成输出序列y(n)。不同的运算处理方法决定了滤波器实现结构的不同。无限冲激响应滤波器的单位抽样响应h(n)是无限长的,其差分方程如(2-2)式所示,是递归式的,即结构上存在着输出信号到输入信号的反馈,其系统函数具有(2-1)式的形式,因此在z平面的有限区间(0<︱z︱<∞)有极点存在。

前面已经说明,对于一个给定的线形时不变系统的系统函数,有着各种不同的等效差分方程或网络结构。由于乘法是一种耗时运算,而每个延迟单元都要有一个存储寄存器,因此采用最少常熟乘法器和最少延迟支路的网络结构是通常的选择,以便提高运算速度和减少存储器。然而,当需要考虑有限寄存器长度的影响时,往往也采用并非最少乘法器和延迟单元的结构。

IIR滤波器实现的基本结构有: (1)IIR滤波器的直接型结构;

优点:延迟线减少一半,变为N 个,可节省寄存器或存储单元; 缺点:其它缺点同直接I型。

通常在实际中很少采用上述两种结构实现高阶系统,而是把高阶变成一系列不同组合的低阶系统(一、二阶)来实现。 (2)IIR滤波器的级联型结构;

特点:

? 系统实现简单,只需一个二阶节系统通过改变输入系数即可完成; ? 极点位置可单独调整;

6

? 运算速度快(可并行进行);

? 各二阶网络的误差互不影响,总的误差小,对字长要求低。

缺点:

不能直接调整零点,因多个二阶节的零点并不是整个系统函数的零点,当需要准确的传输零点时,级联型最合适。 (3)IIR滤波器的并联型结构。 优点:

? ?

简化实现,用一个二阶节,通过变换系数就可实现整个系统;

极、零点可单独控制、调整,调整α1i、α2i只单独调整了第i对零点,调整β1i、β2i则单独调整了第i对极点;

各二阶节零、极点的搭配可互换位置,优化组合以减小运算误差; 可流水线操作。

二阶阶电平难控制,电平大易导致溢出,电平小则使信噪比减小。

? ?

缺点:

?

a、直接型

7

b、并联型

c、串联型

图1

2.2 滤波器的性能指标

我们在进行滤波器设计时,需要确定其性能指标。一般来说,滤波器的性能要求往往以频率响应的幅度特性的允许误差来表征。以低通滤波器特性为例,频率响应有通带、过渡带及阻带三个范围。

在通带内: 1- AP≤| H(ejω)| ≤1 |ω|≤ωc 在阻带中: |H(ejω)| ≤ Ast ωst ≤|ω|≤ωc

其中ωc 为通带截止频率, ωst为阻带截止频率,Ap为通带误差, Ast为阻带误差。 与模拟滤波器类似,数字滤波器按频率特性划分为低通、高通、带通、带阻、全通

8

等类型,由于数字滤波器的频率响应是周期性的,周期为2π。各种理想数字滤波器的幅度频率响应如图所示:

图3、 各种理想数字滤波器的幅度频率响应

2.3 IIR数字滤波器的设计方法

目前,IIR数字滤波器设计最通用的方法是借助于模拟滤波器的设计方法。模拟滤波器设计已经有了一套相当成熟的方法,它不但有完整的设计公式,而且还有较为完整的图表供查询,因此,充分利用这些已有的资源将会给数字滤波器的设计带来很大方便,IIR数字滤波器的设计步骤是:

(1)按一定规则将给出的数字滤波器的技术指标转换为模拟滤波器的技术指标; (2)根据转换后的技术指标设计模拟低通滤波器H(s); (3)在按一定规则将H(s)转换为H(z)。

若所设计的数字滤波器是低通的,那么上述设计工作可以结束,若所设计的是高通、带通或者带阻滤波器,那么还有步骤:

9

(4)将高通、带通或者带阻数字滤波器的技术指标先转化为低通滤波器的技术指标,然后按上述步骤(2)设计出模拟低通滤波器H(s),再由冲击响应不变法或双线性变换将H(s)转换为所需的H(z)。

s - z 映射的方法有:冲激响应不变法、阶跃响应不变法、双线性变换法等。下面讨论脉冲响应不变法。

脉冲响应不变法是从滤波器的脉冲响应出发,使数字滤波器的单位脉冲响应序h(n)模仿模拟滤波去的冲击响应ha(t),使h(n)正好等于ha(t)的采样值,即 )=)的z变换,即

Ha(s)=L[)] (2-5)

则根据采样序列z变换与模拟信号拉式变换的关系,得:

(2-6)

上式表明,采样脉冲响应不变法将模拟滤波器变换为数字滤波器时,它所完成的S平面到Z平面的变换,正是以前讨论的拉式变换到Z变换的标准变换,即首先对Ha(s)作周期严拓,然后再经过z=est的映射关系映射到Z平面上。

应当指出,Z=est的映射关系表明,S平面上每一条宽为2piT的横带部分,都将重叠地映射到Z平面的整个全部平面上。每一横带的左半部分映射到Z平面单位圆以内,每一横带的右半部分映射到Z平面单位圆以外,jΩ轴映射在单位圆上,但jΩ轴上的每一段2piT都应于绕单位圆一周。

Z=est的映射关系反映的是Ha(s)的周期严拓与H(z)的关系,而不是Ha(s)b本身与H(z)的关系,因此,使用脉冲响应不变法时,从Ha(s)到H(z)并没有一个由S平面到Z平面的简单代数映射关系,即没有一个s=f(z)的代数关系式。另外,数字滤波器的频响也不是简单的重现模拟滤波器的频响,而是模拟滤波器频响的周期严拓,周期为ΩS=2πT=2πfs,即

10

(2-7)

2.4巴特沃斯滤波器

巴特沃斯滤波器是电子滤波器的一种。巴特沃斯滤波器的特点是通频带的频率响应曲线最平滑。

巴特沃斯滤波器的特性是通频带内的频率响应曲线最大限度平坦,没有起伏,而在组频带则逐渐下降为零。在振幅的对数对角频率的波得图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。

其振幅平方函数具有如2-1式:

(2-8)

式中,N为整数,称为滤波器的阶数,N越大,通带和阻带的近似性越好,过渡带也越陡。如下图2.1所示:

11

图2.1 巴特沃兹振幅平方函数

通带: 使信号通过的频带 ;阻带:抑制噪声通过的频带; 过渡带:通带→阻带间过渡的频率范围;Ωc:截止频率。

理想滤波器的过渡带为Ω,阻带|H(jΩ)|=0,通带内幅度|H(jΩ)|=常数,H(jΩ)线性相 位。通带内,分母ΩΩc<1,相应(ΩΩc)2N随N的增加而趋于0,A(Ω2)→1,在过渡带和阻带,ΩΩc>1,随N的增加,ΩeΩc>>1,所以A(Ω2)快速下降。 Ω=Ωc时,,幅度衰减,相当于3bd衰减点。 振幅平方函数的极点可写成如式2-2:

Ha(-s).Ha(s)= (2-9)

可分解为2N个一次因式令分母为零,→

可见,Butterworth 滤波器的振幅平方函数有2N个极点,它们均匀对称地分布在|s|=Ωc的圆周上。

12

第三章 IIR滤波器的频率响应实例

3.1 用脉冲响应不变法设计IIR低通数字滤波器实例。

数字低通的技术指标为:

Wp=0.2πrad Ap=1dB

T=2s Ws= 0.3πrad As=15dB

程序为:

T=2;

fs=1T; %采样频率为采样周期倒数 Wp=0.2.*pi;

Ws=0.3.*pi; %设计归一化通带阻带截止频率 Ap=1;

As=15;

%设置通带最大最小衰减

[N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %调用butter函数确定巴特沃斯滤波器阶数 [B,A]=butter(N,Wc,'s'); %调用butter函数设计巴特沃斯滤波器

W=linspace(0,pi,400*pi); %指定一段频率值

[D,C]=impinvar(B,A,fs); %调用脉冲不变法¨

Hz=freqz(D,C,W); %·返回频率值| plot(Wpi,abs(Hz)abs(Hz(1))); %绘出巴特沃斯数字低通滤波器的幅频特性曲线 grid on;

13

title('巴特沃斯低通数字滤波器'); xlabel('FrequencyHz'); ylabel('Magnitude'); 得出幅频特性如下图:

巴特沃斯低通数字滤波器1.41.21Magnitude0.80.60.40.2000.10.20.30.40.50.6Frequency/Hz0.70.80.91

3.2 用脉冲响应不变法设计IIR高通数字滤波器实例。

数字高通的技术指标为:Wp=0.4πrad Ap=2dB

T=2s Ws= 0.2πrad As=15dB

程序为: T=2;

14

%采样周期

fs=1T; %采样频率

Wp= 0.4.*pi; Ws= 0.2.*pi;

%设置归一化通带和阻带截止平率 Ap= 2; As=15;

%设置通带最大最小衰减

[N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %调用butter函数确定巴特沃斯滤波器阶数

[B,A]=butter(N,Wc, 'high','s'); %调用butter函数设计巴特沃斯滤波器

W=linspace(0,pi,400*pi); %指定一段频率值

[D,C]=impinvar(B,A,fs); %调用脉冲响应不变法·¨

Hz=freqz(D,C,W); %返回频率响应| plot(Wpi,abs(Hz)abs(Hz(1))); %绘制巴特沃斯数字高通滤波器的幅频响应曲线 grid on;

title('巴特沃斯高通数字滤波器'); xlabel('FrequencyHz'); ylabel('Magnitude'); 得出幅频特性如下图:

15

巴特沃斯高通数字滤波器1.41.351.31.25Magnitude1.21.151.11.05100.10.20.30.40.50.6Frequency/Hz0.70.80.91

3.3 用脉冲响应不变法设计IIR带通数字滤波器实例。

带通滤波器技术指标为:Wp=[0.25π 0.35π]rad Ap=1dB

T=2s Ws=[ 0.15π 0.40π]rad As=10dB

程序为; T=2;

%采样周期

fs=1T;

%采样频率

Wp=[0.25.*pi 0.35.*pi];

Ws=[0.15.*pi 0.4.*pi]; %设置归一化通带和阻带截止平率

16

Ap= 1; As= 10;

%设置通带最大最小衰减

[N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %调用butter函数确定巴特沃斯滤波器阶数

[B,A]=butter(N,Wc,'bandpass','s'); %调用butter函数设计巴特沃斯滤波器

W=linspace(0,pi,400*pi); %指定一段频率值

[D,C]=impinvar(B,A,fs); %调用脉冲响应不变法¨

Hz=freqz(D,C,W); %·返回频率值| plot(Wpi,abs(Hz)); %绘出巴特沃斯数字滤波器的幅频特性曲线 grid on;

title('巴特沃斯带通滤波器'); xlabel('FrequencyHz'); ylabel('Magnitude'); 得出幅频特性如下图:

17

巴特沃斯带通数字滤波器1.41.21Magnitude0.80.60.40.2000.10.20.30.40.50.6Frequency/Hz0.70.80.91

3.4 用脉冲响应不变法设计IIR带阻数字滤波器实例。

带阻滤波器技术指标为:Wp=[0.15π 0.40π]rad Ap=1dB

T=2s Ws=[ 0.25π 0.35π]rad As=11dB 程序为: T=2;

fs=1T;

Wp=[0.15.*pi 0.40.*pi];

Ws=[0.25.*pi 0.35.*pi]; %设置归一化通带和阻带截止平率 Ap= 1; As= 11;

%设置通带最大最小衰减

18

[N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %调用butter函数确定巴特沃斯滤波器阶数 [B,A]=butter(N,Wc,'stop','s'); %调用butter函数设计巴特沃斯滤波器÷

W=linspace(0,pi,400*pi); %指定一段频率值

[D,C]=impinvar(B,A,fs); %调用脉冲响应不变法·¨

Hz=freqz(D,C,W); %·返回频率响应 plot(Wpi,abs(Hz)); %绘出巴特沃斯数字滤波器的幅频特性曲线 grid on;

title('巴特沃斯带阻滤波器'); xlabel('FrequencyHz'); 得出幅频特性如下图:

19

巴特沃斯帯阻数字滤波器1.61.41.210.80.60.40.200.10.20.30.40.50.6Frequency/Hz0.70.80.91

小结:

经观察滤波器幅频特性图得,巴特沃斯滤波器的特点是通带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零。 在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大。

低通滤波器容许低频信号通过, 但减弱(或减少)频率高於截止频率的信号的通过。 高通滤波器容许高频信号通过, 但减弱(或减少)频率低于於截止频率的信号的通过。 带通滤波器容许一定频率范围信号通过, 但减弱(或减少)频率低于於下限截止频率和高于上限截止频率的信号的通过。

带阻滤波器减弱(或减少)一定频率范围信号, 但容许频率低于於下限截止频率和高于上限截止频率的信号的通过。

对于巴特沃斯滤波器低通和带通效果较好,而高通和帯阻效果较差。

3.5(附)滤波信号的输入:

20

t=0:0.1:9;

m=str2double(get(=str2double(get((m.*t); y2=sin(n.*t); y=y1+y2;

% plot(f,abs(fx(n+1))*2N); grid; plot(t,y); grid; 输入信号为:

y=y1+y2=sin(mπ) +sin(n*π); 其中m,n为信号参数。

3.6 滤波的效果

滤波前的信号图: m=2; n=5 滤波后图形;

第四章 界面设定

4.1主界面

在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型,以便得到最佳效果。

21

4.2 软件功能及使用方法。

功能:该软件为IIR巴特沃斯滤波器的模拟软件,可根据参数的不同,设计出不同指标要求的滤波器。并且对固定的信号进行滤波模拟。

使用方法:

1,在信号输入通道中可以选择滤波器种类。 2,在信号输入通道中输入滤波器的参数。

3,点‘输出波形‘按钮即可输出相应滤波器的幅频特性曲线。

4,在信号输入通道中,输入两参数按‘原信号波形‘按钮得以固定原始信号。 5,再按‘滤波后图形‘按钮,得出经滤波后图形。

注:Wph和Wsh两输入只有在带通和帯阻时,输入参数有效。因为带通帯阻时,Wp和Ws都为二维量。带通帯阻为高低通的组合。

总结

22

经过一周的课程设计,使我们学到了很多,并且明白熟练掌握MATLAB软件的使用是非常重要的,整个课程设计过程中,我们都要用到它。在这个课程设计中我们须利用MATLAB设计各种滤波器。其实用MATLAB软件做实验是要细心的,因为很多的语法和常量变量的定义我们都要仔细,一个不小心看错了或者输入不认真是容易出错误。在发现错误时,问了很多同学也问了老师,当发现错误原因时,很多次都是因为自己的不细心造成。但经过思考并仔细检查,最后得以编译成功。在做实验是一定要小心谨慎,也许一个小小的语法错误和常量变量的定义的错误就造成整个程序出现问题,得不到所需的波形,导致实验结果不正确。

采用MATLAB设计滤波器,使原来非常繁琐复杂的程序设计变成了简单的函数调用,为滤波器的设和实现开辟了广阔的天地,尤其是Matlab工具箱使各个领域的研究人员可以直观方便地进行科学研究与工程应用。其中的信号处理工具箱、图像处理工具箱、小波工具箱等更是为数字滤波研究的蓬勃发展提供了可能。MATLAB 信号处理工具箱为滤波器设计及分析提供了非常优秀的辅助设计工具, 在设计数字滤波器时, 善于应用MATLAB进行辅助设计, 能够大大提高设计效率。

参考资料:

1谢平,林洪彬 信号处理原理及应用 北京:机械工程出版社 2008.10 2刘波.MATLAB信号处理[M].北京:电子工业出版社,2006。

3 张圣勤 MATLAB7.0实用教程 北京:机械工程出版社 2006年3月 附录 界面程序:

function varargout = lyl(varargin) % LYL M-file for lyl.fig

% LYL, by itself, creates a new LYL or raises the existing % singleton*. %

% H = LYL returns the *.

23

%

% LYL('CALLBACK', named CALLBACK in LYL.M with the given input arguments. %

% LYL('Property','Value',...) creates a new LYL or raises the % existing singleton*. Starting from the left, property value pairs are

% applied to the GUI before lyl_OpeningFcn gets called. An % unrecognized property name or invalid value makes property application

% stop. All inputs are passed to lyl_OpeningFcn via varargin. %

% *See GUI Options on GUIDE's Tools menu. Choose \allows only one

% instance to run (singleton)\ %

% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to -2012 20:22:38

% Begin initialization code - DO NOT EDIT gui_Singleton = 1;

gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @lyl_OpeningFcn, ... 'gui_OutputFcn', @lyl_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1})

gui_State.gui_Callback = str2func(varargin{1}); end

if nargout

[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else

gui_mainfcn(gui_State, varargin{:}); end

24

% End initialization code - DO NOT EDIT

% --- Executes just before lyl is made visible. function lyl_OpeningFcn() % This function .

% a future version of MATLAB

% command line arguments to lyl (see VARARGIN)

% Choose default command line output for lyl are returned to the command line.

function varargout = lyl_OutputFcn( a future version of MATLAB % edit1_Callback( a future version of MATLAB % , after setting all properties.

function edit1_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit2_Callback( a future version of MATLAB % , after setting all properties.

function edit2_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit3_Callback( a future version of MATLAB % , after setting all properties.

function edit3_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit4_Callback( a future version of MATLAB % , after setting all properties.

function edit4_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit5_Callback( a future version of MATLAB % , after setting all properties.

function edit5_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

25

if ispc && isequal(get( edit6_Callback( a future version of MATLAB % , after setting all properties.

function edit6_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit7_Callback( a future version of MATLAB % , after setting all properties.

function edit7_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit8_Callback( a future version of MATLAB % , after setting all properties.

function edit8_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( edit9_Callback( a future version of MATLAB % , after setting all properties.

function edit9_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( selection change in pushbutton1. function kj1_Callback( a future version of MATLAB % , after setting all properties.

function pushbutton1_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( button press in pushbutton1. function pushbutton1_Callback( a future version of MATLAB % ;

title('°íì????1μíí¨êy×???2¨?÷'); xlabel('FrequencyHz'); ylabel('Magnitude'); else if t==2 T=str2double(get(;

title('°íì????1??í¨êy×???2¨?÷'); xlabel('FrequencyHz'); ylabel('Magnitude');

26

else if t==3 T=str2double(get(;

title('°íì????1′?í¨êy×???2¨?÷'); xlabel('FrequencyHz'); ylabel('Magnitude'); else if t==4

T=str2double(get(; title('°íì????1??×èêy×???2¨?÷'); xlabel('FrequencyHz'); ylabel('Magnitude'); end end end end

% --- Executes on button press in radiobutton1.

function radiobutton1_Callback( a future version of MATLAB % selection change in kj1.

% --- Executes during object creation, after setting all properties. function kj1_CreateFcn( a future version of MATLAB % Windows.

% See ISPC and COMPUTER.

if ispc && isequal(get( button press in pushbutton2. function pushbutton2_Callback( a future version of MATLAB % =str2double(get((m.*t); y2=sin(n.*t); y=y1+y2;

% plot(f,abs(fx(n+1))*2N); grid; plot(t,y); grid;

% --- Executes on button press in pushbutton3.

function pushbutton3_Callback( a future version of MATLAB

27

% =str2double(get((m.*t1); y2=sin(n.*t1); y=y1+y2; if t==1

T=str2double(get(handles.edit5,'String')); fs=1T; %2é?ù?μ?ê?a?ü?úμ1êy Wp=str2double(get(handles.edit1,'String'));

Ws=str2double(get(handles.edit2,'String')); %éè??1éò??ˉí¨′?oí×è′????1?μ?ê

Ap=str2double(get(handles.edit3,'String'));

As=str2double(get(handles.edit4,'String')); %éè??í¨′?×?′óoí×?D??¥??

[N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %μ÷ó?butteroˉêyè·?¨°íì????1??2¨?÷?×êy

[B,A]=butter(N,Wc,'s'); %μ÷ó?butteroˉêyéè??°íì????1??2¨?÷ else if t==2

T=str2double(get(handles.edit5,'String')); %éè??2é?ù?ü?ú fs=1T; %2é?ù?μ?ê?a?ü?úμ1êy Wp= str2double(get(handles.edit1,'String')); Ws=

str2double(get(handles.edit2,'String')); %éè??1éò??ˉí¨′?oí×è′????1?μ?ê

Ap= str2double(get(handles.edit3,'String'));

As= str2double(get(handles.edit4,'String')); %éè??í¨′?×?′óoí×?D??¥?? [N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %μ÷ó?butteroˉêyè·?¨°íì????1??2¨?÷?×êy

[B,A]=butter(N,Wc,

'high','s'); %μ÷ó?butteroˉêyéè??°íì????1??2¨?÷

else if t==3

T=str2double(get(handles.edit5,'String')); %éè??2é?ù?ü?ú c1=str2double(get(handles.edit1,'String')); b1=str2double(get(handles.edit2,'String')); c2=str2double(get(handles.edit6,'String')); b2=str2double(get(handles.edit7,'String'));

28

fs=1T; %2é?ù?μ?ê?a?ü?úμ1êy Wp=[c1 c2];

Ws=[b1 b2]; %éè??1éò??ˉí¨′?oí×è′????1?μ?ê Ap= str2double(get(handles.edit3,'String'));

As= str2double(get(handles.edit4,'String')); %éè??í¨′?×?′óoí×?D??¥?? [N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %μ÷ó?butteroˉêyè·?¨°íì????1??2¨?÷?×êy

[B,A]=butter(N,Wc,'bandpass','s'); %μ÷ó?butteroˉêyéè??°íì????1??2¨?÷ else if t==4

T=str2double(get(handles.edit5,'String')); fs=1T;

c1=str2double(get(handles.edit1,'String')); b1=str2double(get(handles.edit2,'String')); c2=str2double(get(handles.edit6,'String')); b2=str2double(get(handles.edit7,'String')); Wp=[c1 c2];

Ws=[b1 b2]; %éè??1éò??ˉí¨′?oí×è′????1?μ?ê Ap= str2double(get(handles.edit3,'String'));

As= str2double(get(handles.edit4,'String')); %éè??í¨′?×?′óoí×?D??¥?? [N,Wc]=buttord(Wp,Ws,Ap,As,'s'); %μ÷ó?butteroˉêyè·?¨°íì????1??2¨?÷?×êy

[B,A]=butter(N,Wc,'stop','s'); %μ÷ó?butteroˉêyéè??°íì????1??2¨?÷ end end end end

Y=filter(B,A,y); plot(t1,Y);grid;

29