基于分布式算法的FIR滤波器设计

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

目录
1绪论 (3)
1.1概述 (3)
1.2课题的研究目的和意义 (3)
1.3国内外的研究现状 (4)
2 FIR数字滤波器的设计 (6)
2.1数字滤波器概述 (6)
2.2传统的乘累加结构FIR数字滤波器基本理论 (7)
2.3乘累加运算的分布式算法原理分析 (13)
2.4 FPGA实现过程中查找表的构造方法 (14)
2.5采用分布式算法实现FIR数字滤波器 (15)
3具体实现过程和仿真波形 (18)
4总结 (24)
5参考文献 (25)
基于分布式算法的FIR滤波器设计
摘要:在利用FPGA实现数字信号处理方面,分布式算法发挥着关键作用,与传统的乘积-积结构相比,具有并行处理的高效性特点。

详细研究了基于FPGA、采用分布式算法实现FIR数字滤波器的原理和方法,并通过max-plus2进行了仿真。

关键词:分布式算法 DALUT FPGA FIR
1绪论
1.1概述
随着数字技术日益广泛的应用,以现场可编程门阵列FPGA为代表的ASIC专用集成电路器件得到了迅速普及和发展,器件集成度和速度都在高速增长。

FPGA既具有门阵列的高逻辑密度和高可靠性,又具有可编程逻辑器件的可编程特性,可以减少系统设计和维护的风险,降低产品成本,缩短设计周期。

分布式算法是一种以实现乘加运算为目的的运算方法,它与传统算法实现乘加运算的不同在于执行部分积运算的先后顺序不同。

简单地说,分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先进行相加形成相应部分积,然后再对各部分积进行累加形成最终结果,而传统算法是等到所有乘积产生之后再进行相加来完成乘加运算的。

与传统算法相比,分布式算法可极大地减少硬件电路规模,很容易实现流水线处理,提高电路的执行速度。

1.2 课题的研究目的和意义
在数字信号处理中,FIR数字滤波器是最常用的单元之一。

它用于将输入信号x[n]的频率特性进行特定的修改,转换成另外的输出序列y[n]。

传统的FIR数字滤波器多采用诸如TMS320CXX系列的专用DSP芯片,根据输入采样的移位相乘累加编写软件,利用软硬件的相互结合完成滤波器的设计。

但DSP芯片是基于哈佛体系结构的,它的顺
序处理方式限制了数据的处理速度和吞吐量。

由于在性能、成本、灵活性和功耗等方面的优势,基于FPGA的数字信号处理器已广泛应用于图像、视频和无线通信领域。

采用分布式算法的FPGA 滤波器采用纯硬件的方式实现FIR滤波,其突出的优点是:运算速度不再和滤波器的阶数正相关,而是与采样数据的宽度相关,特别适合于高阶高速FIR滤波器的设计。

1.3 国内外的研究现状
嵌入式系统是一个面向应用、技术密集、资金密集、高度分散、不可垄断的产业,随着各个领域应用需求的多样化,嵌入式设计技术和芯片技术也经历着一次又一次的革新。

虽然ASIC的成本很低,但设计周期长、投入费用高、风险较大,而可编程逻辑器件(Programmable Logical Device)设计灵活、功能强大,尤其是高密度现场可编程逻辑器件(Field Programmable Gate Array)其设计性能已完全能够与ASIC媲美,而且由于FPGA的逐步普及,其性能价格比已足以与ASIC抗衡。

因此,FPGA在嵌入式系统设计领域已占据着越来越重要的地位。

作为嵌入式系统的基础元件之一,FPGA的面貌正日新月异:逻辑单元不断增加、单位成本和功耗不断降低,而根本的设计灵活性和快速转换能力却始终未变。

在变与不变的共同推动下,FPGA的价值发生了变化,它已从纯粹的建模工具发展成为适合中小批量生产的应用器件,而其应用也从早期的嵌入式通信系统扩展到了低成本的消费电
子。

FPGA之所以越来越多地在嵌入式系统中得到应用,主要得益于它在低成本和低功耗两方面均取得了很好的进步,从而能够满足OEM 日益紧迫的上市周期、不断缩减的成本结构和低功耗要求。

