版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
如何实现一种基于FPGA的横向FIR滤波器设计?横向FIR滤波器的设计设经过AD采集得到的输入序列为x(n),其通过单位冲激响应为h(n)的因果FIR滤波器后,输出y(n)在时域可表示为线性卷积和的形式:其中N-1为FIR滤波器阶数(也称抽头数),可以明显的看出h(n)是长度为抽头数加一的有限长序列,不失一般性的设抽头数为3的FIR单位冲激响应h(n)为,依卷积和画出信号流程图如下,我们必须明确这里的自变量n表示的并非是连续时间,而是第N次AD采样。首先根据流程图所示,我们需要设计一个关于x(n)的移位电路,其RTL视图如下,如图所示的x(n)的移位功能在Verilog中可以通过如下代码实现,注意clk是与数据同步的AD的采样率时钟(AD当前数据建立后,采用一个脉冲标志可实现)。
inputclk;inputsigned[8:0]x_in;outputregsigned[8:0]xn;outputregsigned[8:0]xn_1;outputregsigned[8:0]xn_2;outputregsigned[8:0]xn_3;always@(posedgeclk)beginxn<=x_in;//x(n)xn_1<=xn;//x(n-1)xn_2<=xn_1;//x(n-2)xn_3<=xn_2;//x(n-3)end
其次,为了设计方便,需要将浮点数转换为定点运算,注意,N位的数据完成N*N乘法后,其结果的长度为2N位,为了配合乘法运算,我们需要采用18位补码表示有符号数据(MSB为符号位),并对浮点数进行8位的量化处理(乘以256转换为定点数运算,运算结果除以256可得到相应的浮点数),那么上述的系统的冲激响应h(n)可表示为(这里不可避免的引入了量化误差),对应的18位补码有符号十进制数为,电路RTL视图如下,如图所示的x(n)移位后对应的乘法功能在Verilog中可以通过如下代码实现。
inputclk;inputsigned[8:0]x_in;outputsigned[17:0]mult0;outputsigned[17:0]mult1;outputsigned[17:0]mult2;outputsigned[17:0]mult3;regsigned[8:0]xn;regsigned[8:0]xn_1;regsigned[8:0]xn_2;regsigned[8:0]xn_3;always@(posedgeclk)beginxn<=x_in;//x(n)xn_1<=xn;//x(n-1)xn_2<=xn_1;//x(n-2)xn_3<=xn_2;//x(n-3)endassignmult0=xn*18'd162;//x(n)*h(0)assignmult1=xn_1*18'd134;//x(n-1)*h(1)assignmult2=xn_2*18'd218;//x(n-2)*h(2)assignmult3=xn_3*18'd262062;//x(n-3)*h(3)
最后,采用一级加法电路完成整个求卷积和的过程,需要注意的是,有符号的加法操作,需要对符合位进行保护,完成加法后数据的长度应设为2*N+log2(Tap+1)-1(其中Tap表示抽头数),则本文需要的加法寄存器的长度为为19位(2*9+log(4)-1),并且取其高11位作为y(n)输出(该操作等于除以256)其电路RTL视图如下,该结构的总体Verilog代码如下。
modulefir(inputclk,inputsigned[8:0]x_in,outputsigned[10:0]y_out);regsigned[8:0]xn;regsigned[8:0]xn_1;regsigned[8:0]xn_2;regsigned[8:0]xn_3;wiresigned[17:0]mult0;wiresigned[17:0]mult1;wiresigned[17:0]mult2;wiresigned[17:0]mult3;wiresigned[18:0]adder0;always@(posedgeclk)beginxn<=x_in;//x(n)xn_1<=xn;//x(n-1)xn_2<=xn_1;//x(n-2)xn_3<=xn_2;//x(n-3)endassignmult0=xn*18'd162;//x(n)*h(0)assignmult1=xn_1*18'd134;//x(n-1)*h(1)assignmult2=xn_2*18'd218;//x(n-2)*h(2)assignmult3=xn_3*18'd262062;//x(n-3)*h(3)assignadder0=mult0+mult1+mult2+mult3;//adder0(n)=x(n)*h(0)+x(n-1)*h(1)+x(n-2)*h(2)+x(n-3)*h(3)assigny_out=adder0[18:8];//y(n)=adder0(n)/256endmodule
基于ModelSim求系统冲激响应与矩形脉冲响应列写testbench如下,
`timescale1ns/1ns`definead_clk20modulefir_tb;regclk;regsigned[8:0]x_in;wiresigned[10:0]y_out;firfir(.clk(clk),.x_in(x_in),.y_out(y_out));initialclk=1;always#(`ad_clk/2)clk=~clk;initialbeginx_in=9'd0;#(`ad_clk*20);#3;x_in=9'd100;#(`ad_clk);x_in=9'd0;#(`ad_clk*20);x_in=9'd100;#(`ad_clk);x_in=9'd100;#(`ad_clk);x_in=9'd100;#(`ad_clk);x_in=9'd100;#(`ad_clk);x_in=9'd100;#(`ad_clk);x_in=9'd0;#(`ad_clk*20);$stop;endendmodule
仿真求得对应的响应为显然,当输入为x(n)=100δ(n)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 范本新学期学习计划范文集锦5篇
- 专业技术工作总结范文
- 个人年度述职报告范文
- DB12T 545-2014 南水北调工程现场项目管理规范
- 中级财务实训工作心得
- 个人试用期转正述职报告
- 探究实验遵循的一般原则
- 防伪油墨 第2部分:磁性防伪油墨 征求意见稿
- 戒子规课件教学课件
- 义乌市七校七年级上学期语文11月期中联考试卷
- 2024年福建省托育服务职业技能竞赛理论考试题库(含答案)
- 【教育部标准】中等职业学校老年人服务与管理专业教学标准
- 保温装饰一体板施工技术交底
- 合同法及司法解释解读
- 电源车操作手册操作手册
- 案例思念休闲吧
- 增值税预缴税款表电子版
- 中俄文运输合同
- 大班蒙氏数学:多边形
- 全国医疗服务价格项目规范(2012版)
- 家长会空白签到表
评论
0/150
提交评论