FIR数字滤波器的设计与matlab实现

合集下载

FIR数字滤波器在MATLAB中的实现

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数字滤波器的设计

基于matlab的fir数字滤波器的设计

一、引言数字滤波器是数字信号处理中至关重要的组成部分,它能够对数字信号进行滤波处理,去除噪音和干扰,提取信号中的有效信息。

其中,fir数字滤波器作为一种常见的数字滤波器类型,具有稳定性强、相位响应线性等特点,在数字信号处理领域得到了广泛的应用。

本文将基于matlab软件,探讨fir数字滤波器的设计原理、方法和实现过程,以期能够全面、系统地了解fir数字滤波器的设计流程。

二、fir数字滤波器的基本原理fir数字滤波器是一种有限长冲激响应(finite impulse response, FIR)的数字滤波器,其基本原理是利用线性相位特性的滤波器来实现对数字信号的筛选和处理。

fir数字滤波器的表达式为:$$y(n) = \sum_{k=0}^{M}h(k)x(n-k)$$其中,y(n)为输出信号,x(n)为输入信号,h(k)为滤波器的系数,M为滤波器的长度。

fir数字滤波器的频率响应特性由其系数h(k)决定,通过设计合适的系数,可以实现对不同频率成分的滤波效果。

三、fir数字滤波器的设计方法fir数字滤波器的设计方法主要包括窗函数法、频率抽样法、最小最大法等。

在matlab中,可以通过信号处理工具箱提供的fir1函数和firls函数等来实现fir数字滤波器的设计。

下面将分别介绍这两种设计方法的基本原理及实现步骤。

1. 窗函数法窗函数法是fir数字滤波器设计中最为常见的方法之一,其基本原理是通过对理想滤波器的频率响应进行窗函数加权来满足设计要求。

在matlab中,可以使用fir1函数实现fir数字滤波器的设计,其调用格式为:h = fir1(N, Wn, type)其中,N为滤波器的阶数,Wn为滤波器的截止频率,type为窗函数的类型。

通过调用fir1函数,可以灵活地设计出满足特定要求的fir数字滤波器。

2. 频率抽样法频率抽样法是fir数字滤波器设计中的另一种重要方法,其基本原理是在频域上对理想滤波器的频率响应进行抽样,并拟合出一个最优的滤波器。

基于MATLAB设计FIR滤波器

基于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滤波器的简要步骤和代码示例。

根据具体需求和信号特性,可以进行相应的调整和优化。

基于窗函数的FIR数字滤波器的优化及Matlab实现