“内外两个因素正驱动着这种以价值为基础的FPGA市场的高速发展。

”Act公司中国区经理夏明威如是说,“内因是FPGA单位成本的急速下降。

凭借半导体工艺技术的不断进步和制造效率的提高,FPGA已在很多对成本高度敏感的市场上与ASIC平分秋色。


市场分析师对可编程逻辑器件市场的预测也验证了这一趋势。

首先据市场调研公司Gartner Dataquest预测,2003到2008年,整体可编程逻辑市场的复合年均增长率达38%;其次,他们预测这一增长是由汽车和消费电子应用驱动的。

他们还认为,FPGA在消费电子中的应用将于2008年超过10亿美元,即接近其2002年营收水平的10倍。

增长的推动力主要来自全球数字和高解晰度广播电视传输标准、游戏和多媒体娱乐系统、LCD和等离子显示技术、以及家用DVR和DVD-W技术应用的不断上升;在汽车领域,FPGA将越来越多用于驾驶室内娱乐系统和GPS导航系统、信息、通信和安全系统。

以FPGA为核心的PLD产品是近几年集成电路中发展得最快的产品。

随着FPGA 性能的高速发展和设计人员自身能力的提高,FPGA将进一步扩大可编程芯片的领地,将复杂专用芯片挤向高端和超复杂应用。

目前FPGA的发展趋势主要体现在以下几个方面:
1、向更高密度、更大容量的千万门系统级方向迈进;
2、向低成本、低电压、微功耗、微封装和绿色化发展;
3、 IP资源复用理念将得到普遍认同并成为主要设计方式;
4、 MCU、DSP、MPU等嵌入式处理器IP将成为FPGA应用的核心;
5、随着处理器以IP的形式嵌入到FPGA中,ASIC和FPGA之间的界限将越来越模糊,未来的某些电路版上可能只有这两部分电路:
6、模拟部分(包括电源和一块FPGA芯片,最多还有一些大容量的存储器)。

2 FIR数字滤波器的设计
2.1数字滤波器概述
数字滤波器(digital filter)是由数字乘法器、加法器和延时单元组成的一种装置。

其功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。

由于电子计算机技术和大规模集成电路的发展,数字滤波器已可用计算机软件实现,也可用大规模集成数字硬件实时实现。

数字滤波器是一个离散时间系统(按预定的算法,将输入离散时间信号转换为所要求的输出离散时间信号的特定功能装置)。

应用数字滤波器处理模拟信号时,首先须对输入模拟信号进行限带、抽样和模数转换。

数字滤波器输入信号的抽样率应大于被处理信号带宽的两倍,其频率响应具有以抽样频率为间隔的周期重复特性,且以折叠频
率即1/2抽样频率点呈镜像对称。

为得到模拟信号,数字滤波器处理的输出数字信号须经数模转换、平滑。

数字滤波器具有高精度、高可靠性、可程控改变特性或复用、便于集成等优点。

数字滤波器在语言信号处理、图像信号处理、医学生物信号处理以及其他应用领域都得到了广泛应用。

数字滤波器有低通、高通、带通、带阻和全通等类型。

它可以是时不变的或时变的、因果的或非因果的、线性的或非线性的。

应用最广的是线性、时不变数字滤波器.
2.2 传统的乘累加结构FIR数字滤波器基本理论
2.2.1FIR滤波器基本原理
FIR滤波器被称为有限长脉冲响应滤波器,与IIR数字滤波器相对应,它的单位脉冲响应h(n)只有有限个数据点。

输入信号经过线性时不变系系统输出的过程是一个输入信号与单位脉冲响应进行线性卷积的过程,即:
式中,x(n)是输入信号,y(n)是卷积输出,h(n)是系统的单位脉冲响应。

可以看出,每次采样y(n)需要进行L次乘法和L-1次加法操作实现乘累加之和,其中L是滤波器单位脉冲响应h(n)的长度。

可以发现,当L很大时,每计算一个点,则需要很长的延迟时间。

2.2.2乘累加运算的位宽分配
DSP算法最主要的就是进行乘累加运算。

