用Matlab设计FIR滤波器的三种方法
使用MATLAB设计FIR滤波器

使⽤MATLAB设计FIR滤波器1. 采⽤fir1函数设计,fir1函数可以设计低通、带通、⾼通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。
语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n, wn, ‘ftype’, window, ‘noscale’)参数的意义及作⽤:b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;n:滤波器的介数;wn:滤波器的截⽌频率,取值范围为0<wn<1,1对应信号采样频率⼀半。
如果wn是单个数值,且ftype参数为low,则表⽰设计截⽌频率为wn的低通滤波器,如果ftype参数为high,则表⽰设计截⽌频率为wn的⾼通滤波器;如果wn是有两个数组成的向量[wn1wn2],ftype为stop,则表⽰设计带阻滤波器,ftype为bandpass,则表⽰设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表⽰设计的第⼀个频带为通带,ftype为DC-0,表⽰设计的第⼀个频带为阻带;window:指定使⽤的窗函数,默认为海明窗;noscale:指定是否归⼀化滤波器的幅度。
⽰例:N=41; %滤波器长度fs=2000; %采样频率%各种滤波器的特征频率fc_lpf=200;fc_hpf=200;fp_bandpass=[200 400];fc_stop=[200 400];%以采样频率的⼀半,对频率进⾏归⼀化处理wn_lpf=fc_lpf*2/fs;wn_hpf=fc_hpf*2/fs;wn_bandpass=fp_bandpass*2/fs;wn_stop=fc_stop*2/fs;%采⽤fir1函数设计FIR滤波器b_lpf=fir1(N-1,wn_lpf);b_hpf=fir1(N-1,wn_hpf,'high');b_bandpass=fir1(N-1,wn_bandpass,'bandpass');b_stop=fir1(N-1,wn_stop,'stop');%求滤波器的幅频响应m_lpf=20*log(abs(fft(b_lpf)))/log(10);m_hpf=20*log(abs(fft(b_hpf)))/log(10);m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);m_stop=20*log(abs(fft(b_stop)))/log(10);%设置幅频响应的横坐标单位为Hzx_f=0:(fs/length(m_lpf)):fs/2;%绘制单位脉冲响应%绘制单位脉冲响应subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');%绘制幅频响应曲线subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);2. 采⽤fir2函数设计,函数算法是:⾸先根据要求的幅频响应向量形式进⾏插值,然后进⾏傅⾥叶变换得到理想滤波器的单位脉冲响应,最后利⽤窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。
实验3 用MATLAB窗函数法设计FIR滤波器

