FIR数字滤波器的Matlab实现
FIR数字滤波器的MATLAB实现
综合性、设计性实验报告贺鹤学号201308002118专业通信工程班级通信1301班实验课程名称FIR数字滤波器的MATLAB实现指导教师及职称玲香讲师开课学期至学年学期上课时间2015 年12月24、31日科技学院教务处编印单位脉冲响应。
⑤ 求)(jw d e H ,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N ,重复上述设计过程,以得到满意的结果。
(2)实验用MATLAB 函数可以调用MATLAB 工具箱函数fir1实现本实验所要求的线性相位FIR-DF 的设计,调用一维快速傅立叶变换函数fft 来计算滤波器的频率响应函数。
fir1是用窗函数法设计线性相位FIRDF 的工具箱函数,调用格式如下:hn=fir1(N, wc, ‘ftype ’, window)fir1实现线性相位FIR 滤波器的标准窗函数法设计。
hn=fir1(N,wc)可得到6 dB 截止频率为wc 的N 阶(单位脉冲响应h(n)长度为N+1)FIR 低通滤波器,默认(缺省参数windows)选用hammiing 窗。
其单位脉冲响应h(n)满足线性相位条件:h(n)=h(N-1-n)其中wc 为对π归一化的数字频率,0≤wc ≤1。
当wc=[wc1, wc2]时,得到的是带通滤波器。
hn=fir1(N,wc,’ftype ’)可设计高通和带阻滤波器。
当ftype=high 时,设计高通FIR 滤波器; 当ftype=stop 时,设计带阻FIR 滤波器。
应当注意,在设计高通和带阻滤波器时,阶数N 只能取偶数(h(n)长度N+1为奇数)。
不过,当用户将N 设置为奇数时,fir1会自动对N 加1。
hn=fir1(N,wc,window)可以指定窗函数向量window 。
如果缺省window 参数,则fir1默认为hamming 窗。
可用的其他窗函数有Boxcar, Hanning, Bartlett, Blackman, Kaiser 和Chebwin 窗。
FIR数字滤波器的MATLAB实现
n=[0:1:Nw-1]; wc1=(ws1+wp1)/2; wc2=(ws2+wp2)/2;
alpha=(Nw-1)/2; m=n-alpha+0.00001; %如果不加 0.00001,当 n= alpha 时,m 为 0,下式分母为 0,不能执行 hd=sin(wc2*m)./(pi*m)- sin(wc1*m)./(pi*m); %理想滤波器的冲激响应
作为 FIR 滤波器的系数。 常用的窗函数有矩形窗、海明窗和布莱克曼窗等。
7.2.2
用窗函数法设计 FIR 滤波器
Matlab 设计 FIR 滤波器有多种方法和对应的函数,见表 7-1。 表 7-1 matlab 设计 FIR 滤波器的方法和函数 方法 窗方法 多带方法 最小二乘法 任意响应法 余弦法 描述 使用窗函数和逆傅立叶变换实现 包含子带频率域 使用最小二乘法将整个频率域上的错误 几率压缩到最小 使用任意响应, 包括非线性相位以及复滤 波器 使用三角函数的低通响应 函数 fir1,fir2,kaiserord 等 firls,remez 等 fircls ,fircls1 等 cremez 等 firrcos 等
第7章
FIR 数字滤波器的 Matlab 实现
7.1 实验目的
学习用窗函数法设计 FIR 数字滤波器的原理及其设计步骤; 学习编写数字滤波器的设计程序的方法,并能进行正确编程; 根据给定的滤波器指标,给出设计步骤。
7.2 实验原理及实例分析 7.2.1 FIR 低通数字滤波器的设计原理
如果系统的冲激响应 hd ( n) 为已知,则系统的输入/输出关系为:
wp=0.2*pi; ws=0.3*pi; tr_width=ws-wp; %通带宽度 N=ceil(6.6*pi/tr_width)+1; %滤波器长度 if rem(N,2)==0 N=N+1; end Nw=N; %滤波器长度为奇数 n=[0:1:Nw-1]; wc=(ws+wp)/2; %截止频率 alpha=(Nw-1)/2; m=n-alpha+0.00001; %如果不加 0.00001,当 n= alpha 时,m 为 0,下式分母为 0,不能执行 hd=sin(wc*m)./(pi*m); %理想滤波器的冲激响应
使用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滤波器系数。
FIR数字滤波器在MATLAB中的实现
FIR数字滤波器在MATLAB中的实现淮北师范大学信息学院2 012届学士学位论文FIR数字滤波器在MATLAB中的实现系别:专业:学号:姓名:指导教师:指导教师职称:2012年 5 月 10 日FIR数字滤波器在MATLAB中的实现姓名学校名邮编摘要数字滤波器是由数字乘法器、加法器和延时单元组成的一种装置。
数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
近年来数字滤波在通信、图像编码、语言编码、雷达等许多领域中有着十分广泛的应用。
本文首先介绍了数字滤波器的研究背景及其发展现状,然后介绍了FIR数字滤波器的设计原理。
在理解设计方法的基础上,最后基于MATLAB软件利用窗函数法实现了FIR数字带通滤波器的设计。
仿真结果表明,所设计的滤波器具有良好的滤波器特性,所设计的指标符合设计任务要求。
关键词MATLAB;FIR数字滤波器;窗函数;带通滤波器Realization of FIR Digital Filter Based On matlabName###########################Abstract Digital Filter is a kind of instrument which is assembled with Digital multiplier, adder, and delay element , the function of the Digital Filter is operating and dealing with the digital code of discrete signal which is inputted to change the frequency spectrum . In recent years , Digital Filter is widely applied to all kinds of areas, such as Signal communication, image coding ,language coding ,radar and so on.This paper firstly introduces the studying background and current developing status of Digital FIR Filter, and then shows its design principle .Finally we realize the design of FIR Bandpass Digital Filter with Window Function based MATLAB software at the basement of understanding design methods. The outcome of simulation indicates that the Digital Filter does well in meeting the filter characters, at the same time ,indexes from the filter complies with the design requirements.Keywords MATLAB; FIR Filter; Window Function Design; Band Pass Filter目次1 引言 (1)1.1 数字滤波器的研究背景和意义 (1)1.2 数字滤波器的发展及其现状 (1)1.3 数字滤波器的实现方法 (2)1.4 MATLAB简介 (2)2 FIR数字滤波器的设计原理 (4)2.1 FIR数字滤波器的特点 (4)2.2 FIR数字滤波器的实现结构 (4)2.3 窗函数法的设计原理 (7)3 FIR数字滤波器的设计与实现 (10)3.1几种常用的窗函数 (10)3.2 利用窗函数设计FIR带通滤波器的设计步骤 (14)3.3 基于MATLAB的FIR数字带通滤波器的仿真实现 (15)结论 (20)参考文献 (21)致谢 (22)1 引言在线性系统中,信号滤波过程一般定义为,当输入波形通过一个系统时,对它作一个线性运算,在时间域上这种变换如像内插,外插微分和积分,在频率域上这种变换则如低通滤波或平滑,带通滤波,谱设计和谱分析。
用matlab实现FIR滤波器的设计
N N n), n 1, 2, …, 。此时 H ( ) 对 呈奇对称。但是 2 2
H ( ) 0 ,故高通滤波器不能用这种方法实现。Ⅱ型滤波器的幅频函数可
以通过例程 2-2 的 MATLAB 语言实现,曲线图如图 2.2 所示。 例程 2-2 Ⅱ型滤波器幅频函数
function[Hr,w,b,L]=hr_type2(h); %计算所设计的Ⅱ型滤波器的振幅响应 %Hr=振幅响应 %a=Ⅱ型滤波器的系数 %L=Hr 的阶次 %h=Ⅱ型滤波器的单位冲激响应 M=length(h); L=M/2;
1
从结构上来说,IIR 滤波器必须采用递归结构,极点位置必须在单位 圆内,否则系统将不稳定。另外,在这种结构中,由于运算过程中对序列 的舍入处理,这种有限字长效应有时会引入寄生振荡。相反,FIR 滤波器 主要采用非递归结构,不论在理论上还是在实际的有限精度运算中都不存 在稳定性问题,运算误差也较小 [2] 。此外,FIR 滤波器可以采用快速傅里 叶变换算法,在相同阶数的条件下,运算速度可以快得多。 从设计工具上来说,IIR 滤波器可以借助模拟滤波器的成果,因此一 般都有有效的封闭形式的设计公式可供参考,计算工作量比较小,而且对 计算工具的要求不高;FIR 滤波器一般没有封闭形式的设计工具。窗函数 法设计 FIR 滤波器也仅给出了窗函数的计算公式,但是在计算通带阻带衰 减时无明显表达式。一般 FIR 滤波器的设计只有计算程序可循,因此它对 计算工具要求较高。 另外,相比 IIR,FIR 系统只有零点,因此系统总是稳定的,所以能够 获得严格的线性相位。IIR 滤波器虽然设计简单,但主要用于设计具有片 段常数特性的滤波器,如低通、高通、带通及带阻等,往往脱离不了模拟 滤波器的格局。而 FIR 滤波器则要灵活得多,易于实现某些特殊功能的应 用。 综上所述,IIR 和 FIR 滤波器各有所长,所以在实际应用中,选择滤 波器型号时,应该从多方面加以考虑。 FIR 数字滤波器的实现,大体可以分为软件和硬件实现两种。软件方法 速度慢,难以对信号进行实时处理,虽然可以用快速傅立叶变换算法来加 快计算速度 ,但很难达到实时处理的要求,因而多用于教学与科研。硬件 实现主要采用以下两种方法:(1)采用 DSP(Digital Signal Processing) 处理器来实现。 (2)采用固定功能的专用信号处理器。但这两种方法实现 起来比较困难。 FIR 相对于 IIR 滤波器有许多独特的优越性,在保证满足滤波器幅频 响应要求的同时还可获得严格的线性相位特性,从而保持稳定。对非线性
基于MATLAB设计FIR滤波器
基于MATLAB设计FIR滤波器FIR(Finite Impulse Response)滤波器是一种数字滤波器,它具有有限的冲激响应长度。
基于MATLAB设计FIR滤波器可以使用signal工具箱中的fir1函数。
fir1函数的语法如下:b = fir1(N, Wn, window)其中,N是滤波器的阶数,Wn是截止频率,window是窗函数。
要设计一个FIR低通滤波器,可以按照以下步骤进行:步骤1:确定滤波器的阶数。
阶数决定了滤波器的截止频率的陡峭程度。
一般情况下,阶数越高,滤波器的陡峭度越高,但计算复杂度也会增加。
步骤2:确定滤波器的截止频率。
截止频率是指在滤波器中将信号的频率限制在一定范围内的频率。
根据应用的需求,可以选择适当的截止频率。
步骤3:选择窗函数。
窗函数是为了在时域上窗口函数中心增加频率衰减因子而使用的函数。
常用的窗函数有Hamming、Hanning等。
窗函数可以用来控制滤波器的幅度响应特性,使得它更平滑。
步骤4:使用fir1函数设计滤波器。
根据以上步骤确定滤波器的阶数、截止频率和窗函数,可以使用fir1函数设计FIR滤波器。
具体代码如下:N=50;%设定阶数Wn=0.5;%设定截止频率window = hanning(N + 1); % 使用Hanning窗函数步骤5:使用filter函数对信号进行滤波。
设计好FIR滤波器后,可以使用filter函数对信号进行滤波。
具体代码如下:filtered_signal = filter(b, 1, input_signal);其中,input_signal是输入信号,filtered_signal是滤波后的信号。
以上,便是基于MATLAB设计FIR滤波器的简要步骤和代码示例。
根据具体需求和信号特性,可以进行相应的调整和优化。
用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这个软件有了进一步的了解,并且 加深了课本上的知识。与此同时,使我对 滤波器有了初步的认识。提高了我的理解 以及分析能力,理论和实践相结合,不仅 巩固了我的理论知识,同时更提高了我的 实践能力,使我受益匪浅。
FIR滤波器的MATLAB设计与实现
FIR滤波器的MATLAB设计与实现FIR滤波器(Finite Impulse Response Filter)是一种数字滤波器,其特点是其响应仅由有限长度的序列决定。
在MATLAB中,我们可以使用信号处理工具箱中的函数来设计和实现FIR滤波器。
首先,需要明确FIR滤波器的设计目标,包括滤波器类型(低通、高通、带通、带阻)、通带和阻带的频率范围、通带和阻带的增益等。
这些目标将决定滤波器的系数及其顺序。
在MATLAB中,我们可以使用`fir1`函数来设计FIR滤波器。
该函数的使用方式如下:```matlabh = fir1(N, Wn, type);```其中,`N`是滤波器长度,`Wn`是通带边缘频率(0到0.5之间),`type`是滤波器的类型('low'低通、'high'高通、'bandpass'带通、'stop'带阻)。
该函数会返回一个长度为`N+1`的滤波器系数向量`h`。
例如,如果要设计一个采样频率为10kHz的低通滤波器,通带截止频率为2kHz,阻带频率为3kHz,可以使用以下代码:```matlabfc = 2000; % 通带截止频率h = fir1(50, fc/(fs/2), 'low');```上述代码中,`50`表示滤波器的长度。
注意,滤波器的长度越大,滤波器的频率响应越陡峭,但计算成本也更高。
在设计完成后,可以使用`freqz`函数来分析滤波器的频率响应。
例如,可以绘制滤波器的幅度响应和相位响应曲线:```matlabfreqz(h);```除了使用`fir1`函数外,MATLAB还提供了其他函数来设计FIR滤波器,如`fir2`、`firpm`、`firls`等,具体使用方式可以参考MATLAB的文档。
在实际应用中,我们可以将FIR滤波器应用于音频处理、图像处理、信号降噪等方面。
例如,可以使用FIR滤波器对音频信号进行去噪处理,或者对图像进行锐化处理等。
基于matlab程序的fir滤波器设计实现
基于matlab程序的fir滤波器设计实现随着科学技术的发展,电子设备的设计要求也在不断提高,需要功能更加齐全的电子设备。
滤波器作为重要的电子元件,可以降低噪声,提高电子设备的工作效率,广泛应用在通信、仪器仪表、电力系统等领域。
fir滤波器由具有非常特殊结构的线性系统组成。
在传输特性中,它具有稳定的延迟,具有良好的频率分析和回波抑制功能。
为了使用fir滤波器,我们必须对其进行合理的设计,实现滤波器的功能。
本文介绍使用matlab程序来设计和实现fir滤波器的方法。
首先,我们需要确定滤波器的目标,包括滤波器的截止频率、阻带频率以及期望的功率谱,然后将这些参数输入matlab程序中,并使用合适的算法来计算滤波器的系数。
在matlab中实现fir滤波器的各种算法有很多种,包括传统的窗函数法,频率响应插值法,自适应法和波束形成法等。
算法的选择取决于优化目标,可以根据滤波器的要求自由选择。
当确定了滤波器要求和设计算法之后,就可以使用matlab编写程序来实现这些算法。
matlab有丰富的函数库,可以很容易地实现fir滤波器的设计。
具体的程序设计步骤如下:首先,选择所需的设计参数,包括滤波器阶数、归一化频率、幅值和相位等;然后,选择所需的算法,计算出匹配的滤波器系数;最后,编写一个完整的程序来实现fir滤波器的设计,测试滤波器的参数,并输出实现结果。
本文介绍了使用matlab程序来实现fir滤波器设计的方法,它可以实现滤波器的质量分析和测试,可以根据滤波器要求进行精确的设计。
使用matlab来设计fir滤波器,不仅可以缩短设计时间,而且能够节省大量的金钱和人力,具有非常重要的意义。
总之,fir滤波器在电子设备设计中有着重要的作用,使用matlab程序来设计和实现fir滤波器有着非常重要的意义。
通过此次研究,有助于我们更好地理解和应用matlab程序来设计和实现fir 滤波器,从而提高滤波器的性能,从而更好地满足电子设备设计的要求。
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. 应用滤波器将得到的滤波器系数应用到需要滤波的信号上,即可得到滤波后的信号。
基于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);figure (1)plot(w1/pi,abs(h1)); grid;xlabel('归一化频率/p') ; ylabel('幅度/dB') ;figure (2)plot(w1/pi,angle(h1)); grid;xlabel('归一化频率/p') ; ylabel('相位') ;波形如下:例2 利用雷米兹交替算法设计等波纹滤波器,设计一个线性相位低通FIR数字滤波器,其指标为:通带边界频率fc=800Hz,阻带边界fr=1000Hz,通带波动阻带最小衰减At=40dB,采样频率fs=4000Hz。
一般调用MATLAB信号处理工具箱函数remezord来计算等波纹滤波器阶数N和加权函数W (ω),调用函数remez可进行等波纹滤波器的设计,直接求出滤波器系数。
函数remezord中的数组fedge为通带和阻带边界频率,数组mval是两个边界处的幅值,而数组dev是通带和阻带的波动,fs是采样频率单位为Hz。
FIR数字滤波器的MATLAB详细程序
%FIR-DF hd=ideal_lp(wc,M);Fs=32000;a=2*pi*6500;b=2*pi*7000;c=2*pi*9000;n1=0:4096;t=n1/Fs;xa=cos(a*t)+cos(b*t)+cos(c*t);%+cos(d*t);figure(1);y=fft(xa);plot(abs(y));title('fft(xa)变换');grid;Rp=0.25;As=52;%ws=pi*6600*2/Fs;wp=pi*6700*2/Fs;%gao tong%ws=pi*6700*2/Fs;wp=pi*6600*2/Fs;%di tongws=[pi*6600*2/Fs,pi*7400*2/Fs];wp=[pi*6800*2/Fs,pi*7200*2/Fs];%dai tong%ws=[pi*6600*2/Fs,pi*7400*2/Fs,pi*8600*2/Fs,pi*9400*2/Fs];wp=[pi*6800*2/Fs,pi*7200*2/Fs, pi*8800*2/Fs,pi*9200*2/Fs];%dai tong%ws=[pi*6800*2/Fs,pi*7200*2/Fs];wp=[pi*6600*2/Fs,pi*7400*2/Fs];%dai zuDB=abs(ws(1)-wp(1));%DB=abs(ws-wp);M0=ceil((As-8)/(2.285*DB));%阶数M=M0+mod(M0,2);%确保阶数为偶数N=M+1;%长度为奇数%0.112*(As-8.7);As>50;%0.5842*(As-21)^0.4+0.07886*(As-21);21<=As<=50;%0;As<21;if As>50beta=0.112*(As-8.7);elseif21<=As&&As<=50beta=0.5842*(As-21)^0.4+0.07886*(As-21);elsebeta=0;endwn=kaiser(N,beta);wc=(wp+ws)/2/pi;%fir1使用wc归一化%hn=fir1(M,wc,'high',wn);%gao tonghn=fir1(M,wc,wn);%dai tong,di tong%hn=fir1(M,wc,'stop',wn);%dai zufigure(2);plot(abs(wn));title('窗函数');grid;figure(3);[hh,w]=freqz(hn,1);freqzplot(hh,w,'linear');title('幅频/相频特性');%Hn=fft(hn);%plot(abs(Hn));title('FFT(Hn)');%freqz(hn,1);title('幅频特性');y=filter(hn,1,xa);figure(4);y1=fft(y);plot(abs(y1));title('高通滤波器滤波之后');grid;%=========验证=====================%验证%w_kai=wn';%hd=hn;%h=hd.*w_kai;%freqz_mN1=1000;[H,W]=freqz(hn,1,N1,'whole');%[H,W]=freqz(B,A,N1,'whole');delta_w=2*pi/N1;db=20*log10(abs(H)/max(abs(H))+eps);%通带波纹db数%rp1=-(min(db(wp/delta_w+1:1:501)))%gao tong yan zheng%as1=-round(max(db(1:1:ws/delta_w+1)))%rp1=-(min(db(1:1:wp/delta_w+1)))%di tong yan zheng%as1=-round(max(db(ws/delta_w+1:1:501)))rp1=-(min(db(wp(1)/delta_w+1:1:wp(2)/delta_w+1)))%dai tong yan zhengas1=round(max(-max(db(1:1:ws(1)/delta_w+1)),-max(db(ws(2)/delta_w+1:1:501))))%rp1=-min(min(db(1:1:wp(1)/delta_w+1)),min(db(wp(2)/delta_w+1:1: 501)))%dai zu yan zheng%as1=-round(max(db(ws(1)/delta_w+1:1:ws(2)/delta_w+1)))%N1=4096;%Hw=fft(h,N1);%wk=2*pi*[0:N1-1]/N1;%hgw=Hw.*exp(j*wk*N/2);%rp=max(20*log10(abs(hgw)))%%hgmin=min(real(hgw));%rs=20*log10(abs(hgmin))%w_kai=wn';%hd=hn;%h=hd.*w_kai;%d_w=2*pi/1000;%[db,w0]=freqz(h,1);%rp1=-(min(db(wp/d_w+1:1:501))) %as1=-round(max(db(1:1:ws/d_w+1)))。
FIR数字滤波器的Matlab实现
FIR数字滤波器的Matlab实现一、实验目的1、学习用窗函数法设计FIR数字滤波器的原理及其设计步骤;2、学习编写数字滤波器的设计程序的方法,并能进行正确编程;三、实验内容与步骤,阻带边界频率1、设计一FIR低通滤波器,通带边界频率π3.0Ω=pπ5.0,阻带衰减不小于50dB。
=Ωs程序代码与仿真图分别见下:clear all;Wp=0.3*pi;Ws=0.5*pi;tr_width=Ws-Wp;%过渡带宽度N=ceil(6.6*pi/tr_width)+1%滤波器长度n=0:1:N-1;Wc=(Ws+Wp)/2; %理想低通滤波器的截止频率hd=ideal_lp1(Wc,N); %理想低通滤波器的单位冲激响应w_ham=(hamming(N))';%海明窗h=hd.*w_ham; %截取得到实际的单位脉冲响应[db,mag,pha,w]=freqz_m2(h,[1]); %计算实际滤波器的幅度响应delta_w=2*pi/1000;Ap=-(min(db(1:1:Wp/delta_w+1))); %实际通带纹波As=-round(max(db(Ws/delta_w+1:1:501))); %实际阻带纹波subplot(2 2 1);stem(n,hd);title('理想单位脉冲响应hd(n)');subplot(2 2 2);stem(n,w_ham);title('海明窗w(n)');subplot(2 2 3);stem(n,h);title('实际单位脉冲响应hd(n)');10203040理想单位脉冲响应hd(n)010203040海明窗w(n)10203040实际单位脉冲响应hd(n)0.51-100-50幅度响应(dB)subplot(2 2 4);plot(w/pi,db);title('幅度响应(dB)');axis([0,1,-100,10]); function[db,mag,pha,w]=freqz_m2(b,a) [H,w]=freqz(b,a,1000,'whole'); H=(H(1:1:501))'; w=(w(1:1:501))';mag=abs(H); db=20*log10((mag+eps)/max(mag)); pha=angle(H);function hd=ideal_lp1(Wc,N);所调用的函数 alpha=(N-1)/2; n=0:1:N-1; m=n-alpha+eps; hd=sin(Wc*m)./(pi*m);2、设计一个数字带通滤波器,指标要求如下:通带边缘频率:π45.01=ΩP ,π65.02=ΩP ,通带峰值起伏:][1dB p ≤α。
MATLAB FIR滤波器
Matlab中,函数fir1()和fir2()利用加窗傅里叶级数法设计FIR滤波器。
函数fir1()用来设计传统的LP(低通)、HP(高通)、BP(带通)、BS(带阻)和多频带FIR滤波器;而函数fir2()用来设计具有任意幅度响应的的FIR滤波器。
一、函数fir1的各种形式如下:b= fir1(N,Wn)b= fir1(N,Wn,'ftype')b= fir1(N,Wn,window)b= fir1(N,Wn,'ftype',window)b= fir1(...,'normalization')其中,1、N为滤波器节点个数;2、Wn(0<Wn<1)为归一化截止频率;3、ftype为滤波器类型(默认(缺省时)是low):•'high' for a highpass filter with cutoff frequency Wn.•'stop' for a bandstop filter, if Wn = [w1 w2]. The stopband frequency range is specified by this interval.•'DC-1' to make the first band of a multiband filter a passband.•'DC-0' to make the first band of a multiband filter a stopband.4、window为所加窗的类型(默认的是hamming窗),e.g hamming、chebwin、blackman、hanning、kaiser等。
5、normalization为是否将滤波器的幅度进行归一化:•'scale' (default): Normalize the filter so that the magnitude response of the filter at the center frequency of the passband is 0 dB.•'noscale': Do not normalize the filter.fir1()举例:设计一个低通滤波器二、函数fir2的各种形式如下:b = fir2(n,f,m)b = fir2(n,f,m,window)b = fir2(n,f,m,npt)b = fir2(n,f,m,npt,window)b = fir2(n,f,m,npt,lap)b = fir2(n,f,m,npt,lap,window)其中,向量f是指定频率点的幅度响应样本,与m定义的幅度响应样本对应;f和m具有相同的长度,并且f的第一个和最后一个分量分别是0和1;可以对f中的频点进行复制,从而跳变地逼近幅度响应指标。
基于MATLAB与CCS的FIR滤波器的C语言实现
基于MATLAB与CCS的FIR滤波器的C语言实现FIR(Finite Impulse Response)滤波器是一种数字滤波器,其输出仅取决于有限长度的输入序列。
MATLAB和CCS都提供了强大的工具和函数来设计和实现FIR滤波器。
下面将以一个具体的例子来介绍如何使用MATLAB和CCS来实现FIR滤波器的C语言实现。
首先,在MATLAB中使用fir1函数进行FIR滤波器的设计:```matlabfs = 1000; % 采样频率fpass = 200; % 通带截止频率fstop = 250; % 阻带起始频率Rp=1;%通带最大纹波(dB)Rs=60;%阻带最小衰减(dB)%计算通带和阻带频率f1 = fpass / (fs / 2);f2 = fstop / (fs / 2);% 使用fir1函数设计FIR滤波器b = fir1(30, [f1 f2], 'stop', kaiser(31, 3));%输出滤波器系数```然后,使用MATLAB中的codegen函数将FIR滤波器系数转换为C代码:```matlabcodegen -config:dll FIRFilter -args {b} -report```这将生成一个名为FIRFilter.c的文件,在该文件中包含了FIR滤波器的C语言实现。
接下来,在CCS中创建一个新的project,并将FIRFilter.c文件添加到该project中。
在Source Files文件夹中右键单击,并选择“Add Existing Files to Project”,然后选择FIRFilter.c文件。
接着,点击Build按钮来编译并生成可执行文件。
最后,在CCS中使用FIR滤波器的C语言实现进行信号处理。
可以通过以下代码示例来实现:```c#include <stdint.h>#include "FIRFilter.h"#define BUFFER_SIZE 1000//输入信号int16_t inputSignal[BUFFER_SIZE];//输出信号int16_t outputSignal[BUFFER_SIZE];int main(void)//初始化输入信号//...//调用FIR滤波器实现函数FIRFilter(inputSignal, outputSignal, BUFFER_SIZE);//处理输出信号//...return 0;```上述代码中,首先定义了输入和输出信号的数组,然后在main函数中调用FIR滤波器实现函数,并传入输入和输出信号的数组以及信号的长度。
matlab的fir滤波器设计
matlab的fir滤波器设计FIR(Finite Impulse Response)滤波器是指响应有限长度序列输入的数字滤波器,它可以用于信号去噪、信号滤波和信号重构等领域。
MATLAB软件是目前应用广泛的数学软件工具箱,它可以实现数字信号处理、信号滤波和滤波器设计等功能。
下面我们来分步骤解析如何利用MATLAB完成FIR滤波器设计。
第一步,确定滤波器参数要设计FIR滤波器,需要明确设计的目的,例如信号去噪还是信号滤波。
同时,需要确定滤波器的参数,包括滤波器的采样率、通带边界、阻带边界等。
第二步,调用MATLAB工具箱并加载数据打开MATLAB软件,选择Digital Signal Processing Toolbox,调用fir1函数,该函数用于设计一般的低通、高通、带通和带阻FIR 滤波器。
加载需要滤波的数据,并将其存储在一个变量中。
第三步,进行滤波器设计在MATLAB命令行窗口中输入以下命令,来进行FIR滤波器的设计。
h = fir1(N, Wn, 'type');其中,N是滤波器的阶数,Wn是正规化的截止频率值,type是滤波器的类型,可以是低通、高通、带通和带阻滤波器。
例如,我们要设计一个30阶的低通滤波器,带通频带为0.3至0.7,采样率为1000Hz,输入以下命令:N = 30;Wn = [0.3 0.7];Btype = 'low';FIR_filter = fir1(N, Wn, Btype);第四步,使用FIR滤波器进行滤波使用filter函数,可以将设计好的FIR滤波器应用到加载的数据上,进行滤波操作。
Y_filtered = filter(FIR_filter, 1, X);其中,FIR_filter是设计好的FIR滤波器,X是加载的待滤波数据,Y_filtered是经过滤波器处理后的数据。
第五步,可视化输出结果通过绘制函数将滤波器的输入和输出信号进行可视化处理,观察滤波效果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章 FIR 数字滤波器的Matlab 实现7.1 实验目的● 学习用窗函数法设计FIR 数字滤波器的原理及其设计步骤; ● 学习编写数字滤波器的设计程序的方法,并能进行正确编程; ● 根据给定的滤波器指标,给出设计步骤。
7.2 实验原理及实例分析7.2.1 FIR 低通数字滤波器的设计原理如果系统的冲激响应)(n h d 为已知,则系统的输入/输出关系为:)()()(n h n x n y d ⋅=对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。
假设所希望的数字滤波器的频率响应为)(jwd e H ,它是频域的周期函数,周期为2π,那么它与)(jwd eH 相对应的傅立叶系数为dw e e H n h jnw jw d d )(21)(⎰-=πππ以)(n h d 为冲激响应的数字滤波器将具有频域响)(jwd e H 。
但是将)(n h d 作为滤波器脉冲响应有两个问题:(1) 它是无限长的,与FIP 滤波器脉冲响应有限长这一前提不一致 (2) 它是非因果的,0,0)(<≠n n h d 对此,要采取以下的措施,(1) 将)(n h d 截短 (2)将其往右平移, 由此得到)(2n h 的实际频域响应jnw N n jwd e n h eH ∑-==12)()(,与理想频域响应)(jw d e H 相近,但不完全一致。
理论证明上述现象是对)(n h d 进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对)(n h d 进行加窗截取,即以)()()(n W n h n h N d ⋅=作为FIR 滤波器的系数。
常用的窗函数有矩形窗、海明窗和布莱克曼窗等。
7.2.2 用窗函数法设计FIR 滤波器Matlab 设计FIR 滤波器有多种方法和对应的函数,见表7-1。
表7-1 matlab 设计FIR 滤波器的方法和函数窗函数方法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs 现象所带来的影响。
窗函数设计线性相位FIR 滤波器步骤如下:(1) 确定数字滤波器的性能要求,临界频率}{k w ,滤波器单位脉冲响应长度N (2) 根据性能要求,合理选择单位脉冲响应h(n)的奇偶对称性,从而确定理想频率响应)(jwd eH 的幅频特性和相频特性(3) 求理想单位脉冲响应)(n h d ,在实际计算中,可对)(jwd eH 采样,并对其求IDFT的)(n h M ,用)(n h M 代替)(n h d(4) 选择适当的窗函数w (n ),根据)()()(n W n h n h N d ⋅=求所需设计的FIR 滤波器单位脉冲响应(5) 求)(jwd eH ,分析其幅频特性,若不满足要求,可适当改变窗函数形式或长度N ,重复上述设计过程,以得到满意的结果FIR1.m 调用格式:a) b=fir1(N,wn)b) b=fir1(N,wn,’hign ’)N 为滤波器的阶次,wn 是通带截止频率,其值在0~1之间,1对应抽样频率的一半;b 是设计好的滤波器系数h(n)。
对于格式a),若wn 是标量,则用来设计低通滤波器,若wn 是1×L 的向量,则用来设计带通(带阻)滤波器。
其格式为:b=fir1(N,wn,’DC-1’)或b=fir1(N,wn,’DC-0’),其中,前者保证第一个带为通带,后者保证第一个带为阻带。
b )用来设计高通滤波器。
用于产生窗函数的matlab 文件有如下8个:bartlett.m(巴特利特窗) blackman.m(布莱克曼窗) rectangle.m(矩形窗) hamming.m (汉明窗) hanning.m (汉宁窗) triang.m(三角窗)chebwin.m (切比雪夫窗) Kaiser.m (凯泽窗)【实例7-1】 设计一个34阶的高通滤波器,截止频率为0.48π,使用具有30dB 波纹的chebyshev 窗。
解:源程序如下:b=fir1(34,0.48,'high',chebwin(35,30));freqz(b,1,512)其响应波形如图7-1所示。
图7-1 带通FIR 滤波器【实例7-2】设计一个24阶FIR 带通滤波器,通带频率0.350.65w ππ≤≤。
解:源程序如下: wn=[0.35 0.65]; N=24;b=fir1(2*N,wn,'DC-0');% DC-0表示第一个带为阻带,这样设计出来的滤波器为带通滤波器。
freqz(b,1,512)图7-2 带通FIR 滤波器【实例7-3】 设计具有下面指标的低通FIR 滤波器dBA w dB R w S s p p 50,3.0,25.0,2.0====ππ由于其最小阻带衰减为50dB ,因此可以选择hamming 窗来实现这个滤波器,因为它具有较小的过渡带。
解:MATLAB 源程序为 %数字滤波器指标wp=0.2*pi; ws=0.3*pi;tr_width=ws-wp; %通带宽度N=ceil(6.6*pi/tr_width)+1; %滤波器长度 if rem(N,2)==0 N=N+1; endNw=N; %滤波器长度为奇数 n=[0:1:Nw-1];wc=(ws+wp)/2; %截止频率 alpha=(Nw-1)/2;m=n-alpha+0.00001; %如果不加0.00001,当n= alpha 时,m 为0,下式分母为0,不能执行 hd=sin(wc*m)./(pi*m); %理想滤波器的冲激响应% 生成hamming 窗w_ham=(hamming(Nw))';% 频域图像的绘制h=hd.*w_ham; % 滤波器实际冲激响应freqz (h,[1]) figure(2);subplot(2,2,1),stem(n,hd);title('理想脉冲响应')axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('hd(n)')subplot(2,2,2),stem(n,w_ham);title('hamming窗')axis([0 Nw-1 -0.3 1.2]);xlabel('n');ylabel('w(n)')subplot(2,2,3),stem(n,h);title('实际脉冲响应')axis([0 Nw-1 -0.3 0.3]);xlabel('n');ylabel('h(n)')其响应波形如图7-2所示。
图7-3 hamming窗函数设计FIR滤波器【实例7-4】设带通滤波器的指标为dBA w w w w s s s p p 60,65.0,2.0,8.0,35.02121=====ππππ选择Blackman 窗来实现这个滤波器。
解:MATLAB 源程序为 % 数字滤波器指标ws1=0.2*pi; wp1=0.35*pi; ws2=0.65*pi; wp2=0.8*pi; As=60;tr_width=min((wp1-ws1),(wp2-ws2)); % 过渡带带宽 N=ceil(11*pi/tr_width)+1;if rem(N,2)==0 N=N+1; end Nw=N;n=[0:1:Nw-1]; wc1=(ws1+wp1)/2; wc2=(ws2+wp2)/2;alpha=(Nw-1)/2;m=n-alpha+0.00001; %如果不加0.00001,当n= alpha 时,m 为0,下式分母为0,不能执行 hd=sin(wc2*m)./(pi*m)- sin(wc1*m)./(pi*m); %理想滤波器的冲激响应% 生成blackman 窗 w_bla=(blackman(M))'; h=hd.*w_bla;% 频域图像的绘制 freqz(h,[1])figure(2);subplot(2,2,1),stem(n,hd);title('idael impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('hd(n)')subplot(2,2,2),stem(n,w_bla);title('blackman window') axis([0 Nw-1 0 1.1]);xlabel('n');ylabel('w(n)')subplot(2,2,3),stem(n,h);title('actual impulse response') axis([0 Nw-1 -0.4 0.5]);xlabel('n');ylabel('h(n)') 其响应波形如图7-4所示。
图7-4 blackman 窗函数设计FIR 滤波器7.3 编程练习1. 设计一个48阶FIR 带阻滤波器,通带频率00.35,0.65w w πππ≤≤≤≤。
2.用窗函数设计一个线性相位FIR 高通滤波器,并满足性能指标:通带边界频率0.66wp π=,阻带边界频率0.5ws π=,阻带衰减不小于40db 。
提示:参考例7-3,4;首先根据阻带衰减,选择合适的窗函数,见课本P342,表7-3。
再根据P345,式7-74写出理想滤波器的冲激响应hd 。