假设采样信号的位宽用N来表示,则N位与N位的乘累结果需要2N位的寄存器来保存;如果两个操作数都是有符号数,则乘积只有2N-1个有效位,因为产生了两个符号位。

为了使累加器的结果不产生溢出(计算结果超出了范围,产生了一个进位),需要对累加器进行冗余设计,也就是说要在累加器2N的位宽上多设计出K位,累加器的长度M计算方式如下(L为滤波器的长度):对于无符号数:M=2N+K=2N+log2 L
对于有符号数:M=2N+K=2N+log2 L-1
2.2.3 FIR数字滤波器设计方法
FIR滤波器设计方法:
(1)窗函数法
(2)频率采样法
(3)切比雪夫逼近法
1. 窗函数法的设计步骤与要点

()()
[]n
h
FT
e
H
d
j
d
=
ω
为希望逼近的频响特性函数,
()()
[]n h
FT
e
H j
d
=
ω
为用窗函数法设计的实际滤波器的频响函数。

通常取
()ωj e H相应的理
想频响特性作为
()ωj
d
e
H。

(1)希望逼近的理想滤波器频响函数
()ωj
d
e
H的表达式。

因为FIR数
字滤波器一般要求设计成线性相位特性,所以
()ωj
d
e
H必须满足上述线
性相位FIR滤波器的频域特点。

逼近理想低通、带通、高通和带阻滤波器频响函数的表达式如下:
()⎪⎩⎪⎨⎧≤<≤≤=-πωωωωωαω
c c j j dLp e e H ,00, ()⎪⎩⎪⎨⎧≤<≤<≤≤=-π
ωωωωωωωωαωch cl ch cl j j dBp e e H ,0,0, ()⎪⎩⎪⎨⎧≤<≤≤=-c c j j dHp e e H ωωπωωωαω
0,0, ()⎪⎩⎪⎨⎧≤<≤≤≤≤=-ch
cl ch cl j j dBs e e H ωωωπωωωωωαω,0,0, 其中,c ω为理想滤波器截止频率,cl ω和ch ω分别为理想带通滤波器的通带下截止频率和上截止频率。

()21-=N α(N 为()n h 长度),这样才能确保线性相位的时域条件()()n N h n h --=1,且()n h 为实序列。

(2)熟悉各种常用窗函数的技术指标和加窗后对滤波器特性的影响,根据设计指标正确选择窗函数类型及其长度N 。

表7.1列出了六种典型窗函数的基本技术指标参数。

这六种窗函数均满足A 类线性相位条件:()()n N n --=1ωω。

设计过程中根据阻带最小衰减选择窗函数类型,再根据过渡带宽度指标选择窗函数长度N 值。

(3)检验设计结果
(4)熟悉窗函数设计法的特点:设计过程简单、方便实用。

但边界频率不易精确控制所以设计完以后,必须检验结果。

2. 用频率采样法设计FIR 数字滤波器的设计步骤与要点
1)频率采样设计法的概念及理论依据
设计FIR 数字滤波器就是寻求一种满足设计要求的滤波器单位脉冲响应()n h 或系统函数()z H 。

根据频率采样理论,如果()n h 长度为M ,()()[]n h ZT z H =,在单位圆上等间隔对()z H 采样N 点得到
()()
,2k N j e z z H k H π== 1,,1,0-=N k (7.3)
只要M N ≥,则有
()()[]k H IDFT n h =, 1,,1,0-=N n (7.4)
()()∑-=-----=1
0111N k k N N
z W k H N z z H (7.5) 由此可见,只要知道FIR 数字滤波器频响函数在[]π2,0上的N 点等间隔采样()k H ,就可确定滤波器的单位脉冲响应()n h 或系统函数()z H ,这就是频率采样设计法的理论依据。

频率采样法就是根据以上频域采样理论,由滤波特性指标构造希望逼近的滤波器频响函数()ωj d e H ,对其在[]π2,0上采样得到
()()k N j d d e H k H πωω
2==, 1,,1,0-=N k (7.6)
然后,求得单位脉冲响应()n h ,或求得系统函数()z H 。