实验10 用MATLAB 窗函数法设计FIR 滤波器一、实验目的㈠、学习用MA TLAB 语言窗函数法编写简单的FIR 数字滤波器设计程序。
㈡、实现设计的FIR 数字滤波器,对信号进行实时处理。
二、实验原理㈠、运用窗函数法设计FIR 数字滤波器与IIR 滤波器相比,FIR 滤波器在保证幅度特性满足技术要求的同时,很容易做到有严格的线性相位特性。
设FIR 滤波器单位脉冲响应)(n h 长度为N ,其系统函数)(z H 为∑-=-=10)()(N n n zn h z H)(z H 是1-z 的)1(-N 次多项式,它在z 平面上有)1(-N 个零点,原点0=z 是)1(-N 阶重极点。
因此,)(z H 永远是稳定的。
稳定和线性相位特性是FIR 滤波器突出的优点。
FIR 滤波器的设计任务是选择有限长度的)(n h ,使传输函数)(ωj e H 满足技术要求。
主要设计方法有窗函数法、频率采样法和切比雪夫等波纹逼近法。
本实验主要介绍用窗函数法设计FIR 数字滤波器。
图7-10-1 例1 带通FIR 滤波器特性㈡、 用MATLAB 语言设计FIR 数字滤波器例1:设计一个24阶FIR 带通滤波器,通带为0.35<ω<0.65。
其程序如下b=fir1(48,[0.35 0.65]);freqz(b,1,512)可得到如图7-10-1 所示的带通FIR滤波器特性。
由程序可知,该滤波器采用了缺省的Hamming窗。
例2:设计一个34阶的高通FIR滤波器,截止频率为0.48,并使用具有30dB波纹的Chebyshev窗。
其程序如下Window=chebwin(35,30);b=fir1(34,0.48,'high',Window);freqz(b,1,512)可得到如图7-10-2 所示的高通FIR滤波器特性。
图7-10-2 例2 高通FIR滤波器特性例3:设计一个30阶的低通FIR滤波器,使之与期望频率特性相近,其程序如下 f=[0 0.6 0.6 1];m=[1 1 0 0];b=fir2(30,f,m);[h,w]=freqz(b,1,128);plot(f,m,w/pi,abs(h))结果如图7-10-3所示。
基于Matlab的FIR滤波器设计与实现

基于Matlab的FIR滤波器设计与实现⼀、摘要 前⾯⼀篇⽂章介绍了通过FDATool⼯具箱实现滤波器的设计,见“”,这⾥通过⼏个例⼦说明采⽤Matlab语⾔设计FIR滤波器的过程。
⼆、实验平台 Matlab7.1三、实验原理 以低通滤波器为例,其常⽤的设计指标有:1. 通带边缘频率f p(数字频率为Ωp)2. 阻带边缘频率f st (数字频率为Ωst)3. 通带内最⼤纹波衰减δp=-20log10(1-αp),单位为 dB4. 阻带最⼩衰减αs=-20log10(αs),单位为 dB5. 阻带起伏αs6. 通带峰值起伏αp 其中,以1、2、3、4条最为常⽤。
5、6条在程序中估算滤波器阶数等参数时会⽤到。
数字频率 = 模拟频率/采样频率四、实例分析例1 ⽤凯塞窗设计⼀FIR低通滤波器,通带边界频率Ωp=0.3pi,阻带边界频率Ωs=0.5pi,阻带衰减δs不⼩于50dB。
⽅法⼀:⼿动计算滤波器阶数N和β值,之后在通过程序设计出滤波器。
第⼀步:通过过渡带宽度和阻带衰减,计算滤波器的阶数B和β值。
第⼆步:通过程序设计滤波器。
程序如下:b = fir1(29,0.4,kaiser(30,4.55));[h1,w1]=freqz(b,1);plot(w1/pi,20*log10(abs(h1)));axis([0,1,-80,10]);grid;xlabel('归⼀化频率/p') ;ylabel('幅度/dB') ;波形如下:⽅法⼆:采⽤[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得到凯塞窗滤波器。
这⾥的函数kaiserord(f,a,dev)或者kaiserord(f,a,dev,f s): f为对应的频率,f s为采样频率;当f⽤数字频率表⽰时,f s则不需要写。
a=[1 0]为由f指定的各个频带上的幅值向量,⼀般只有0和1表⽰;a和f长度关系为(2*a的长度)- 2=(f的长度) devs=[0.05 10^(-2.5)]⽤于指定各个频带输出滤波器的频率响应与其期望幅值之间的最⼤输出误差或偏差,长度与a相等,计算公式:阻带衰减误差=αs,通带衰减误差=αp,可有滤波器指标中的3、4条得到。
完整版使用MATLAB设计ISE中FIR滤波器系数方法

使用 MATLAB 设计 ISE中 FIR 滤波器系数的方法
1、翻开 MATLAB,在命令行窗口输入“fdatool”,翻开“Filter Designer& Analysis Tool”工具。
以下列图所示:
2、因为 FPGA中滤波器的系数需要为整数,所以需要在此处将系数设置为“Fixed
-point ”种类。
点击上图中红色方框内的按钮,在新出现的页面中将“ Filter arithmetic ”设置为“ Fixed -point ”。
设置达成后以下列图所示:
3、点击上图中红色方框内的按钮,进入滤波器参数设置页面,在此中设置采样
频次( Fs)、通带频次( Fpass)、阻带频次( Fstop )以及阻带衰减( Astop )等参数,并按最下边的“ Design Filter”按钮生成滤波器系数。
以下列图所示,采样频次为 62MHz,通带频次为 2MHz,阻带频次为 4MHz,阻带衰减为 -80dB。
4、而后导出 coe 文件,点击下列图方框中的按钮即可导出coe 文件:
5、在 ISE 中新建一个 FIR 滤波器 IP 核,在第一页设置中将“ Select Source ”改为“ COE File ”,而后在下边选择上一步生成的 coe 文件即可。
用MAtlab实现FIR数字滤波器的设计

设计方法
• 一、窗函数设计法 • 二、频率抽样设计法 • 三、最小二乘逼近设计法
FIR 数 字 滤 波 器 的 文 件
一、fir1.m
• 本文件采用窗函数法设计FIR数字滤波器,其调用格式是
• 1)b=fir1(N ,W c)
• 2)b=fir1(N,W c ,’high’) • 3)b=fir1(N,W c ,’stop’)
实践课题
FIR 数 字 滤 波 器 的 设 计
实践目的
通过实践加深对Matlab软件的认识。 能熟练应用并基本掌握Matlab软件, 通过实践对课本以外的内容有初步的 了解。 通过设计FIR数字滤波器,对滤波器 的功能和原理有初步的认识和了解。
实践课题简介
在数字信号处理的许多领域中, 如图像处理、数字通信等领域,常 常要求滤波器具有线性相位。FIR数 字滤波器的最大优点就是容易设计 成线性相位特性,而且它的单位冲 激响应是有限长的,所以它永远是 稳定的。
•
Hale Waihona Puke 上式中N为滤波器的阶次,W c是通带截止频率,其值在0~1之间, 1对应采样频率的一半,b是设计好的滤波器系数(单位冲激响应序 列)其长度为N+1。
对于格式(1)若W c是一标量,则可用来设计低通滤波器;若W c 是 的向量,则用来设计带通滤波器。 格式(2)用来设计高通滤波器。 格式(3)用来设计带阻滤波器。
部分滤波器的例子(频率抽样法)
部分滤波器的例子(最小二乘逼近设计法)
Fircls1设计的低通滤波器,归一化截止频率 为0.3,通带波纹为0.02,阻带波纹为0.008。
实践总结
通过这次实践课题的设计与制作,使我 对Matlab这个软件有了进一步的了解,并且 加深了课本上的知识。与此同时,使我对 滤波器有了初步的认识。提高了我的理解 以及分析能力,理论和实践相结合,不仅 巩固了我的理论知识,同时更提高了我的 实践能力,使我受益匪浅。
matlab用布莱克曼窗设计fir滤波器代码

