一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于FPGA的任意阶FIR滤波器的实现方法与流程

2022-02-22 17:46:03 来源:中国专利 TAG:

一种基于fpga的任意阶fir滤波器的实现方法
技术领域
1.本发明涉及一种基于fpga的任意阶fir滤波器的实现方法,用在fpga中实现任意阶的fir滤波器。


背景技术:

2.数字滤波器分为有限冲激响应(fir)滤波器和无限冲激响应(iir)滤波器。由于iir滤波器具有递归运算的环节,所以在相同的幅频响应下,iir滤波器的阶次一般比fir滤波器低得多,所用存储单元少,滤波体积小。但是,iir的递归型结构使得系统存在极点,在设计时必须把所有极点置于单位圆内,否则系统不稳定;而且iir滤波器的递归结构不利于在fpga中实现;此外,iir滤波器的相位往往是非线性的,信号会产生失真。
3.fir滤波器可以设计出具有线性相位的滤波系统,从而保证滤波后的信号不会产生失真;fir系统不存在极点,所以系统是稳定的;fir滤波器不是递归型结构,截断误差不会累积,且在fpga中易于实现。但是,对于相同的频率特性,fir滤波器的阶数比iir滤波器要高得多,导致fir滤波器占用的系统资源较多。
4.当设计的fir滤波器的截止频率与采样率的比值要求过小、阻带抑制要求太大或者通带平坦性要求太高时,fir滤波器的阶数往往很大。目前常用的fpga电子设计软件中虽然集成了fir ip核,但是在实现高阶数的fir滤波器时性能不佳。现有发明中存在使用分块思想实现高阶fir滤波器的技术,但是都需要fir滤波器的阶数是计算步骤中某个参量的倍数,制约了fir滤波器的设计。


技术实现要素:

5.本发明的目的在于:克服现有技术的不足,提供一种基于fpga的任意阶fir滤波器的实现方法,针对fpga电子设计软件中无法实现的高阶fir滤波器,实现高速、低资源消耗计算。
6.本发明采用的技术方案为:
7.一种基于fpga的任意阶fir滤波器的实现方法,步骤如下:
8.(1)设计任意阶fir滤波器,阶数n无需与后续步骤的其他变量成倍数关系;
9.(2)根据fir滤波器阶数n、待滤波信号的采样率fs、fpga工作时钟fc和乘法器的流水线级数k,确定fir滤波器的分块数量m;
10.(3)将fir滤波器系数分为m部分,各部分包含的滤波器系数的数量分别为n1、n2、

、nm;
11.(4)设计m个rom存储器,依次编号1,2,

,m,分别存储fir滤波器系数的m个部分;
12.(5)设计m个ram存储器,依次编号1,2,

,m;
13.(6)设计m个乘法器,依次编号1,2,

,m;
14.(7)在采样时钟的上升沿,将待滤波信号写入1号ram的当前地址,各个rom存储器的地址清零;
15.(8)在每个fpga工作时钟的上升沿,从各个rom存储器中读取当前地址的数据放入对应编号的乘法器的1端口中,从各个ram存储器中读取当前地址的数据放入对应编号的乘法器的2端口中;
16.(9)对全部m个乘法器的运算结果求和,并与本次滤波运算之前的各次相乘求和结果进行累加;
17.(10)各个rom存储器的地址指针加一,各个ram存储器的地址指针减一;
18.(11)重复执行n1次步骤(8)-(10),第n1次不执行步骤(10),进入步骤(12);
19.(12)各个ram存储器当前地址处的数据同时向后一个ram传递;
20.(13)对本次滤波运算最后一次累加结果进行截位,得到本次滤波运算结果;
21.(14)重复执行步骤(7)-(13),得到各个采样点数据的滤波结果。
22.所述步骤(2)根据fir滤波器阶数n、待滤波信号的采样率fs、fpga工作时钟fc和乘法器的流水线级数k,确定fir滤波器的分块数量m,公式为:
[0023][0024]
所述步骤(3)将fir滤波器系数分为m部分,各部分包含的滤波器系数的数量分别为n1、n2、

、nm。滤波器系数各部分的数量满足如下条件:
[0025][0026]
所述步骤(4)设计m个rom存储器,依次编号1,2,

,m,分别存储滤波器系数的m个部分,具体为:
[0027]
m个rom存储器的深度相同,都为n1,1号rom存储器中存储fir滤波器系数的第1部分,2号rom存储器中存储fir滤波器系数的第2部分,
……
,(m-1)号rom存储器中存储fir滤波器系数的第(m-1)部分;m号rom存储器中存储fir滤波器系数的第m部分,并在最后补(n
1-nm)个零。
[0028]
m个rom存储器的位宽相同,等于fir滤波器系数的位宽wb。
[0029]
所述步骤(5)设计m个ram存储器,依次编号1,2,