这样,
()n h 或()z H 就是FIR 数字滤波器的设计结果。

2)用频率采样法设计FIR 滤波器的设计步骤与要点
(1)一般以实际设计的频响函数()
ωj e H 相应的理想频响特性作为希望逼近的()ωj d e H ,这样可使设计简化。

(2)设计线性相位FIR 对
()ωj d e H 和()k H d 的约束条件。

如果()k j k d e H k H θ=,k H 为幅度采样,k θ表示相位采样,即
⎪⎭⎫ ⎝⎛=k N H H d k π2,⎪⎭⎫ ⎝⎛=k N k πθθ2,k θ的表达式及对k H 的约束条件:
,1k N N k πθ--
= 1,,1,0-=N k
N 为奇数时, k N k H H -=
N 为偶数时,
k N k H H --=
由上述可见,设计线性相位FIR 滤波器时,相位采样k θ为一确定函数式,当N 为奇数时,幅度采样k H 关于2N k =点偶对称,当N 为偶数时,k H 关于2N k =点奇对称。

应当注意,设计高通和带阻滤波器时,N 只能取奇数。

(3)逼近误差及其改进措施,N 值的估计。

①逼近误差分析:由频域采样理论可知
()()[]()()∑∞-∞=⋅+=
=m N d d n R mN n h k H IDFT n h
即所设计的FIR 滤波器的单位脉冲响应()n h 是希望逼近的滤波器单位脉冲响应的周期延拓序列的主值序列。

如果()ωj d e H 为理想频响特性,则由于频域有间断点,使()n h d 为衰减较慢的无限长序列。

这时其周期延拓时,有较严重的时域混叠,所以,()n h 和()n h d 相差较大,故
()()[]n h FT e H j =ω和()()[]n h FT e H d
j d =ω相差较大,即逼近误差较大。

而且,由于()n h 为有限N 长序列,所以
()ωj e H 为连续无间断点函数,故在()ωj d e H 的间断点附近逼近误差最大,并形成倾斜过渡带和振荡,使阻
带最小衰减不到20dB 。

在平滑区域逼近误差将较小。

②改进措施:在()ωj d e H 的间断点附近区间假如若干个过渡带采样
点,这样就相当于使()ωj d e H 的间断点变平滑后再采样。

即使()n h d
变得衰减很快,从而周期延拓时混叠失真减小,即()n h 和()n h d 误差减小,必然使频域()ωj e H 和()ωj d e H 误差减小。

③频域采样点数N 估算:一般由过渡带宽度ω∆估算N 值。

()N m π
ω21+≈∆,m 为过渡采样点数目。

所以,N 的估算公式为
()12+∆=m N ωπ
显然,ω∆越小,或m 越大都使N 值越大。

3)频率采样法的特点及设计结果检验
这种设计方法的特点是:可以在频域直接涉及任意频响特性的FIR 数字滤波器,概念清楚、直观。

但边界频率不易控制。

所以,设计时,要对()ωj e H 进行检验,可通过加大采样点数N 来改善边界频率精度,但这会增加滤波器的成本和计算量。

对于窄带滤波器,即使N 很大,通带内非零采样()k H d 也较少,这样,其()z H 的内插公式(7.5)中有效项较少,从而使实现频率采样结构并联支路较少,使滤波器成本降低,运算量减少。

因此,该设计法适合设计窄带滤波器。

3. FIR 滤波器的等波纹逼近设计法
等波纹逼近设计法使用切比雪夫最佳一致逼近理论,可设计出实
际滤波器频响()ωj e H与期望的频响()ωj d e
H之间的最大误差最小化的最
佳拟合滤波器。

这种方法设计的滤波器呈现等波纹频响特性,所以称之为等波纹逼近设计法。

由于误差均匀分布于整个频带,对固定的阶数N,可以得到最优良的滤波特性;通带最平坦,阻带最小衰减达到最大。

因此,等波纹逼近法在FIR滤波器设计中得到广泛应用,特别是有现成的设计程序,从而使设计简单易行。