matlab用布莱克曼窗设计fir滤波器代码如何使用Matlab设计带有布莱克曼窗的FIR滤波器。
布莱克曼窗是一种用于设计数字滤波器的常见窗函数之一。
它具有非常好的频域特性,可以用于实现各种滤波器,比如低通、高通、带通、带阻等。
在本文中,我们将详细介绍如何使用Matlab来设计带有布莱克曼窗的FIR 滤波器。
步骤1:确定设计规格在设计FIR滤波器之前,我们首先需要确定滤波器的一些规格,如滤波器的类型(低通、高通等)、截止频率、阶数等。
这些规格将决定最终滤波器的性能。
假设我们要设计一个低通滤波器,截止频率为0.2,阶数为50。
步骤2:计算滤波器系数使用Matlab的fir1函数可以计算出FIR滤波器的系数。
该函数的使用语法如下:h = fir1(N, Wn, window)其中,N表示滤波器的阶数,Wn表示归一化的截止频率,window表示所采用的窗函数。
对于布莱克曼窗,我们可以使用matlab中的blackman函数来生成窗函数:window = blackman(N+1)在这里,我们需要注意一个细节:由于Matlab的fir1函数使用的是双边频率表示法,而我们通常使用的是单边频率表示法。
因此,我们需要将截止频率进行一些处理,将其从正常范围[0, 0.5]映射到[-0.5, 0.5]上。
Wn = 2 * 0.2完成上述计算后,我们可以编写Matlab代码如下:N = 50;Wn = 2 * 0.2;window = blackman(N+1);h = fir1(N, Wn, window);步骤3:绘制滤波器的频率响应为了验证我们设计的滤波器效果,我们可以绘制其频率响应。
使用freqz 函数可以绘制滤波器的幅频特性:freqz(h,1)上述代码将绘制出滤波器的振幅响应和相位响应。
步骤4:应用滤波器完成滤波器的设计后,我们可以将其应用于信号上。
假设我们有一个需要滤波的信号x,我们可以使用filter函数实现滤波效果:y = filter(h, 1, x)其中,x表示输入信号,y表示输出信号。
matlab 信号过fir数字滤波器设计
一、概述Matlab 是一种用于算法开发、数据分析和可视化的高级技术计算语言和交互式环境。
在信号处理领域,Matlab 是一种非常强大的工具,可以用来设计和实现数字滤波器。
本文将重点介绍如何使用 Matlab 过FIR (Finite Impulse Response) 数字滤波器设计。
二、FIR 数字滤波器概述FIR 数字滤波器是一种常见的数字滤波器,它的特点是其单位脉冲响应有限,并且没有反馈。
FIR 滤波器的频率响应可以通过其线性相位特性来描述,因此在许多应用中非常有用。
三、Matlab 中的 FIR 数字滤波器设计工具Matlab 中提供了许多用于数字滤波器设计的工具,其中包括 fdatool 和 fir1 函数。
1. fdatoolfdatool 是 Matlab 中的一个交互式工具,可以帮助用户设计各种类型的数字滤波器。
用户可以通过图形界面选择滤波器类型、滤波器阶数、截止频率等参数,并实时查看滤波器的频率响应和单位脉冲响应。
使用 fdatool 可以快速方便地设计出所需的 FIR 数字滤波器。
2. fir1 函数fir1 函数是 Matlab 中用于设计标准的低通、高通、带通和带阻 FIR数字滤波器的函数。
用户可以通过指定滤波器类型、截止频率、滤波器阶数等参数来调用 fir1 函数,从而得到所需的数字滤波器的系数。
四、利用 Matlab 设计 FIR 数字滤波器的步骤1. 确定滤波器类型首先要确定所需的数字滤波器的类型,包括低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
2. 确定滤波器的频率特性根据具体的应用需求,确定滤波器的截止频率、通带和阻带的大小,以及过渡带的宽度等参数。
3. 计算滤波器的系数根据所需的滤波器类型、频率特性和滤波器阶数等参数,使用 fdaool 工具或 fir1 函数计算出滤波器的系数。
4. 应用滤波器将得到的滤波器系数应用到需要滤波的信号上,即可得到滤波后的信号。
matlabfir滤波器设计
matlabfir滤波器设计由于滤波器设计的复杂性,在matlab中完成滤波器设计过程可以减少大量的计算工作,下面将介绍在matlab中的FIR滤波器的设计。
一、matlab入口1. matlab工作环境:(1)安装matlab软件,在matlab中运行“dspstart”,启动数字信号处理的工作环境,包括了一些常用处理的函数和示例程序,在这种环境下可以进行滤波器设计的研究。
(2)matlab可以完成离散时间信号处理,因此,滤波器的设计需要在离散时间信号领域完成,即用离散时间信号的算法来完成滤波器设计。
2. matlab工具箱:(1)安装滤波器设计工具箱,这是一个专门用于滤波器设计的matlab库,包括了四种基本滤波器:抗谐波滤波器(notched filter),低通滤波器(low pass filter),带阻滤波器(band stop filter),以及带通滤波器(band pass filter)。
(2)安装滤波器设计高级工具箱,这是一个高级的matlab 库,可以支持滤波器的更复杂的设计,包括滤波器的参数优化,非线性滤波器,以及多种滤波器结构的数字滤波器。
3. matlab辅助性的工具:(1)安装滤波器设计助手,这是一个滤波器设计的可视化工具,可以帮助滤波器的初学者快速上手,了解滤波器设计的基本思想,并运行滤波器的例子及示例程序。
(2)安装滤波器设计指南,这是一个matlab脚本文件,可以帮助滤波器的更高级的使用者了解滤波器设计的原理,以及各种滤波器的不同之处,可以大大提高滤波器的设计效率。
二、 matlab 滤波器设计思路1. FIR滤波器的设计:(1)首先要明确滤波器的工作频率范围,记录滤波器的输入信号精度以及输出精度。
(2)设计滤波器的类型,选择适用于该频率范围内的滤波器类型,如低通滤波器,带阻滤波器等。
(3)定义滤波器的功率频谱,根据滤波器的类型,定义滤波器的功率频谱,包括最大值,超调因数以及滤波器的边带幅度。
基于MATLAB的FIR滤波器的设计
用F T o设计和分析模块 电路 ,经过S h k DA o l i n 仿真 ,对其进行时域 、频域 分析和滤波 。实验结果表明, 计 mu 本设
方法能够 有效 的滤除 无用信号 , 直观 简便 , 高了信号的提取效果 。 提
【] 王蔚 . 4 MAT A L B环境 下 的数字 滤波 器设 计及其 应用 【 . 州 : 州大学 ,0 23 — 8 D1 苏 苏 20 : 3 . 6
图 3滤 波 前 信 号 源 波 形
【] CO 1 E J G a b u M , n J H . 9 , r m s Y e , b O j Li 1 91 F O
2 1 年 8月 01 第 8期
电 子 测 试
EL EC T RON I C T EST
Aug. 2011 No8 .
基 于 MAT A L B的F R滤 波 器 的设 计 ★ I
段佳佳 ,樊龙龙 ,张波涛
( 中北大学 信息探测与处理技术研 究所 太原 0 0 5 ) 3 0 1 摘要 :基于MA L B信号处理工具 箱 ,设计一种 滤波器 ,针对 信号的分离和 滤除 ,要求有 良好的幅频特 和 TA
幅频特性为 l e I 1 且无相移的理想带通滤波器 H( ) , =
图2滤 波器 幅频特性
的 响应 HaP 表 频率 ( ) 达式为 :
, 『 、 w
从图 2中来看,对于 0 z 10 H , 1H 到 40 H H 到 00 z 40 z 2 00 z
I P , ll 一 1 , ≤W≤ ×
[】 M o a d M o h a i i h lM a i .M AT AB 与 3 h n k t r, c e M re L
MATLAB仿真实现FIR滤波器设计(采用频率抽样法)
数字信号处理 课程实验报告实验指导教师:黄启宏实验名称 MATLAB 仿真实现FIR 滤波器设计(采用频率抽样法)专业、班级电子与通信工程姓 名张帅实验地点 仿古楼301实验日期2013.11.10一、实验内容采用频率抽样法设计FIR 滤波器设计。
二、实验目的(1)掌握频率抽样法设计FIR DF 方法;(2)掌握一类线性相位和二类线性相位适用的原则; (3)在实验的过程中发现影响设计滤波器的性能的因素。
三、实验原理(1)若频率响应是()jwd He ,是连续频率ω的周期函数,对其抽样,使每一个周期内有N 个抽样值,即22()()|()k jk jwNd d d w kNH k H e H eππ===根据N为偶数还是奇数,采用一类线性相位还是二类线性相位,从而指定()d H k 。
(2)由指定的()d H k 构成所设计的滤波器的转移函数()H z ,从而设计出滤波器的频率响应()jw d H e 。
四、涉及实验的相关情况介绍(包含使用软件或实验设备等情况)一台安装MATLAB 软件的电脑五、实验记录程序、相关的图形、相关数据记录及分析)((1)低通%设计低通滤波器,采用第一类线性相位;clearN=33;%输入频率采样后的Hk序列;Hk=[ones(1,9) zeros(1,16) ones(1,8)];k=0:N-1;hn=real(ifft(Hk.*exp(-j*pi*(N-1)*k/N)));%HK逆快速傅里叶变换求出hn;[H w]=freqz(hn,1);%求频率响应;subplot(121)%绘图;stem(k,Hk,'.');axis([0 32 0 1.2]);grid on;xlabel('k')ylabel('|Hk|')subplot(122)plot(w/pi,20*log10(abs(H)),'k-');axis([0 1 -60 10]);grid on;xlabel('归一化频率/\pi')ylabel('幅度/dB')(2)高通%设计高通滤波器;clearN=33;Hk=[zeros(1,8) ones(1,18) zeros(1,7)];%输入频率采样后的Hk序列;k=0:N-1;hn=real(ifft(Hk.*exp(-j*pi*(N-1)*k/N)));%HK逆快速傅里叶变换求出hn;[H w]=freqz(hn,1);%求频率响应;subplot(121)%绘图;stem(k,Hk,'.');axis([0 32 0 1.2]);grid on;xlabel('k')ylabel('|Hk|')subplot(122)plot(w/pi,20*log10(abs(H)));axis([0 1 -60 10]);grid on;xlabel('归一化频率/\pi')ylabel('幅度/dB')(3)带通%设计带通滤波器,采用第一类线性相位;clearN=33;Hk=[zeros(1,4) ones(1,6) zeros(1,13) ones(1,6) zeros(1,4)];%输入频率采样后的Hk序列;k=0:N-1;hn=real(ifft(Hk.*exp(-j*pi*(N-1)*k/N)));%HK逆快速傅里叶变换求出hn;[H w]=freqz(hn,1);%求频率响应;subplot(121)%绘图;stem(k,Hk,'.');axis([0 32 0 1.2]);grid on;xlabel('k')ylabel('|Hk|')subplot(122)plot(w/pi,20*log10(abs(H)),'k-');axis([0 1 -60 10]);grid on;xlabel('归一化频率/\pi')ylabel('幅度/dB')(4)带阻%书本7.2,P357;设计带阻滤波器;clearN=33;Hk=[ones(1,3) zeros(1,3) ones(1,20) zeros(1,2) ones(1,5)];%输入频率采样后的Hk序列;k=0:N-1;hn=real(ifft(Hk.*exp(-j*pi*(N-1)*k/N)));%HK逆快速傅里叶变换求出hn;[H w]=freqz(hn,1);%求频率响应;subplot(121)%绘图;stem(k,Hk,'.');axis([0 32 0 1.2]);grid on;xlabel('k')ylabel('|Hk|')subplot(122)plot(w/pi,20*log10(abs(H)));axis([0 1 -10 1]);grid on;xlabel('归一化频率/\pi')ylabel('幅度/dB')六、实验总结01020300.20.40.60.81k|H k |0.51-60-50-40-30-20-1010归一化频率/幅度/d B(低通)01020300.20.40.60.81k|H k |0.51-60-50-40-30-20-1010归一化频率/π幅度/d B(过渡带增宽低通)02040600.20.40.60.81k|H k |0.51-60-50-40-30-20-1010归一化频率/π幅度/d B(增加采样点数低通)01020300.20.40.60.81k|H k |0.51-60-50-40-30-20-1010归一化频率/幅度/d B(高通)01020300.20.40.60.81k|H k |0.51-60-50-40-30-20-1010归一化频率/π幅度/d B(带通)01020300.20.40.60.81k|H k |0.51-10-9-8-7-6-5-4-3-2-101归一化频率/π幅度/d B(带阻)由上面图例得到的结论:(1)在总的采样点不变的前提下,过渡带的采样值不同直接影响到滤波器的频率特性,在取得最优的采样点时,最小阻带衰减最大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法
摘要介绍了利用MATLAB信号处理工具箱进行FIR滤波器设计的三种方法:程序设计法、FDATool设计法和SPTool设计法,给出了详细的设计步骤,并将设计的滤波器应用到一个混和正弦波信号,以验证滤波器的性能。
关键词 MATLAB,数字滤波器,有限冲激响应,窗函数,仿真
1 前言
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
根据其单位冲激响应函数的时域特性可分为两类:无限冲激响应(IIR)滤波器和有限冲激响应(FIR)滤波器。
与IIR滤波器相比,FIR的实现是非递归的,总是稳定的;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特性。
因此,它在高保真的信号处理,如数字音频、图像处理、数据传输、生物医学等领域得到广泛应用。
2 FIR滤波器的窗函数设计法 FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。
窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为:
(1) 通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。
(2) 由性能指标确定窗函数W(n)和窗口长度N。
(3) 求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。
(4) 检验滤波器性能。
本文将针对一个含有5Hz、15Hz和30Hz的混和正弦波信号,设计一个FIR带通滤波器,给出利用MATLAB实现的三种方法:程序设计法、 FDATool设计法和SPTool设计法。
参数要求:采样频率fs=100Hz,通带下限截止频率fc1=10 Hz,通带上限截止频率
fc2=20 Hz,过渡带宽6 Hz,通阻带波动0.01,采用凯塞窗设计。
2 程序设计法
MATLAB信号处理工具箱提供了各种窗函数、滤波器设计函数和滤波器实现函数。
本文的带通滤波器设计及滤波程序如下:
[n,Wn,beta,ftype]=kaiserord([7 13 17 23],[0 1 0],[0.01 0.01 0.01],100);
%得出滤波器的阶数n=38,beta=3.4
w1=2*fc1/fs; w2=2*fc2/fs;%将模拟滤波器的技术指标转换为数字滤波器的技术指标
window=kaiser(n+1,beta);%使用kaiser窗函数
b=fir1(n,[w1 w2],window);使用标准频率响应的加窗设计函数fir1
freqz(b,1,512);%数字滤波器频率响应
t = (0:100)/Fs;
s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);%混和正弦波信号
sf = filter(b,1,s);%对信号s进行滤波
程序执行的结果如图1所示:
(1)滤波器幅频特性和相频特性(2)滤波前后的波形
图1 滤波器特性和滤波效果图
4 FDATool设计法
FDATool(Filter Design & Analysis Tool)是MATLAB信号处理工具箱专用的滤波器设计分析工具,操作简单、灵活,可以采用多种方法设计FIR和IIR滤波器。
在MATLAB命令窗口输入FDATool后回车就会弹出FDATool界面。
4.1 带通滤波器设计
已知滤波器的阶数n=38,beta=3.4。
本例中,首先在Filter Type中选择Bandpass;在Design Method选项中选择FIR Window,接着在Window选项中选取Kaiser,Beta值为3.4;指定Filter Order项中的Specify order为38;采样频率Fs=100Hz,截止频率
Fc1=10Hz,Fc2=20Hz。
设置完以后点击窗口下方的Design Filter,在窗口上方就会看到所设计滤波器的幅频响应,通过菜单选项Analysis还可以看到滤波器的相频响应、组延迟、脉冲响应、阶跃响应、零极点配置等。
设计完成后将结果保存为kaiser15.fda文件。
4.2 Simulink仿真
在Simulink环境下,将滤波器文件kaiser15.fda导入Digital Filter Design模块,输入信号为s(t)=sin(10πt)+sin(30πt)+sin(60πt),生成的仿真图和滤波效果如图2所示。
(1)Simulink仿真图(2)滤波前后的离散波形
图2 Simulink仿真图和滤波效果图
5 SPTool设计法
SPTool是MATLAB信号处理工具箱中自带的交互式图形用户界面工具,它包含了信号处理工具箱中的大部分函数,可以方便快捷地完成对信号、滤波器及频谱的分析、设计和浏览。
在本例中按以下步骤完成滤波器的设计和滤波:
创建并导入信号源。
在MATLAB命令窗口输入命令:
Fs=100;t = (0:100)/Fs;
s = sin(2*pi*t*5)+sin(2*pi*t*15)+sin(2*pi*t*30);
此时,变量Fs、t、s将显示在workspace列表中。
在命令窗口键入Sptool,将弹出Sptool 主界面,如图3所示;点击菜单File/Import将信号s导入并取名为s。
(2)单击Filters列表下的New,按照参数要求设计出滤波器filt1,具体步骤类似于
3.2.1。
(3)将滤波器filt1应用到s信号序列。
分别在Signals、Filters、Spectra列表中选择s、filt1、mtlbse,单击Filters列表下的Apply按钮,在弹出的Apply Filter对话框中将输出信号命名为sin15hz。
(4)进行频谱分析。
在Signals中选择s,单击Spectra下的Create按钮,在弹出的Spectra Viewer界面中选择Method为FFT,Nfft=512,单击Apply按钮生成s的频谱
spect1。
同样的步骤可以生成信号sin15hz的频谱spect2。
分别选中信号s、sin15hz、spect1、spect2,单击各自列表下方的View按钮,即可观察他们的波形,如图4所示。
图3 SPTool主界面图4 滤波前后的时域波形和频域特性
由图4可以看出,带通滤波器filt1使输入信号s中频率为15hz的正弦波信号通过,而将频率为5hz和30hz的正弦波信号大大衰减。
6 结束语
本文通过一个设计实例,介绍了利用MATLAB实现 FIR滤波器设计与滤波的三种方法,从仿真结果可以看出它们均可以达到技术指标要求,而且方法简单、快捷,大大减轻了工作量。
滤波器的设计工作完成后,可以借助于MATLAB的export操作导出所设计滤波器的系统函数H(z)。
由于MATLAB具有强大的接口功能,仿真后的结果可以很方便的移植到 DSP、CPLD或FPGA等器件中。
在实际应用中,只需按要求修改滤波器参数,并对程序作较少的改动,即可实现不同截止频率的FIR滤波器,实用性较强。