,m,具体为:
[0030]
m个ram存储器的深度相同,且等于rom存储器的深度n1;
[0031]
m个ram存储器的位宽相同,且等于待滤波信号的位宽ws。
[0032]
所述步骤(6)设计m个乘法器,依次编号1,2,

,m,具体为:
[0033]
乘法器具有2个输入端口,1端口的位宽等于fir滤波器系数的位宽wb,2端口的位宽等于待滤波信号的位宽ws;
[0034]
乘法器具有1个输出端口,其位宽wm使用如下公式计算:
[0035][0036]
其中,ceil表示向上取整,b1,b2,

,bn表示fir滤波器系数的值。
[0037]
所述步骤(10)各个rom存储器的地址指针加一,各个ram存储器的地址指针减一,具体为:
[0038]
在一次滤波运算过程中,rom存储器的地址从零开始,在每个fpga工作时钟的上升沿加一,直至(n
1-1);
[0039]
在一次滤波运算过程中,ram存储器的地址从上一次滤波运算的结束地址开始,在每个fpga工作时钟的上升沿减一,当减小到零后,在下一个fpga工作时钟的上升沿变为(n
1-1),之后在每个fpga工作时钟的上升沿减一。
[0040]
所述步骤(12)各个ram存储器当前地址处的数据同时向后一个ram传递,具体为:
[0041]
1号ram存储器当前地址的数据赋值给2号ram存储器的当前地址,2号ram存储器当前地址的数据赋值给3号ram存储器的当前地址,
……
,(m-1)号ram存储器当前地址的数据赋值给m号ram存储器的当前地址;
[0042]
各ram存储器的数据传递同时并行执行。
[0043]
本发明与现有技术相比的有益效果是:
[0044]
(1)本发明实现的fir滤波器的阶数不需要与计算步骤的其他变量成倍数关系,可以根据需求任意设计。
[0045]
(2)本发明可以实现的fir滤波器仅受fpga内部资源大小的限制,不受fir滤波器的阶数、fpga工作时钟频率和数据采样率的限制。
[0046]
(3)本发明获得的滤波结果可以在一个采样周期内计算完毕,滤波结果结果仅存在fir滤波器的原理延时,不存在计算延时。
[0047]
(4)本发明将fir滤波器分块并行处理,对每块串行处理,兼顾了运算速度与资源消耗。
附图说明
[0048]
图1为本发明方法流程图;
[0049]
图2为ram地址指针变化过程图;
[0050]
图3为某fir滤波器幅频响应图。
具体实施方式
[0051]
下面结合附图和实际实验数据对本发明作更详细地描述。下面对本发明说明性的描述是为了本领域的技术人员便于理解本发明,但是应该清楚,本发明不限于具体实施方式的范围。
[0052]
如图1所示,本发明提出了一种基于fpga的任意阶fir滤波器的实现方法,步骤如下:
[0053]
(1)设计任意阶fir滤波器,阶数n无需与后续步骤的其他变量成倍数关系;
[0054]
(2)根据fir滤波器阶数n、待滤波信号的采样率fs、fpga工作时钟fc和乘法器的流水线级数k,确定fir滤波器的分块数量m:
[0055]
[0056]
上式约束了m的最小值,设计时m应取满足上式的最小整数以将系统资源的消耗降至最低。上式中,数字“8”代表本方法状态机运行时固定消耗的fpga工作时钟周期数量。
[0057]
(3)将滤波器系数分为m部分,各部分包含的滤波器系数的数量分别为n1、n2、

、nm。滤波器系数各部分的数量满足如下条件:
[0058][0059]
为了各rom存储器和ram存储器的地址可以统一控制以降低资源消耗和方法复杂度,m部分滤波器系数的数量应相同。但是由于滤波器系数的总数量(n 1)通常并不能整除m,所以应保证前(m-1)部分滤波器系数的数量相同。
[0060]
上式约束了n1的取值范围,设计时n1应取满足上式的最小整数以将系统资源的消耗降至最低。
[0061]
(4)设计m个rom存储器,依次编号1,2,

,m,分别存储滤波器系数的m个部分。具体为:
[0062]
m个rom存储器的深度相同,都为n1,1号rom存储器中存储fir滤波器系数的第1部分,2号rom存储器中存储fir滤波器系数的第2部分,
……
,(m-1)号rom存储器中存储fir滤波器系数的第(m-1)部分。m号rom存储器中存储fir滤波器系数的第m部分,并在最后补(n
1-nm)个零。
[0063]
m个rom存储器的位宽相同,等于fir滤波器系数的位宽wb。
[0064]
(5)设计m个ram存储器,依次编号1,2,