所以,在建立上述概念的基础上,正确调用设计程序,设置合适的参数即可得到等波纹逼近FIR滤波器系数()n h。

2.3乘累加运算的分布式算法原理分析
得益于Xilinx FPGA查找表结构的潜能,分布式算法在滤波器设计方面显示出了很高的效率,自20世纪90年代初以来越来越受到人们的重要。

分布式算法是基于查找表的一种计算方法,在利用FPGA实现数字信号处理方面发挥着重要的作用,可以大大提高信号的处理效率。

它主要应用于数字滤波、频率转换等数字信号处理的乘累加运算。

分布式算法推导如下:
设Ak是已知常数(如滤波器系数、FFT中的正弦/余弦基本函数等),xk(n)是变量,可以看作是n时刻的第k个采样输入数据,y(n)代表n时刻的系统响应。

那么它们的内积为:
其中,xk(n)变量可以写成下面的格式:
式中,B为数据格式的字长,xkb是变量的二进制位,只有“0”和“1”两种状态。

将(2)式代入(1)式得:
2.4 FPGA实现过程中查找表的构造方法
根据以上论述,括号中的每一乘积项代表着输入变量的某一位与常量的二进制“与”操作,加号代表着算术和操作,指数因子对括号中的值加权。

如果事先构造一个查找表,该表存储着括号中所有可能的组合值,就可以通过所有输入变量相对应位的组合向量(XNb,X(N-1) b,...x1b)对该表进行寻址,该查找表称为DALUT。

DALUT的构造规则如表1所示。

2.5 采用分布式算法实现FIR数字滤波器
为了说明问题,以一个三个系数的FIR数字滤波器为例设计分布式算法,字宽也设置为三位。

设FIR数字滤波器系数为:h(0)=5,h(1)=2, h(2)=3。

相对的ADLUT表如表2所示:
在进行FPGA设计时,该表以组件Component形式构建,设置为ROM 结构,提供输入寻址端口table_in[2..0],输出端口table_out[3..
0]。

FPGA算法的结构图如图2所示。

算法实现中的几个关键问题为:
(1)采用状态机实现分布式算法的状态转移
状态机的实现如图3所示,设置三个状态s0、s1、s2 。

状态s0完成数据的装入,数据寄存器需要成对出现,一个完成数据的延迟,另一个完成数据的移位,并将状态转移到s1;状态s1完成查找表功能、数据移位和分布式算法的乘累加运算,数据移位一个数据宽带后将状态转移到s2;状态s2完成数据的输出,并将状态转移到s0。

利用状态机可以条理清楚地简化计算过程,在算法实现时发挥着关键的作用。

(2)系统时钟与数据输入时钟的关系
根据上述的状态转移关系,可以得出:每输入一个数据,在下一次数据输入之前,需要在状态s1停留一个数据宽带(三位)的时钟时间,在s2停留一个时钟的数据输出时间。

也就是说,系统时钟频率应是数据输入频率的5倍,即fclkock=5fxin 。

(3)分布式算法中的乘累加式公推导及核心代表实现
设B 是数据的字宽,Pn 是分布式算法第n 位的结果,则有:
有了该关系式,就可以通过for...loop 循环,使用一条语句完成分布式乘累加算法。

