FIR数字滤波器原理及硬件实现方法
moboyou 2025-04-23 14:11 72 浏览
欢迎大家关注转发交流,不定时更新!
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技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录
-
首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...
- Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用
-
一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...
- Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用
-
原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...
- FILTER函数介绍及经典用法12:FILTER+切片器的应用
-
EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...
- office办公应用网站推荐_office办公软件大全
-
以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...
- WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!
-
办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...
- 收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程
-
原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...
- 批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数
-
批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...
- Excel函数公式教程(490个实例详解)
-
Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...
- Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!
-
工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...
- Excel中的SCAN函数公式,把计算过程理清,你就会了
-
Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...
- Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效
-
在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...
- Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!
-
在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...
- Excel新版本,IFS函数公式,太强大了!
-
我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...
- Excel不用函数公式数据透视表,1秒完成多列项目汇总统计
-
如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...
- 一周热门
- 最近发表
-
- Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录
- Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用
- Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用
- FILTER函数介绍及经典用法12:FILTER+切片器的应用
- office办公应用网站推荐_office办公软件大全
- WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!
- 收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程
- 批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数
- Excel函数公式教程(490个实例详解)
- Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!
- 标签列表
-
- 外键约束 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)
- 可以上传视频的网站源码 (25)
- 随机函数如何生成小数点数字 (31)
- 随机函数excel公式总和不变30个数据随机 (33)
- 所有excel函数公式大全讲解 (22)
- 有动图演示excel函数公式大全讲解 (32)
