FIR数字滤波器原理及硬件实现方法
moboyou 2025-04-23 14:11 60 浏览
欢迎大家关注转发交流,不定时更新!
1、FIR滤波器的原理
FIR滤波器的传递函数为:
转换到时域为:
信号通过FIR滤波器不失真的条件就是滤波器在通带内具有恒定的幅频特性和线性相位特性,FIR滤波器和后面要说的IIR滤波器相比,其主要优点就是线性相位。
线性相位的系统需要其单位冲激响应h[n]满足下面的式子,即系统单位冲激响应奇对称或偶对称。
由于N可以取奇数或者偶数,而且又有正负之分,固FIR滤波器的单位冲激响应一共有四种不同的情况,下面具体讨论:
1)、h[n]=h[N-1-n],且N为奇数
可以看出在该条件下,系统传输函数具有严格的线性相位,并且从上式看得出其幅频特性中包含cos(nw)函数,固幅频函数关于w=0,pi,2*pi三点偶对称,固该类型的FIR滤波器(系统冲激响应h[n]长度为奇数且关于N-1/2偶对称)适合设计高通,低通,带通,带阻等各类滤波器。
2)、h[n]=h[N-1-n],且N为偶数
可以看出在该条件下,系统传输函数具有严格的线性相位,并且从上式看得出其幅频特性中包含cos[(n-1/2)w)]函数,其关于w=pi奇对称,固其在w=pi处肯定等于0,因此该类型FIR滤波器不适合设计高通和带阻型。
3)、h[n]=-h[N-1-n],且N为奇数
因为h[n]奇对称,且N为奇数,那么可以得出h[(N-1)/2]=0,根据上面推导可以得到该系统传输函数为:
由于sin(nw)关于w=0,pi,2pi奇对称,固改系统传输幅频特性在w=0,pi,2pi点必须是0,因此该类型FIR滤波器只适合设计带通滤波器。
4)、h[n]=-h[N-1-n],且N为偶数
由于sin[(n-1/2)w]关于w=0,2pi奇对称,关于w=pi偶对称,因此该类型FIR滤波器不能设计低通和带阻滤波器。
可以看出在h[n]满足上述四种情况时,系统的传输函数的相频特性都满足线性相位的要求,但是当h[n]奇对称时,通过该滤波器的所有频率成分上都会额外添加一个90度的相移,这相当于对进入FIR滤波器的信号先进行了移相在滤波。而且不管h[n]是偶对称还是奇对称,信号经过FIR滤波器后会引入一个N-1/2的群延时。
2、FIR滤波器的实现方法
2.1、窗函数设计法
根据上面分析,我们看到FIR滤波器的设计主要是确定其冲激响应h[n]的系数,不同的系统对应不同的频率特性。试想对于一个理想低通滤波器,其频域的有限宽度,对应到时域就是无限长,这肯定是物理不可实现的,在现实中,我们为了FIR的可实现性,会选择加窗的方法去对理想型滤波器进行逼近。
窗函数设计法,其实就是一种无限长度的截断,这会造成一个问题,那就是频谱的泄露 ,试想理想滤波器的冲激响应是无限长,如果截取其中一段进行近似表示,那么截取后的信号频谱其频域将会无限长,那么通过加窗就造成原有的有限频带分散到无限的频带上,这就是所谓的频谱泄露。频谱泄露不可避免,但是要尽量减小。
在实际的设计过程中窗函数的类型有很多,不同窗函数对设计的滤波器性能有不同的影响,实际应用中要根据不同的需求选择不同的窗函数。具体可以看下图所示,可以看到不同的窗函数都具有明显的主瓣和旁瓣,其中主瓣宽度和旁瓣的衰减特性是不同窗函数明显的不同也是我们选取窗函数的依据,矩形窗具有最窄的主瓣宽度,但也有最大的旁瓣幅度(第一旁瓣较主瓣大概只衰减13dB);blackman窗具有最大的旁瓣衰减,同时也有最大的主瓣宽度,通常hanning窗和hamming窗具有较小的旁瓣幅度和较快的衰减(分别关系到设计FIR滤波器的旁瓣电平和过渡带宽度),是常用的窗函数。
下表给出了不同窗函数的主瓣宽度和第一旁瓣衰减,后面会讲到窗函数设计FIR滤波器过程中会应用到这些参数。
窗函数类型 | 主瓣宽度 | 第一旁瓣衰减(dB) |
矩形窗 | 4pi/N | -13 |
汉宁窗 | 8pi/N | -31 |
哈明窗 | 8pi/N | -41 |
bartlett窗 | 8pi/N | -25 |
blackman窗 | 12pi/N | -57 |
三角窗 | 8pi/N | -25 |
Kaiser窗 | 可调 | 可调 |
chebyshew窗 | 可调 | 可调 |
利用窗函数设计滤波器十分简单,其步骤为:
1)、对理想滤波器的频域响应进行Fourier逆变换得到理想滤波器的单位冲激响应h[n];
2)、根据设计FIR滤波器的性能指标选择响应的窗函数对上面的理想滤波器的单位冲激响应进行加窗截取即可。
一般情况下,利用窗函数进行FIR滤波器设计过程中,窗的长度选择的越长,那么得到的滤波器其幅频特性越好,但是对应的数据处理量就会越大,例如当我们给定了需要设计FIR滤波器的过渡带宽度就能够根据上面表格的主瓣宽度得到窗口长度N。还有一个需要明确的就是通过上面各类窗函数的图形我们知道利用窗函数得到的FIR滤波器的单位冲激响应h[n]肯定是偶对称的,那么当N为偶数时不支持设计高通和带阻滤波器,如果要设计就必须满足N是奇数才行。
举例说明:假设我们需要设计一个FIR低通滤波器,该滤波器性能指标如下:通带归一化频带wp=0.3(0.3*5000=1500Hz),阻带归一化频点wp=0.5(0.5*5000=2500Hz),阻带衰减不小于30dB,通带纹波不高于3dB,并利用设计的低通滤波器对输入的信号sin(2*pi*f1*t)+sin(2*pi*f2*t),其中f1=1KHz,f2=3.3KHz,采样频率fs=10KHz的信号进行滤波.
设计分析:根据要求,该FIR滤波器的阻带衰减要大于30dB,那么根据上面表格,我们就不能选择像矩形窗这样的窗函数,这里我们可以选择哈明窗,因为其第一旁瓣衰减有41dB满足要求;由于过渡带宽度为:0.5pi-0.3pi=0.2pi,那么由此可以得到哈明窗的窗函数长度N=40。
观察通过hamming窗后得到的滤波器频响曲线符合设计要求,当我们利用加窗后的滤波器对我们的输入进行滤波,得到的滤波结果如下图所示:
可以看到滤波后,3.3KHz由于在滤波器通带以外,固会被滤除,而1KHz由于位于通带内部则保留了下来,同时可以看到选择合适的窗函数类型,能够取得更好的滤波器效果(例如上图汉明窗和矩形窗的比较)。同时从上图的滤波器时域输出可以看到信号经过FIR滤波器后有一段固有的延迟,这个延迟长度就是我们之前说的群延迟为:N-1/2。
MATLAB中集成了fir1函数,其就是采用经典的窗函数的方法去进行FIR滤波器的设计,其调用格式为:
b=fir1(n,wn[,'ftype',window]
其中,n为要实现的FIR滤波器的阶数,wn为相应FIR滤波器的截止频率,范围是0-1,'ftype'为滤波器类型,比如'high'代表高通,window为窗函数类型,其长度为n+1,默认采用哈明窗。
2.2、频率采样法设计FIR滤波器
上面讲的窗函数设计法是从时域的角度出发,那么我们能否从频域角度出发去设计我们需要的FIR滤波器呢?答案是肯定的。
频率采样法的目的也是希望构造出一个与理想滤波器频率响应尽量逼近的物理可实现滤波器。
假设,理想滤波器的传输函数为:
如果对上面的连续频谱进行采样,由于离散信号的频谱是周期的,固在0-2pi连续采样N个点,那么得到采样后的离散频谱为:
为了对理想频谱采样后,其时域响应h[n]满足线性相位的要求,即:
根据第一节分析,当h[n]=h[N-1-n],且N为奇数时,相应FIR滤波器的幅频特性A(w)关于w=0,pi,2pi三点偶对称;同理相应FIR滤波器的相位特性满足下式:
利用频率采样法设计滤波器也十分简单,其步骤为:
1)、根据设计FIR滤波器的设计指标,得到采样后的FIR滤波器的频域表示;
2)、根据反变换得到相应FIR滤波器的时域表示即可;
举例说明:当我们利用频率采样法,对理想低通滤波器进行采样,设计一个截止频率为pi/5的低通滤波器,并比较不同的频域采样点数对结果的影响?
除了上面的设计方法外,还有其他很多最优的FIR滤波器设计办法,在实际使用中,我们可以利用MATLAB提供的filterdesign进行FIR滤波器设计,具体设置界面如下图所示,输入自己的设计需求,工具就能自动生成你需要的FIR系数。
3、FIR滤波器的硬件实现方法
3.1、并行结构FIR滤波器结构
根据上面两节原理介绍,我们知道一个FIR滤波器,其硬件实现上就是一系列的乘法及加法器结构,具体如下图所示,可以看到最直观的硬件实现对于N位的FIR滤波器,我们需要N个乘法器和N-1个加法器也即所谓的并行结构。
在实际硬件实现过程中可以根据实际需求对下面框图进行变形,以设计出满足硬件实现要求的FIR滤波器。
3.2、串型结构FIR滤波器结构
所谓的串型结构,就是对于上图的结构我们硬件实现上只有一个乘法器和一个加法器,输入数据x[n]以fclk输入到N bits移位寄存器组,而下面虚线框图的乘法器和累加器工作在N*fclk时钟下,即能够保证在下一个x[n]输入前,Nbit移位寄存器里面的数据都进行了上图所示的乘累加计算。这里需要注意的是滤波器的输出y[n]是以fclk输出。这样的结构的好处就是我们能够以较少的硬件代价实现上图所示的FIR滤波器。
3.3、转置型FIR滤波器结构
根据3.1节的FIR滤波器结构,我们可以稍微变形,就会获得转置型FIR滤波器的实现,具体如下图所示,与3.1节的直接型FIR相比,转置型FIR没有增加或者降低实际的硬件开销(实际上转置型FIR硬件开销要大,因为其打拍的是乘法器输出的结果,这点要注意),但是由于转置型FIR滤波器减少了关键路径延迟,固实际实现电路较直接型能够收敛到更高的工作频率上。
在实际硬件实现过程中,除了上面的方法还有很多其他方法,比如由于FIR滤波器的系数是对称的,固我们是不是可以将相同的系数进行合并,那么肯定能节省一定数量的硬件资源,还有譬如分布式(DA)算法等这里不再赘述。
相关推荐
- Excel批量生成随机人名_excel批量生成随机数
-
之前的文章讲过怎么用在Excel生成随机银行名字。今天继续给大家分享下怎么在Excel生成随机人名。随机数据工具包书接上回,本文对之前的随机数据生成工具包进行封装调用,生成的结果直接写入到Excel表...
- 一学就会:Excel MOD函数,让数字周期循环变得easy
-
今日推荐:MOD函数。目的:根据当前日期在年内的周数对5个小组取余,再根据余数的值获取对应的值班小组。MOD函数也可以作为获取随机数的一种,只不过这种随机数是有一定规律的。【函数介绍】MOD——返回两...
- 1条公式,自动随机分配座位,你会么?
-
随机座位困局、老办法效率低、新公式能否破局?.上周学校开会说要给教室换排座位,教务处老师愁得头发都快白了。以前都是靠老师自己写名单再划拉划分组,现在新教室三列座位,学生又多,折腾了三天都没摆顺当。听说...
- excel快速制作姓名随机分配表_姓名随机分组
-
快速制作随机分配表。当需要把这一列的姓名进行随机分组应该怎么操作?是不是还在一行一行的去复制粘贴,这样效率是非常慢的。怎么快速的制作一个随机的分组?·首先在第一组输入等于第一个姓名的A2单元格,双击填...
- Excel里实现随机分组案例:导入名单随机分组
-
大家好呀,今天来给大家分享如何快速在Excel里实现随机分组。如下图所示,有15个人,现在要随机分成3组,每组5个人。只要简单两步,就能完成分组。第一步:为每个人设置一个随机数并编序号C列输入公式=R...
- 办公必备的15个Excel技巧,绝对的硬核干货,收藏备用
-
Excel的灵魂在于数据的分析与统计,而分析与统计就离不开函数或公式,今天要给大家分享的15个函数公式,是工作中常用的,可以直接套用。一、从身份证号码中提取出生年月。函数1:Tex...
- Excel如何将某单元格区域数据随机排序
-
如下图是某公司人员名单,现在想要对这些员工进行随机分组。即对单元格区域内数据进行随机排序。选中B2:E10单元格区域点击下图选项(Excel工具箱,百度它即可了解详细的下载安装方法,本文这里就不做具体...
- 一键生成随机口算题,Excel工具妙用
-
小学生每天都要做口算,今天我给大家分享一下如何用excel来自制小学生的口算题。看我这里已经做好了,它的公式是这样,然后往下去拉,想要多少要多少,而且每一道题都是随机的。而且这一个表做好了之后,只要让...
- Excel秒变抽签神器!1分钟搞定随机点名/抽奖
-
还在为年会抽奖、课堂点名、分组任务抓狂?别求人写代码啦!Excel自带隐藏大招1分钟设置,永久使用,按个键就能开抽超简单3步设置(有手就会版)1随机号生成在姓名表旁新建「随机号」列输入=RAND...
- 基础函数20例,案例解读,再不掌握就真的Out了
-
Excel中的函数是Excel的一个重要工具,如果你不及时掌握,对于Excel的应用、工作效率等会受到很大的影响,今天,小编给大家分享20个Excel的基础函数,对大家肯定很有帮助。练习文件在文末领取...
- 怎么利用Excel实现随机取样_excel随机取数据
-
今天跟大家分享一下Excel如何随机抽样1.打开Excel软件2.选中要抽取数据的单元格区域3.点击下图选项(Excel工具箱,百度即可了解详细下载安装信息,本文这里就不做详细解说。)4.点击【统计与...
- 1分钟学会Excel总表更新,分表实时同步,再也不用熬夜了!
-
你是不是还在用筛选→复制→粘贴的老方法拆分Excel数据?每次按类别整理报表都要折腾半小时?别傻了!今天教你用FILTER函数一键搞定,数据更新还能自动同步!第一步:准备工作表新建3个工作表,分...
- excel计算几个数范围,excel怎么计算一个范围的个数
-
excel怎么计算某些范围的数的个数,需要计算0-5,5-10,10-15,……1000的...比如这些数字在A列,从B1至B10求10个范围的数量。在B1输入:=countif(a:a,=10)在B...
- 让Excel随机排序_excel如何设置随机排序
-
随机排序如下图,希望对A列的应聘人员随机安排面试顺序。先将标题复制到右侧的空白单元格内,然后在第一个标题下方输入公式:=SORTBY(A2:B11,RANDARRAY(10),1)RANDARRAY的...
- 对人员进行随机分组,分步骤详细解释,看了就学会了
-
大家好,我是套路EXCEL!如上图,需要将12个人随机分成3组,每组4人。函数公式如下:=ROUNDUP(CHOOSECOLS(SORT(HSTACK(ROW(1:12),RANDARRAY(12...
- 一周热门
- 最近发表
- 标签列表
-
- 外键约束 oracle (36)
- oracle的row number (32)
- 唯一索引 oracle (34)
- oracle in 表变量 (28)
- oracle导出dmp导出 (28)
- 多线程的创建方式 (29)
- 多线程 python (30)
- java多线程并发处理 (32)
- 宏程序代码一览表 (35)
- c++需要学多久 (25)
- css class选择器用法 (25)
- css样式引入 (30)
- css教程文字移动 (33)
- php简单源码 (36)
- php个人中心源码 (25)
- php小说爬取源码 (23)
- 云电脑app源码 (22)
- html画折线图 (24)
- docker好玩的应用 (28)
- linux有没有pe工具 (34)
- mysql数据库源码 (21)
- php开源万能表单系统源码 (21)
- 可以上传视频的网站源码 (25)
- 随机函数如何生成小数点数字 (31)
- 随机函数excel公式总和不变30个数据随机 (33)