具体如下:
for n in 0 to B-1 loop
P:=p/2+tableout(n)*2B-1;
End loop;
FIR 中,h(k)系数为N 个,
∑-=-=10)()()(N k k n x k h n y ,求y(n) 需要前面的
N 个x 数据。

)1(*)1(....)2(*)2()1(*)1()(*)0()(+--++-+-+=N n x N h n x h n x h n x h n y (for example y(0)=h(0)*x(-1)+ h(1)*x(-2) + h(2)*x(-3) N=3) 00110...12*...2*2*)(x x x x x x n x M M M M M M +++==--- x 有M 位
(for example x(-1) = 1100 = 1*2^3+1*2^2+0*2+0)
)1(*)1(....)2(*)2()1(*)1()(*)0()(+--++-+-+=N n x N h n x h n x h n x h n y
+++++=--)2*)(...2*)(2*)((*)0(0011n x n x n x h M M M M
+
-++-++---)2*)1(...2*)1(2*)1((*)1( 0011n x n x n x h M M M M ……….+
++-+++-+++----)2*)1(...2*)1(2*)1((*)1( 0011N n x N n x N n x N h M M M M =
++--++-+M M M M N n x N h n x h n x h 2* )]1(*)1(...)1(*)1()(*)0([
++--++-+----11112* )]1(*)1(...)1(*)1()(*)0([M M M M N n x N h n x h n x h
………..+00002* )]1(*)1(...)1(*)1()(*)0([+--++-+N n x N h n x h n x h
只要h 的值确定了,把输入数据x 的各个位提取出来,做一个LUT ,储存h(0)+…+h(N-1)的不同值,需要2^N 个register 。

DA 大大简化了运算。

3 具体实现过程和仿真波形
程序1
该程序实现主要实现输入4位数查表得到其与固定系数的乘积,其中en_lut 为查找表程序的使能信号,只有当该信号为高电平时才能在时钟触发沿上查表,而lut_low 信号为查表地址控制信号,当它为一时选择输入数的第1到3位输入LUT 模块,为0时选择输入数的第4到7位输入LUT 模块。

输出信号sign 是将输入数的正负输出到下一级,注意这个模块的输入数in 为9位二进制原码。

module XIANGZILUT(out,sign,clk,rst_n,in,lut_low,en_lut);
input [8:0] in;
input rst_n,lut_low,en_lut,clk;
output [10:0] out;
output sign;
reg [10:0] out;
reg sign;
always@(posedge clk)
begin
if(!rst_n)
out<=11'b0;
else
if(en_lut)
begin
case(lut_low?in[3:0]:in[7:4])
4'b0000: out<=11'd0;
4'b0001: out<=11'd21;
4'b0010: out<=11'd42;
4'b0011: out<=11'd63;
4'b0100: out<=11'd84;
4'b0101: out<=11'd105;
4'b0110: out<=11'd126;
4'b0111: out<=11'd147;
4'b1000: out<=11'd168;
4'b1001: out<=11'd189;
4'b1010: out<=11'd210;
4'b1011: out<=11'd231;
4'b1100: out<=11'd252;
4'b1101: out<=11'd273;
4'b1110: out<=11'd294;
4'b1111: out<=11'd315;
default: out<=11'd0;
endcase
sign<=in[8];
end
else
out<=11'd0;
end
endmodule
程序2
该程序是实现控制功能。

这个模块有许多的输出信号,它们分别是其它三个状态时的信号,分别来控制模块是否工作。

模块的输入只有时钟信号和复位信号rst,只有在复位信号有效时状态跳到初始信号,其实都在时钟的触发沿时进行状态依次跳变。

module
state(en_sum,en_proadd,In_able,en_lut,lut_low,low,en_acc,en _input_lut,clk,rst);
input rst,clk;
output
en_sum,en_proadd,In_able,en_lut,lut_low,low,en_acc,en_input _lut;
reg
en_sum,in_able,en_proadd,en_lut,In_able,lut_low,low,en_acc, en_input_lut;
reg [1:0] state;
parameter
IDLE=2'b00,INPUT_ACC=2'b01,SHIFT_LOW=2'b10,PROADD_HIGH=2'b1 1;
always@(negedge clk)
if(!rst)
begin
state<=IDLE;In_able<=0;en_lut<=0;
lut_low<=0;low<=0;en_acc<=0;
en_proadd<=0;en_sum<=0;
end
else
begin
case(state)
IDLE:
begin
state<=INPUT_ACC;
end
INPUT_ACC:
begin
state<=SHIFT_LOW;
In_able<=1;en_input_lut<=0;en_lut<=1;
lut_low<=1;en_acc<=0;en_sum<=1;
end
SHIFT_LOW:
begin
state<=PROADD_HIGH;In_able<=0;en_proadd<=1;
lut_low<=0;en_acc<=1;low<=1;en_sum<=0;
end
PROADD_HIGH:
begin
state<=INPUT_ACC;en_proadd<=0;
en_input_lut<=1;en_lut<=0;en_sum<=0;
end
default:state<=IDLE;
endcase
end
endmodule
程序3
该程序实现将查找表所得的部分积进行相加。

程序在中间求和时就对部分积缩小,对它的低9位舍掉,只对高10位以上求和,这样可以达到求速度且节省资源的目的。

不足之处是右移9位取整后导致最终结果存在一定的误差。

输出的信号位数减少主要在中间求和时对部分积缩小了512倍。

module
yuADD(out1,out2,out4,out21,out49,out80,out100,clk,rst,en_ad d,in1
,in2,in3,in4,in5,in6,in7,in8,in9,in10,in11,in12,in13,in14);
input [7:0] in1,in2,in3,in4,in5,in6,in7,in8,in9,in10,in11,in12,in13,in1 4;
input rst,clk,en_add;
output [8:0] out1,out2,out4,out21,out49,out80,out100;
wire [8:0] out1,out2,out4,out21,out49,out80,out100;
add add1(out1,clk,rst,en_add,in1,in14);
add add2(out2,clk,rst,en_add,in2,in13);
add add4(out4,clk,rst,en_add,in3,in12);
add add21(out21,clk,rst,en_add,in4,in11);
add add49(out49,clk,rst,en_add,in5,in10);
add add80(out80,clk,rst,en_add,in6,in9);
add add100(out100,clk,rst,en_add,in7,in8);
endmodule
module add(out,clk,rst,en_add,ina,inb);
input [7:0] ina,inb;
input rst,clk,en_add;
output [8:0] out;
reg [8:0]out;
always@(posedge clk)
if(!rst)
out<=9'b0;
else if(en_add)
out<={ina[7],ina}+{inb[7],inb}; endmodule
module aec(sum,rst,clk,low,en_acc,sign,in);
input [10:0] in;
input rst,clk,low,en_acc,sign;
output [7:0] sum;
reg [7:0] sum;
always@(posedge clk)
begin
if(!rst)
sum<=0;
else if(en_acc)
begin
if(low)
begin
sum[1:0]<=in[10:9];
sum[6:2]<=5'b0;
sum[7]<=sign;
end
else
begin
sum[6:0]<=sum[6:0]+in[10:5];
sum[7]<=sign;
end
end
else sum<=8'bz;
end
endmodule
4 总结
在实际应用中,为了减少逻辑资源的占有量和提高系统的运行速度,对FIR滤波器需要进行优化处理。

本文所采用的是在FPGA实现中利用特有的查找表进行优化,是基于FPGA的高速FIR数字滤波器设计提出的一种通过快速实现卷积来实现滤波器数据处理的方法。

该数字滤波器为16位低通滤波器,截止频率为IM,采样频率为IOM,输入输出数据为8位二进制数,通带波纹小于1dB,阻带最小衰减为-40dB,该滤波器时钟频率达150MHZ以上,可以快速实现实时的滤波处理。

当输入数据为7,3,1...时,仿真输出依次为35,29,32,16...,与乘累加方式FIR滤波算法得出的结果完全一致。

假设查找表和PDSP的通用乘法器延时时间相同,分布式算法的等待时间是Br,通用乘法器的等待时间是N1。

可见,对于位宽较小的数据来说,分布式算法的
执行速度远高于乘累加运算。

可见,利用FPGA实现分布式计算大大提高了计算的速度,在高速信号处理中发挥着重要作用。

5参考文献
1. 程佩清编. 数字信号处理教程(第二版). 北京:清华大学出版社,1999
2. Uwe Meyer-Baese著. 数字信号处理的FPGA实现. 刘凌,胡永生译. 北京:清华大学出版社,2003
3. 任爱锋等编著. 基于FPGA的嵌入式系统设计. 西安:西安电子科技大学出版社,2004
4. 刘伟,孟宪元.用%;=> 实现小型声纳的片上系统集成.电子技术应用,2000
5. 卢毅.VHDL与数字电路设计.北京:科学出版社,2002
6. 褚振勇.FPGA与应用. 西安: 西安电子科技大学出版社.2002
7. 程佩青.数字信号处理教程.北京: 清华大学出版社,2000。

相关文档
最新文档