,m。具体为:
[0065]
m个ram存储器的深度相同,且等于rom存储器的深度n1。m个ram存储器的位宽相同,且等于待滤波信号的位宽ws。
[0066]
(6)设计m个乘法器,依次编号1,2,

,m。具体为:
[0067]
乘法器具有2个输入端口,1端口的位宽等于fir滤波器系数的位宽wb,2端口的位宽等于待滤波信号的位宽ws。
[0068]
乘法器具有1个输出端口,位宽wm使用如下公式计算:
[0069][0070]
其中,ceil表示向上取整。b1,b2,

,bn表示fir滤波器系数的值。
[0071]
fir滤波器系数和待滤波信号都是有符号数,一次滤波运算需要完成(n 1)次乘法,并累加全部乘法结果。
[0072]
(7)在采样时钟的上升沿,将待滤波信号写入1号ram的当前地址,各个rom存储器的地址清零,开始一次滤波运算。
[0073]
(8)在每个fpga工作时钟的上升沿,从各个rom存储器中读取当前地址的数据放入对应编号的乘法器的1端口中,从各个ram存储器中读取当前地址的数据放入对应编号的乘法器的2端口中。
[0074]
(9)对全部m个乘法器的运算结果求和,并与本次滤波运算之前的各次相乘求和结果进行累加。
[0075]
(10)各个rom存储器的地址指针加一,各个ram存储器的地址指针减一。具体为:
[0076]
在一次滤波运算过程中,rom存储器的地址从零开始,在每个fpga工作时钟的上升沿加一,直至(n
1-1);
[0077]
在一次滤波运算过程中,ram存储器的地址从上一次滤波运算的结束地址开始,在每个fpga工作时钟的上升沿减一。当减小到零后,在下一个fpga工作时钟的上升沿变为(n
1-1),之后在每个fpga工作时钟的上升沿减一。
[0078]
(11)重复执行n1次步骤(8)-(10),第n1次不执行步骤(10)。
[0079]
执行完上述步骤后,ram地址指针共改变了(n
1-1)次,ram的地址指针最终指向开始地址的下一地址。ram地址指针的变化过程如图2所示。
[0080]
(12)各个ram存储器当前地址处的数据同时向后一个ram传递。具体为:
[0081]
1号ram存储器当前地址的数据赋值给2号ram存储器的当前地址,2号ram存储器当前地址的数据赋值给3号ram存储器的当前地址,
……
,(m-1)号ram存储器当前地址的数据赋值给m号ram存储器的当前地址。
[0082]
各ram存储器的数据传递同时并行执行。
[0083]
步骤(12)的执行意义是:前一个ram存储器的最后一个数据传递给后一个ram存储器,作为后一个ram存储器的最新数据。
[0084]
(13)对本次滤波运算最后一次累加结果进行截位,得到本次滤波运算结果。
[0085]
(14)重复执行步骤(7)-(13),得到各个采样点数据的滤波结果。
[0086]
实施例:
[0087]
如图3所示为某fir带通滤波器的幅频响应图,通带频率范围为100hz-5khz,双边过渡带都为20hz。由于过渡带较窄、低频截止频率较低,所以滤波器阶数较高,为9500阶。使用上述步骤实现设计的滤波器,fpga的工作时钟为100mhz,信号采样率为50khz,设计乘法器流水线为4级,则可以计算fir滤波器的分块数量m为:
[0088][0089]
所以m取5。进而可以计算各块包含的滤波器系数的数量:
[0090][0091]
所以取n1=n2=n3=n4=1901,n5=1897。
[0092]
设计5个rom存储器,深度都为1901(地址范围为0-1900),分别存储fir滤波器系数的5个部分,5号rom存储器的1897-1900地址填零。
[0093]
使用幅值1vp-p的标准正弦波作为输入,在10hz-10khz频率范围内,取若干典型频率进行扫频。对比本方法实现的滤波器的输出幅值和电子设计软件自带ip核实现的滤波器的输出幅值,如表1所示。
[0094]
表1某fir滤波器部分扫频实验数据
[0095][0096][0097]
由表1数据可以看出,本方法实现的滤波器在100hz-5khz的通带范围内平坦性更好,在阻带也实现了良好的抑制。而软件自带的ip核实现的滤波器的频响起伏较大,而且在高频段完全失效。通过比对,本发明方法能够更好的实现阶数较高的fir滤波器。
[0098]
本发明未详细说明部分属于本领域技术人员公知常识。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献