基于窗函数的FIR数字滤波器的优化及Matlab实现
” 。一 叮 r
由 已知 的 H ( 求 出 l()经过 z变 换可 得 到滤 波器 d e 1n , d 的系统函数 。但一般情况 下, e 是逐段稳 定的 , 边界频 I O  ̄( 在
H( = hne ̄ ()-
率处有 不 连续 点 , 因而 l() ln 是无 限时 宽 的, 是非 因果 序 d 且 列。 但是 从实现的角度来 说, 我们希 望得到一个 长度 为 N的
续一 定的时间 。

个 有 限长度 的窗 口函数序列 w() n 来截取 一个无 限长 的序
列 h() a n 获得 一个有 限长序 列 hn , hn=b() ()即 () d +w() n n 。这
样我 们用 一个 有 限长 的序 列 h n去代 替 h()肯 定会 引起 () d , n
波 器称之为 数字滤 波器 。数字滤 波器是 通过 一定运算 关系 改变输入信 号所含 频率成 分 的相 对 比例 或者 滤除某 些频率 成 分的器件 [ 1 ] 字滤波器 从单位脉冲 响应 分类 , 以分为 。数 可 无 限脉 冲响应 ( 滤波 器和有 限脉冲 响应 (瓜) I m) F 滤波器 。 由 数 字信 号处理 的一般理 论可 知,I I R滤波器 的特征 是具 有无 限持续时 间的冲激 响应 ,而 FR滤波器 的冲激 响应只 能持 I
线性相位滤波器 , 因此只 能通 过对 n进行加 窗得出 。 )
作 者 简介 : 明 , , 川 南充 人 , 科 , 究方 向 : 李 男 四 本 研 下一 代 网络 , 号 处理 。 信
3 a Ib 仿真设计 FR数 字滤波器 .M t a I
Mal t b是 Mah rs公 司 于 1 8 a tWok 9 2年推 出的一 套 高性

基于MATLAB与CCS的FIR滤波器设计与实现

基于MATLAB与CCS的FIR滤波器设计与实现

基于MATLAB与CCS的FIR滤波器设计与实现FIR滤波器(Finite Impulse Response Filter)是一种常用的数字滤波器,特点是系统的冲激响应为有限长度,所以也称为有限冲激响应滤波器。

FIR滤波器具有线性相位特性、较好的频率响应控制以及稳定性等优点。

在MATLAB和CCS软件中,我们可以使用不同的方法来设计和实现FIR滤波器。

首先,我们来介绍如何在MATLAB中设计和实现FIR滤波器。

MATLAB 提供了fir1函数来设计FIR滤波器。

该函数可以根据给定的滤波器阶数和截止频率来生成FIR滤波器系数。

例如,如果我们想设计一个截止频率为0.2的10阶低通FIR滤波器,可以使用以下代码:```MATLABorder = 10; % 滤波器阶数cutoff = 0.2; % 截止频率b = fir1(order, cutoff); % 设计FIR滤波器```生成的滤波器系数b可以用于过滤输入信号。

例如,我们可以使用filter函数将一个输入信号x通过滤波器进行滤波:```MATLABx=...;%输入信号y = filter(b, 1, x); % 通过滤波器滤波```在CCS软件中,我们可以使用DSP/BIOS中提供的模块来实现FIR滤波器。

首先,我们需要在CCS中创建一个新的项目,然后配置DSP/BIOS Kernel环境。

接下来,我们可以使用DSP/BIOS中的算法库或者自定义算法实现FIR滤波器。

使用DSP/BIOS的算法库有两种方式,分别是使用C语言和使用Simulink。

如果我们选择使用C语言,可以使用DSPLIB函数库中的fir 函数来实现FIR滤波器。

fir函数需要提供滤波器系数和输入信号,然后它会返回滤波后的输出信号。

例如,以下是使用C语言实现FIR滤波器的示例代码:```C#include <dsplib.h>float x[N]; // 输入信号float b[M]; // 滤波器系数float y[N]; // 输出信号FIR_firGen(M, b); // 生成滤波器系数for (int i = 0; i < N; i++)y[i] = FIR_fir(x[i], b, M); // 滤波```如果我们选择使用Simulink,可以使用Simulink中提供的滤波器模块构建FIR滤波器。

基于Matlab的FIR滤波器设计与实现

基于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条得到。

实验四FIR数字滤波器设计与软件实现

实验四FIR数字滤波器设计与软件实现

实验四FIR数字滤波器设计与软件实现
实验目的:
掌握FIR数字滤波器的设计与软件实现方法,了解滤波器的概念与基
本原理。

实验原理:
FIR数字滤波器全称为有限脉冲响应数字滤波器,其特点是具有有限
长度的脉冲响应。

滤波器通过一系列加权系数乘以输入信号的延迟值,并
将这些值相加得到输出信号。

FIR滤波器的频率响应由滤波器系数所决定。

实验步骤:
1.确定所需的滤波器的设计规格,包括截止频率、通带波纹、阻带衰
减等。

2.选择适当的滤波器设计方法,如窗函数、最佳近似法、最小二乘法等。

3.根据所选方法,计算滤波器的系数。

4.在MATLAB环境下,使用滤波器的系数实现滤波器。

5.输入所需滤波的信号,经过滤波器进行滤波处理。

6.分析输出的滤波信号,观察滤波效果是否符合设计要求。

实验要求:
1.完成FIR数字滤波器的设计和软件实现。

2.对比不同设计方法得到的滤波器性能差异。

3.分析滤波结果,判断滤波器是否满足设计要求。

实验器材与软件:
1.个人电脑;
2.MATLAB软件。

实验结果:
根据滤波器设计规格和所选的设计方法,得到一组滤波器系数。

通过
将滤波器系数应用于输入信号,得到输出滤波信号。

根据输出信号的频率
响应、通带波纹、阻带衰减等指标,评估滤波器的性能。

实验注意事项:
1.在选择设计方法时,需要根据滤波器要求和实际情况进行合理选择。

2.在滤波器实现过程中,需要注意滤波器系数的计算和应用。

3.在实验过程中,注意信号的选择和滤波结果的评估方法。

用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滤波器的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实现

数字滤波器的设计及其MATLAB实现

设计低通数字滤波器,要求在通带内频率低于0.2pirad时,允许幅度误差在1dB以内,在频率0.3pi rad~pi rad之间的阻带衰减大于15dB,用脉冲响应不变法设计数字滤波器,T=1: 切比雪夫I型模拟滤波器的设计子程序:function [b,a]=afd_chb1(Omegap,Omegar,Ar)if Omegap<=0error('通带边缘必须大于0')endif(Dt<=0)|(Ar<0)error('通带波动或阻带衰减必须大于0');endep=sqrt(10^(Dt/10)-1);A=10^(Ar/20);OmegaC=Omegap;OmegaR=Omegar/Omegap;g=sqrt(A*A-1)/ep;N=ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1)));fprintf('\n***切比雪夫I型模拟低通滤波器阶数=%2.0f\n',N);[b,a]=u_chblap(N,Dt,OmegaC);设计非归一化切比雪夫I型模拟低通滤波器原型程序:function [b,a]=u_chblap(N,Dt,OmegaC)[z,p,k]=cheb1ap(N,Dt);a=real(poly(p));aNn=a(N+1);p=p*OmegaC;a=real(poly(p));aNu=a(N+1);k=k*aNu/aNn;b0=k;B=real(poly(z));b=k*B;直接形式转换成级联形式子程序:function [C,B,A]=sdir2cas(b,a)Na=length(a)-1;Nb=length(b)-1;b0=b(1);b=b/b0;a0=a(1);a=a/a0;C=b0/a0;p=cplxpair(roots(a));K=floor(Na/2);if K*2==NaA=zeros(K,3);for n=1:2:NaArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);elseif Na==1A=[0 real(poly(p))];elseA=zeros(K+1,3);for n=1:2:2*KArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);endA(K+1,:)=[0 real(poly(p(Na)))];endz=cplxpair(roots(b));K=floor(Nb/2);if Nb==0B=[0 0 poly(z)];elseif K*2==NbB=zeros(K,3);for n=1:2:NbBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endelseif Nb==1B=[0 real(poly(z))];elseB=zeros(K+1,3);for n=1:2:2*KBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endB(K+1,:)=[0 real(poly(z(Nb)))];End计算系统函数的幅度响应和相位响应子程序:function [db,mag,pha,w]=freqs_m(b,a,wmax)w1=0:500;w=w1*wmax/500;h=freqs(b,a,w);mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);脉冲响应不变法程序:function [b,a]=imp_invr(c,d,T)[R,p,k]=residue(c,d);p=exp(p*T);[b,a]=residuez(R,p,k);b=real(b).*T;数字滤波器响应子程序:function [db,mag,pha,grd,w]=freqz_m(b,a);[H,w]=freqz(b,a,1000,'whole');H=(H(1:501))';w=(w(1:501))';mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);直接转换成并联型子程序:function [C,B,A]=dir2par(b,a)M=length(b);N=length(a);[r1,p1,C]=residuez(b,a);p=cplxpair(p1,10000000*eps);x=cplxcomp(p1,p);r=r1(x);K=floor(N/2);B=zeros(K,2);A=zeros(K,3);if K*2==Nfor i=1:2:N-2br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br');A((fix(i+1)/2),:)real(ar');end[br,ar]=residuez(r(N-1),p(N-1),[]);B(K,:)=[real(br') 0];A(K,:)=[real(ar') 0];elsefor i=1:2:N-1br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br);A((fix(i+1)/2),:)real(ar);endEnd比较两个含同样标量元素但(可能)有不同下标的复数对及其相位留数向量子程序:function I=cplxcomp(p1,p2)I=[];for i=1:length(p2)for j=1:length(p1)if(abs(p1(j)-p2(i))<0.0001)I=[I,j];endendendI=I';双线性变换巴特沃斯低通滤波器设计:巴特沃思模拟滤波器的设计子程序:function [b,a]=afd_butt(wp,ws,Rp,rs)if wp<=0error('通带边缘必须大于0');endif ws<=wperror('阻带边缘必须大于通带边缘');endif(Rp<=0)|(Rs<0)error('通带波动或阻带衰减必须大于0');endN=ceil((log10((10^(Rp/10)-1)/(10^(Rs/10)-1)))/(2*log10(wp/ws))); fprintf('\n***Butterworth Filter Order=%2.0f\n',N);OmegaC=wp/((10^(Rp/10)-1)^(1/(2*N)));[b,a]=u_buttap(N,OmegaC)设计非归一化巴特沃思模拟低通滤波器原型子程序:function [b,a]=u_buttap(N,OmegaC)[z,p,k]=buttap(N);p=p*OmegaC;k=k*OmegaC^N;B=real(poly(z));b0=k;b=k*B;a=real(poly(p));直接型到级联型形式的转换:function [b0,B,A]=dir2cas(b,a)b0=b(1);b=b/b0;a0=a(1);a=a/a0;b0=b0/a0;M=length(b);N=length(a);if N>Mb=[b,zeros(1,N-M)];a=[a,zeros(1,M-N)];elseNM=0;endk=floor(N/2);B=zeros(k,3);A=zeros(k,3);if k*2==Nb=[b,0];a=[a,0];endbroots=cplxpair(roots(b));aroots=cplxpair(roots(a));for i=1:2:2*kbr=broots(i:1:i+1,:);br=real(polt(br));B((fix(i+1)/2),:)=br;ar=aroots(i:1:i+1,:);ar=real(polt(ar));A((fix(i+1)/2),:)=ar;Endfunction [db,mag,pha,grd,w]=freqz_m(b,a)[h,w]=freqz(b,a,1000,'whole');h=(h(1:501))';w=(w(1:501))';mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);grd=grdelay(b,a,w);设计一个巴特沃思高通滤波器,要求通带截止频率为0.6pi,通带内衰减不大于1dB,阻带·起始频率为0.4pi,阻带内衰减不小于15dB,T=1:>> wp=0.6*pi;ws=0.4*pi;>> Rp=1;Rs=15;T=1;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs) 计算巴特沃思滤波器阶数和截止频率N =4wn =>> [b,a]=butter(N,wn,'high'); 频率变换法计算巴特沃思高通滤波器>> [C,B,A]=dir2cas(b,a)C =0.0751B =1.0000 -2.0000 1.00001.0000 -2.0000 1.0000A =1.0000 0.1562 0.44881.0000 0.1124 0.0425>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi,db);椭圆带通滤波器的设计--ellip函数的应用:>> ws=[0.3*pi 0.75*pi]; 数字阻带边缘频率>> wp=[0.4*pi 0.6*pi]; 数字通带边缘频率>> Rp=1;Rs=40;>> Ripple=10^(-Rp/20); 通带波动>> Attn=10^(-Rs/20); 阻带衰减>> [N,wn]=ellipord(wp/pi,ws/pi,Rp,Rs) 计算椭圆滤波器参数N =4wn =0.4000 0.6000>> [b,a]=ellip(N,Rp,Rs,wn); 数字椭圆滤波器的设计>> [b0,B,A]=dir2cas(b,a) 级联形式实现b0 =0.0197B =1.0000 1.5066 1.00001.0000 0.9268 1.00001.0000 -0.9268 1.00001.0000 -1.5066 1.0000A =1.0000 0.5963 0.93991.0000 0.2774 0.79291.0000 -0.2774 0.79291.0000 -0.5963 0.9399>> figure(1);>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,2,1);plot(w/pi,mag);>> grid on;>> subplot(2,2,3);plot(w/pi,db);grid on;>> subplot(2,2,2);plot(w/pi,pha/pi);grid on;>> subplot(2,2,4);plot(w/pi,grd);设计一个巴特沃思带阻滤波器,要求通带上下截止频率为0.8pi、0.2pi,通带内衰减不大于1dB,阻带上起始频率为0.7pi、0.4pi,阻带内衰减不小于30dB:>> wp=[0.2*pi 0.8*pi];>> ws=[0.4*pi 0.7*pi];>> Rp=1;Rs=30;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs);>> [b,a]=butter(N,wn,'stop');>> [C,B,A]=dir2cas(b,a)C =0.0394B =1.0000 0.3559 0.99941.0000 0.3547 1.00401.0000 0.3522 0.99541.0000 0.3499 1.00461.0000 0.3475 0.99601.0000 0.3463 1.0006A =1.0000 1.3568 0.79281.0000 1.0330 0.46331.0000 0.6180 0.17751.0000 -0.2493 0.11131.0000 -0.6617 0.37551.0000 -0.9782 0.7446>> [db,mag,pha,grd,w]=freqz_m(b,a); >> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi);数字低通---数字带阻:function [bz,az]=zmapping(bZ,aZ,Nz,Dz) bzord=(length(bZ)-1)*(length(Nz)-1); azord=(length(aZ)-1)*(length(Dz)-1);bz=zeros(1,bzord+1);for k=0:bzordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:bzord-k-1pld=conv(pld,Dz);endbz=bz+bZ(k+1)*conv(pln,pld); endfor k=0:azordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:azord-k-1pld=conv(pld,Dz);endaz=az+aZ(k+1)*conv(pln,pld); endall=az(1);az=az/az1;bz=bz/az1;线性相位FIR滤波器的幅度特性:function pzkplot(num,den)hold on;axis('square');x=-1:0.01:1;y=(1-x.^2).^0.5;y1=-(1-x.^2).^0.5;plot(x,y,'b',x,y1,'b');num1=length(num);den1=length(den);if(num1>1)z=roots(num);elsez=0;endif(den1>1)p=roots(den);elsep=0;endif(num>1&den1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max_z=max(r_max_z,i_max_z);r_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max_p=max(r_max_p,i_max_p);a_max=max(a_max_z,a_max_p);elseif (num1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max=max(r_max_z,i_max_z);elser_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max=max(r_max_p,i_max_p);endaxis([-a_max a_max -a_max a_max]);plot([-a_max a_max],[0 0],'b');plot([0 0],[-a_max a_max],'b');plot([-a_max a_max],[a_max a_max],'b');plot([a_max a_max],[-a_max a_max],'b');Lz=length(z);for i=1:Lz;plot(real(z(i)),imag(z(i)),'bo');endLp=length(p);for j=1:Lpplot(real(p(j)),imag(p(j)),'bx');endtitle('The zeros-pole plot');xlabel('虚部');ylabel('实部');function [Hr,w,a,L]=Hr_Type1(h)M=length(h);L=(M-1)/2;a=[h(L+1) 2*h(L:-1:1)];n=[0:1:L];w=[0:1:500]'*pi/500;Hr=cos(w*n)*a';设计I型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,a,L]=Hr_Type1(h);>> amax=max(a)+1;>> amin=min(a)-1;>> subplot(2,2,1);stem(n,h);>> axis([-1 2*L+1 amin amax]);text(2*L+1.5,amin,'n'); >> xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(0:L,a);>> axis([-1 2*L+1 amin amax]);>> xlabel('n');ylabel('a(n)');title('a(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);>> grid on;text(1.05,-20,'频率pi');>> xlabel('频率');ylabel('Hr');title('I 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);>> title('零极点分布');function [hr,w,b,L]=Hr_Type2(h)M=length(h);L=M/2;b=2*h(L:-1:1);n=[1:1:L];n=n-0.5;w=[0:1:500]'*pi/500;hr=cos(w*n)*b';II型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,b,L]=Hr_Type2(h);Warning: Integer operands are required for colon operator when used as index. > In Hr_Type2 at 2>> bmax=max(b)+1;bmin=min(b)-1;>> subplot(2,2,1);stem(n,h);axis([-1 2*L+1 bmin bmax]);text(2*L+1.5,bmin,'n');xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(1:L,b);axis([-1 2*L+1 bmin bmax]);xlabel('n');ylabel('b(n)');title('b(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);grid on;text(1.05,-20,'频率pi');xlabel('频率');ylabel('Hr');title('II 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);title('零极点分布');function [hr,w,c,L]=Hr_Type3(h)M=length(h);L=(M-1)/2;b=2*h(L+1:-1:1);n=[1:1:L];w=[0:1:500]'*pi/500;hr=cos(w*n)*c';用MA TLAB编程绘制各种窗函数的形状。

基于matlab程序的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 滤波器,从而提高滤波器的性能,从而更好地满足电子设备设计的要求。

FIR数字滤波器的设计及其在MATLAB中的仿真实现

FIR数字滤波器的设计及其在MATLAB中的仿真实现

FIR数字滤波器的设计及其在MATLAB中的仿真实现
闫晓艳;傅丰林;陈健;阔永红
【期刊名称】《电子科技》
【年(卷),期】2004(000)005
【摘要】介绍了FIR数字滤波器的设计方法,以及MATLAB工具箱中交互式信号处理工具--SPTool在滤波器设计中的应用.并以两个FIR数字带通滤波器(中心频率分别是90Hz和150Hz,带宽都是30Hz)的设计为例,详细说明了采用Least Squares FIR准则、利用SPTool工具设计FIR的步骤.所设计的滤波器通带内波纹小于0.2dB,阻带衰减大于40dB.
【总页数】4页(P43-46)
【作者】闫晓艳;傅丰林;陈健;阔永红
【作者单位】西安电子科技大学通信工程学院,陕西,西安,710071;西安电子科技大学通信工程学院,陕西,西安,710071;西安电子科技大学通信工程学院,陕西,西
安,710071;西安电子科技大学通信工程学院,陕西,西安,710071
【正文语种】中文
【中图分类】TN713+.7
【相关文献】
1.基于CCS环境和MATLAB仿真的FIR数字滤波器实现 [J], 梅志红;赵莉
2.基于MATLAB的辅助教学课件设计与实现--以FIR数字滤波器设计为例 [J], 梁丽娟;冯国瑞;李永江
3.基于MATLAB软件的FIR数字滤波器的设计和仿真 [J], 赵秀克;刘剑;巩沛源
4.FIR数字滤波器的MATLAB仿真和DSP的实现 [J], 陶炳坤;陈鹏宇;李楠;濮霞
5.基于MATLAB的FIR数字滤波器仿真设计研究 [J], 关云静
因版权原因,仅展示原文概要,查看原文内容请购买。

FIR滤波器的MATLAB设计与实现

FIR滤波器的MATLAB设计与实现

时钟 输入模拟信号 输出模拟信号
DSP (TMS32 0C5410)
同步 FIFO
同步 FIFO
D/A 转换
A/D 转换
JTAG 接口
FLASE
RS232 接口 图3 系统总体框图
6
SRAM
JTAG(Joint Test Action Group) 联合测试行动小组)是一种国际标准测试协议 (IEEE 1149.1 兼容) ,主要用于芯片内部测试。基本原理是在器件内部定义一个 TAP(Test Access Port&#0;测试访问口)通过专用的 JTAG 测试工具对内部节点进 行测试。JTAG 测试允许多个器件通过 JTAG 接口串联在一起,形成一个 JTAG 链, 能实现对各个器件分别测试。 FLASE 存储器具有性价比高,体积小,功耗低,可电擦写,使用方便等优点。 在 DSP 应用系统中采用 Flash 存储器和固定数据是一种比较好的选择。 SRAM 静态存储器,读写速度快,但价格较高。适合于外部存放需要经常访问 或更新的临时数据。 RS232 电平转换模块,将外部电平转换为适合 DSP 芯片内部要求的电平。 图3是系统的总体框图。主要包括输入信号缓冲及调理电路、A/D 变换器、输 入缓冲 FIFO、DSP及外围电路、输出缓冲FIFO、D/A变换器等几部分。其中DSP及 外围电路包括程序存储器、串行口、显示及键盘接口等。串行口用于实现和PC机 的通信,可以通过PC机对滤波器的控制。 假定输入模拟信号为带限信号。该信号经缓冲和调理后经A/D变换进入输入缓 冲FIFO,当 FIFO中的数据达到一定数量时产生中断,DSP将数据读入内存中并进 行计算和处理,这里DSP主要实现FIR滤波运算。处理后的数据写入输出FIFO中, 之后通过D/A变换后输出模拟信号。输出的信号是低通滤波后的结果。 4.3 用DSP实现FIR滤波器的关键问题 4.3.1 定点数的定标 在滤波器的实现过程中,DSP所要处理的数可能是整数,也可能是小数或混合 小数;然而,DSP在执行算术运算指令时,并不知道当前所处理的数据是整数还是 小数,更不能指出小数点的位置在哪里。因此,在编程时必须指定一个数的小数 点处于哪一位,这就是定标。通过定标,可以在16位数的不同位置上确定小数点, 从而表示出一个范围大小不同且精度也不同的小数。 4.3.2 误差问题 因为在用定点DSP实现时,所有的数据都是定长的,运算也都是定点运算,因 而会产生有限字长效应。所产生的误差主要包括:数模转换引起的量化误差、系 数量化引起的误差以及运算过程中的舍入误差。在用定点DSP时,产生误差是不能 避免的。

FIR数字滤波器设计与软件实现

FIR数字滤波器设计与软件实现

实验四:FIR数字滤波器设计与软件实现1.实验目的(1)掌握用窗函数法设计FIR数字滤波器的原理和方法。

(2)学会调用MA TLAB函数设计FIR滤波器。

(3)通过观察频谱的相位特性曲线,建立线性相位概念。

(4)掌握FIR数字滤波器的MATLAB软件实现方法。

2.实验原理设计FIR数字滤波器一般采用直接法,如窗函数法和频率采样法。

本实验采用窗函数法设计FIR滤波器,要求能根据滤波需求确定滤波器指标参数,并按设计原理编程设计符合要求的FIR数字滤波器。

本实验软件实现是调用MATLAB提供的fftfilt函数对给定输入信号x(n)进行滤波,得到滤波后的输出信号y(n)。

3. 实验内容及步骤(1) FIR数字滤波器设计根据窗函数法设计FIR数字滤波器的原理和步骤,设计一个线性数字低通滤波器,要求通带临界频率fp=120Hz,阻带临界频率fs=150Hz,通带内的最大衰减Ap=0.1dB,阻带内的最小衰减As=60db,采样频率Fs=1000Hz。

观察设计的滤波器频率特性曲线,建立线性相位概念。

(2) FIR数字滤波器软件实现利用第(1)步设计的数字滤波器,调用fftfilt函数对信号进行滤波,观察滤波前后的信号波形变化。

4.思考题(1)简述窗函数法设计FIR数字滤波器的设计步骤。

(2)简述信号在传输过程中失真的可能原因。

5.实验报告要求(1)结合实验内容打印程序清单和信号波形。

(2)对实验结果进行简单分析和解释。

(3)简要回答思考题。

常用窗函数技术参数及性能比较一览表窗类型最小阻带衰减主瓣宽度精确过渡带宽窗函数矩形窗21dB 4π/M 1.8π/M boxcar三角窗25dB 8π/M 6.1π/M bartlett汉宁窗44dB 8π/M 6.2π/M hanning哈明窗53dB 8π/M 6.6π/M hamming 布莱克曼窗74dB 12π/M 11π/M blackman 取凯塞窗时用kaiserord函数来得到长度M和βkaiser附录:(1)FIR数字滤波器设计clear;clc;close all;format compactfp=120, Ap=0.1, fs=150, As=60 ,Fs=1000,wp=2*pi*fp/Fs,ws=2*pi*fs/Fs ,Bt=ws-wp; M=ceil(11*pi/Bt);if mod(M,2)==0; N=M+1, else N=M, end;wc=(wp+ws)/2,n=0:N-1;r=(N-1)/2;hdn=sin(wc*((n-r)+eps))./(pi*((n-r)+eps));win=blackman(N); hn=hdn.*win',figure(1);freqz(hn,1,512,Fs);grid on;图(一)FIR数字滤波器(2)FIR数字滤波器软件实现n=[0:190];xn=sin((2*pi*120/1000)*n)+sin((2*pi*150/1000)*n);yn=fftfilt(hn,xn);figure(2)subplot(2,1,1);plot(xn);title('滤波前信号') ;subplot(2,1,2);plot(yn);title('滤波后信号');图(2)FIR数字滤波器软件实现思考题:(1) 用升余弦窗设计一线性相位低通FIR数字滤波器,并读入窗口长度。

FIR数字滤波器的Matlab实现

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设计FIR数字滤波器

实验八 用MATLAB 设计FIR 数字滤波器(二)一、实验目旳:1、加深对窗函数法设计FIR 数字滤波器旳基本原理旳理解。

2、学习用MATLAB 语言旳窗函数法编写设计FIR 数字滤波器旳程序。

3、理解MATLAB 语言有关窗函数法设计FIR 数字滤波器旳常用函数用法。

二、实验原理:1、用窗函数法设计FIR 数字滤波器 FIR 数字滤波器旳系统函数为N-1-n n=0H(z)=h(n)z ∑这个公式也可以当作是离散LSI 系统旳系统函数M-m -1-2-mmm=0012m N -1-2-k-k12k k k=1bz b +b z +b z ++b z Y(z)b(z)H(z)====X(z)a(z)1+a z +a z ++a z1+a z ∑∑ 分母a 0为1,其他a k 全都为0时旳一种特例。

由于极点所有集中在零点,稳定和线性相位特性是FIR 滤波器旳突出长处,因此在实际中广泛使用。

FIR 滤波器旳设计任务是选择有限长度旳h(n),使传播函数H(e j ω)满足技术规定。

重要设计措施有窗函数法、频率采样法和切比雪夫等波纹逼近法等。

本实验重要简介窗函数法。

用窗函数法设计FIR 数字滤波器旳基本环节如下:(1)根据过渡带和阻带衰减指标选择窗函数旳类型,估算滤波器旳阶数N 。

(2)由数字滤波器旳抱负频率响应H(e j ω)求出其单位脉冲响应h d (n)。

可用自定义函数ideal_lp实现抱负数字低通滤波器单位脉冲响应旳求解。

程序清单如下:function hd=ideal_lp(wc,N) %点0到N-1之间旳抱负脉冲响应%wc=截止频率(弧度)%N=抱负滤波器旳长度tao=(N-1)/2;n=[0:(N-1)];m=n-tao+eps; %加一种小数以避免0作除数hd=sin(wc*m)./(pi*m);其他选频滤波器可以由低通频响特性合成。

如一种通带在ωc1~ωc2之间旳带通滤波器在给定N值旳条件下,可以用下列程序实现:Hd=ideal_lp(wc2,N)-ideal_lp(wc1,N)(3)计算数字滤波器旳单位冲激响应h(n)=w(n)h d(n)。

FIR数字滤波器设计及MATLAB使用.

FIR数字滤波器设计及MATLAB使用.

数字信号处理课程设计《数字信号处理》课程设计报告FIR数字滤波器设计及MATLAB实现专业:通信工程班级:通信1101班组次:第9组姓名及学号:姓名及学号:目录一、设计目的 (3)二、设计任务 (3)三、设计原理 (3)3.1窗函数法 (3)3.2频率采样法 (4)3.3最优化设计 (5)3.3.1等波纹切比雪夫逼近准则 (5)3.3.2仿真函数 (6)四、设计过程 (7)五、收获与体会 (13)参考文献 (13)FIR数字滤波器设计及MATLAB实现一、设计目的FIR滤波器:有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。

因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

滤波器设计是根据给定滤波器的频率特性,求得满足该特性的传输函数。

二、设计任务H e满足一定FIR滤波器设计的任务是选择有限长度的()h n,使传输函数()jw的幅度特性和线性相位要求。

由于FIR滤波器很容易实现严格的线性相位,所以FIR 数字滤波器设计的核心思想是求出有限的脉冲响应来逼近给定的频率响应。

设计过程一般包括以下三个基本问题:(1)根据实际要求确定数字滤波器性能指标;(2)用一个因果稳定的系统函数去逼近这个理想性能指标;(3)用一个有限精度的运算去实现这个传输函数。

三、设计原理H e满足一定FIR滤波器设计的任务是选择有限长度的()h n,使传输函数()jw的幅度特性和线性相位要求。

由于FIR滤波器很容易实现严格的线性相位,所以FIR数字滤波器设计的核心思想是求出有限的脉冲响应来逼近给定的频率响应。

设计过程一般包括以下三个基本问题:(1)根据实际要求确定数字滤波器性能指标;(2)用一个因果稳定的系统函数去逼近这个理想性能指标;(3)用一个有限精度的运算去实现这个传输函数。

3.1窗函数法设计FIR数字滤波器的最简单的方法是窗函数法,通常也称之为傅立叶级数法。

FIR数字滤波器设计及MATLAB实现

FIR数字滤波器设计及MATLAB实现
s s P A Tc 系统实 践 Y R c .E
l 2 9
FR 字 滤 波 器 设 计 及 MA L 实现 I数 T AB
冯 冠超 ( 哈尔滨工业大学 ( 威海 ) 山东威海
24 0) 6 2 9
摘 要 :主要 研 究在 MA IBt境 T FR ̄ 字滤 波 器的 典 型设计 方 法 ,应 用MA L B 号 处理 工 具箱及 其 扩展 函数 ,使 得如 TA  ̄ . IA c TA信 何在 数 字信 号 处理过 程 中较 复杂 的数 字 滤波 器设计 问题 得 以解 决 。
gr i d
1 引 言 .
数字 信 号 处理 是在 2 世 纪6 年 代 ,用 数字 的数 值 计 算 方法 0 O 对 信号 进 行 处 理 ,以达 到 提 取 有 用信 息 便 于应 用 的 目的 , 目前 数 字信号 处理 技术 已广 泛 应用 于 多个领 域 数 字 滤 波器 根 据 其 单 位 冲激 响应 函数 的 时域 特 性 可 分 为两 类 :无 限冲激 响 应 l 滤波 器和 有 限 冲激 响 应 FR 波器 。 F R l R I滤 I 滤 波器 最 重要 的 优点 就是 由于 不存 在 系统 极点 ,FR 波器 是绝 对 I滤 稳 定 的系 统 。MA L B为数 字 滤 波 的研 究 提供 了一 个直 观 、高 TA 效 、便 捷 的 利器 。 它 以矩 阵 运算 为基 础 ,把 计 算 、 可视 化 、程 序 设计融 合到 一 个交互 式 的工 作环 境 中。
参 考文 献 [13 14 晓晨, 李涛, 刘路 . MATL B3 箱应 用指 南[ .电子工业 出 A - M】
版 社 .0 0 20 .
3 窗函数 设 计的基 本 思想 .
窗 函数 法 设 计 的基 本 思 想 是 把给 定 的频 率 响应 通 过 离 散傅 里 叶逆 变换 ,求 得 脉 冲 响应 ,然 后利 用 加 窗 函 数对 它进 行 截 断 和 平 滑 ,以 实现 一 个物理 可 实 现且 具 有线 性相 位 的 FR I 滤波 器 的 设 计 目的。 其 核 心 是从 给 定 的 频 率特 性 ,通 过 加窗 确 定 有 限 长 单 位脉 冲 Ⅱ 应序  ̄ h n ,过 程 如下 : 向 J ()

FIR数字滤波器的Matlab实现

FIR数字滤波器的Matlab实现

第7章 FIR 数字滤波器的Matlab 实现7.1 实验目的● 学习用窗函数法设计FIR 数字滤波器的原理及其设计步骤; ● 学习编写数字滤波器的设计程序的方法,并能进行正确编程; ● 根据给定的滤波器指标,给出设计步骤。

7.2 实验原理及实例分析7.2.1 FIR 低通数字滤波器的设计原理如果系统的冲激响应)(n h d 为已知,则系统的输入/输出关系为:)()()(n h n x n y d ⋅=对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。

假设所希望的数字滤波器的频率响应为)(jw d e H ,它是频域的周期函数,周期为2π,那么它与)(jw d e H 相对应的傅立叶系数为dw e e H n h jnw jw d d )(21)(⎰-=πππ以)(n h d 为冲激响应的数字滤波器将具有频域响)(jw d e H 。

但是将)(n h d 作为滤波器脉冲响应有两个问题:(1) 它是无限长的,与FIP 滤波器脉冲响应有限长这一前提不一致 (2) 它是非因果的,0,0)(<≠n n h d 对此,要采取以下的措施,(1) 将)(n h d 截短 (2)将其往右平移, 由此得到)(2n h 的实际频域响应jnwN n jwd en h e H ∑-==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 现象所带来的影响。

基于MATLAB与CCS的FIR滤波器的C语言实现

基于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滤波器实现函数,并传入输入和输出信号的数组以及信号的长度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

W
(e
j
)

{0.5WR
()

0.25[WR
(

2 )
N 1
WR
(

2
)]}e N 1
j(
N 1) 2
W ()e ja
W
()

0.5WR
()

0.25[WR
(

2 )
N 1
WR
(

2 )]
N 1
(6-2-12b)
W () 是三项矩形窗的幅度响应 WR() 的移位加权和,
n0

H (z) z(N1)H (z1)
则有
H (z) 1 [H (z) z(N1)H (z1)] 2

1
N 1
h(n)[ z n

z (N 1) z n ]
2 n0

z ( N 1) / 2
N 1
h(n)
1
(n N 1)
[z 2

(n N 1)
❖ 滤波器设计任务的中心就是求得系统函数。 数字滤波器的系统函数最主要的特征有三个: 幅度平方响应、相位响应和群延迟。
❖ IIR滤波器可以用较少的阶数获得较好的幅度响应, 但由于其结构存在反馈,可能造成系统的不稳定, 其优异幅度响应一般是以相位的非线性为代价的, 非线性相位会引起频率色散。
❖ FIR系统的最主要特性之一就是可以构成具有线性 相位特性的滤波器。所谓线性相位特性是指滤波 器对不同频率的正弦波所产生的相移和正弦波的 频率成直线关系。因此,在滤波器通带内的信号 通过滤波器后,除了由相频特性的斜率决定的延 迟外,可以不失真地保留通带以内的全部信号。
❖ FIR数字滤波器严格的线性相位特性对于语音信号 处理和数据传输是很重要的。
FIR数字滤波器的定义
FIR DF的单位脉冲响应h(n)仅含有有限 个(N个)非零值,是因果的有限长序列,该 序列h(n)的Z变换为:
N 1
H (z) h(n)z n n0
H(z)是Z-1的N-1阶多项式,在Z平面上有N-1 个零点,在z=0处有N-1个重极点。
,则有
H () h( N 1) (N1)/2 2h( N 1 m) cos m
2
m1
2
将上式记为
(N 3)/ 2
H () a(n) cos n n0
(6-1-14)
其中
a(0) h( N 1) 2
(6-1-15)
a(n) 2h( N 1 n),n 1,2, N 1 (6-1-16)
hd
(n)

1
2
c e jae jnd
c


c
(n

a)

na na
是一个以a为对称中心的偶对称的无限长 (6-2-5)
的非因果序列。
要得到有限长的h(n),最简单的方法是用一长为 N的矩形窗w(n)=RN(n)截断hd(n)。
按照线性相位滤波器的要求,h(n)必须是偶对
若增加截取长度N,则在主瓣附近的窗的频率响应为
WR ()

si n(N / 2) si n( / 2)

si n(N / 2) /2

N si n x x
该函数的性质:随着x加大(即N加大),函数曲线波动的 频率加快,主瓣幅度加高,旁瓣幅度也同 样加高,主瓣与旁瓣的相对比例保持不变。
这个相对比例是由sinx/x决定的, 也就是说是由矩形窗 函数的形状决定的。
H d (e j ) H d ( )e j

H
d
(
)

1 0
c
(6-2-9)
c
将(6-2-8)式和(6-2-9)式代入(6-2-7)式,得
H (e j ) 1
2

H d ( )e jWR ( )e j( ) d
使旁瓣相互抵消,能量更集中在主瓣,但主瓣宽度比矩
形窗的主瓣加宽了一倍,为( 8 / N ).
3. 汉明(Hamming)窗,又称改进 的升余弦窗
w(n)

[0.54

0.46
c
2n
os( N
1)]RN
(n)
其幅度响应为
(6-2-13a)
W ()

0.54WR ()

0.23[WR (

由式 h(n) hd (n)(n)
按复卷积定理有
H (e j ) 1
2

Hd (e j )W (e j( ) )d
设矩形窗的频率响应为 WR (e j )
N 1
WR (e j ) RN (n)e jn
n0
பைடு நூலகம்

1 e jN 1 e j
z 2]
n0
2
频响:
H (e j ) H (z) |ze j

j ( N 1)
e2
N 1
h(n) cos[(n

N
1)]
n0
2
其求和项全为实数
将H (e j )表示成相位函数()和 幅度函数H ()的形式,即
H (e j ) H ()e j()

称的,如上图所示。对称中心必须等于滤波器的
延时常数,即 a (N 1) / 2
故有
h(n) hd (n)RN (n)
a (N 1) / 2
(6-2-6)
图6-2-1 理想低通滤波器的单位脉冲响应及矩形窗截取
2. 吉布斯(Gibbs)效应
因频率响应是单位脉冲响应的傅立叶变换,
故可求得矩形窗截取后滤波器的频率响应为
N 1
H (e j ) hd (n)e jn n0
上式为有限项,N越大,所设计DF与理想DF差别越 小,误差就越小。但对于矩形窗截取还存在所谓吉 布斯(Gibbs)效应,使得滤波器的特性很差,不 能满足实际的需要。
下面从频域卷积的角度来分析由矩形窗所求得的 滤波器的频率响应。
窗函数设计法 频率取样设计法 FIR DF的计算机辅助设计(优化设计)
FIR滤波器的设计问题在于寻求一系
N 1
统函数 H (z) h(n)z n ,使其频率
n0
响应
H
(e
j
)

H
(
z)
|
ze
j
逼近滤波器要求的
理想频率响应 H d (e j ) 。
如果要求FIR滤波器具有线性相位特性, 则h(n)必须满足上节所述的对称条件。
(6-2-3)
所以选择窗口函数的形状和长度是窗口函数 法的关键。
下面以理想低通滤波器为例说明其设计过程
设理想低通滤波器的频率响应H d (e j )为,
Hd
(e
j
)

e 0
ja
c
c
(6-2-4)
ωc为滤波器的截止频率;a为延时常数
相应的单位脉冲响应为
sin[c (n a)]
2
中的各项相对于 (N 1) / 2对称的项相等。
将相等项合并,因N为奇数,余中间项 h( N 1)
2

H
()

N 1
h(n)
cos[(n

N
1)]
n0
2
h( N 1) (N3)/2 2h(n) cos[(n N 1)]
2
n0
2

m

N 1 n 2
其频率响应为
W (e j ) 2 [sin(N / 4)] N sin(N / 4)
主瓣宽度为( 8 / N).
(6-2-11a) (6-2-11b)
2. 汉宁(Hanning)窗,又称升余弦窗
1
2n
w(n)

[1 2
c os ( N
1)]RN
(n)
(6-2-12a)
其频率响应 W (e j )和幅度响应 W ()分别为
为了消除吉布斯效应,取得较好频率特性,一般采用 其他类型的窗函数 w(n),对 hd (n) 进行加窗处理。
2、常用的窗函数
1. 三角形窗(Bartlett Window)
w(n)

2
2n , N 1 2n
,
N 1
0 n N 1 2
N 1 n N 1 2
理想DF的频响是逐段恒定的,且在频带边界处有不连 续点。因而所求得的 hd (n) 一般是无限长的,且是非 因果的。
要想得到一个因果的有限长的滤波器h(n), 最直接的方法是截断 hd (n) ,或者说用一个 窗口函数 w(n) 对 hd (n) 进行加窗处理,即
h(n) hd (n)w(n)
2
2
由于cos n 对 0,,2 皆为偶对称,所以 幅度函数 H () 对 0,,2 也是偶对称。
因此该滤波器适合于设计任何关于 0,,2
为偶对称特性频率的滤波器。
下表给出了上述4种类型的线性相位滤 波器的相位响应、时域幅度响应和频域幅 度响应的示意图。
第三部分:线性相位FIR DF的设计方法
H
()

N 1
h(n)
cos[(n

N
1)]
n0
2
() ( N 1)
2
其中 幅度函数是标量函数,可正可负;
相位函数是的线性函数,且通过原点,即:具有严 格的线性相位特性。
如图所示
2.线性相位FIR滤波器的幅频特性
对于
H
()
相关文档
最新文档