基于fpga的fir滤波器的程序设计(8阶)(编辑修改稿)内容摘要:
21 所示: 图 21 FIR 滤波器直接型网络结构 从 DSP 的介绍中,第一类线性相位对 h(n)的约束条件: jgnjNnj eHenheH )()()(10 ( 3) )s i n) ( c o s()s i n) ( c o s(10 jHnjnnhNn g (4) 由公 式( 3),( 4)我们可以推出: 10 10 c o ss in)(s inc o s)(Nn Nn nnhnnh ( 5) 移相并利用三角公式化简得到: 10 0)](s in [)(Nn nnh (6) 从数字信号处理学科中知道函数 )(sin)( nnh 关于求和区间的中心( N1) /2 奇对称,于是我们要求 和 h(n)满足如下条件: )1()( )( nNhnh 其中对应的有1021NnN ( 7) 图 22 线性相位 FIR 滤波器结构 基于 FPGA 的 FIR 滤波器的程序设计 7 若 h(n)呈现对称特性,即此具有线性相位的滤波器是 FIR 数字滤波器。 滤波器的基础网络结构可以相互进行转换。 在前面本文已经讨论过, FPGA的实现中将对各种方法进行比较,找出最优设计方式。 从而达到减少资源占有和提高系统作业速度的目的,更好的体现实时性的数字滤波器优势。 数字滤波器的设计原理 在数字信号处理技术的研究中,一般是使用的三种设计方法:窗函数法,FDATool 直接设计法,程序编译法。 本文首先使用窗函数和 Matlab 软件共同进行设计。 随着软件技术的不断发 展, Matlab 软件能给设计者带来的数字信号处理工作已经非常的完善和多样了,设计者可以利用 Matlab 软件进行数字滤波器的设计和仿真,而且还可以用这款软件进行设计的优化。 数字滤波器的一般设计步骤如下: 做任何工程或者设计,设计者都必须要有一个期望的指标用来限制设计范围。 在很多的实际应用中,设计者常常都是使用数字滤波器做选频的工作。 因此,指标的形式一半在频域中给出相位响应和幅度。 相位响应的指标形式,一半是指系统在通频带中药有线性相位。 幅度指标:绝对指标,它给出对幅度响应函数的要求,一般用于 FIR 滤波器的设计。 相对指标,以分贝值的形式给出具体限制。 设计者做高频的时候大概都有一个模式,就是首先得到技术指标,然后利用我们的技术和工具让我们的产品去逼近这个指标。 同理我们首先建立以个目标的数字滤波器模型。 一般情况下都是采用理想的数字滤波器模型,然后去逼近我们想要的目标数字滤波器参数。 在工作中我们发现通过( 1)、( 2)之后本文会得到以差分、系统函数或者冲击响应这三种方式描述的滤波器。 这个时候设计者可以利用计算进行仿真,在系统中分析技术指标和滤波结果是否是希望得 到的结果。 基于 FPGA 的 FIR 滤波器的程序设计 8 图 23 各种理想数字滤波器的幅度频率响应 Matlab 直接 FDAtool 设计方式解析 FDATool(Filter Design amp。 Analysis Tool)是 MATLAB 信号处理工具箱里专用的滤波器设计分析工具, 以上的版本还专门增加了滤波器设计工具箱 (Filter Design Toolbox)。 FDATool 可以设计几乎所有的基本的常规滤波器,包括 FIR 和 IIR 的各种设计方法。 它操作简单,方便灵活。 FDATool 界面总共分两大部分,一部分是 Design Filter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。 Design Filter 部分主要分为: Filter Type(滤波器类型 )选项,包括 Lowpass(低通 )、 Highpass(高通 )、Bandpass(带通 )、 Bandstop(带阻 )和特殊的 FIR 滤波器。 Design Method(设计方法 )选项,包括 IIR 滤波器的 Butterworth(巴特沃思 )法、Chebyshev Type I(切比雪夫 I 型 )法、 Chebyshev Type II(切比雪夫 II 型 ) 法、Elliptic(椭圆滤波器 )法和 FIR滤波器的 Equiripple 法、 LeastSquares(最小乘方 )法、Window(窗函数 )法。 Filter Order(滤波器阶数 )选项,定义滤波器的阶数,包括 Specify Order(指定阶数 )和 Minimum Order(最小阶数 )。 在 Specify Order 中填入所要设计的滤波器的阶数 (N 阶滤波器, Specify Order= N1),如果选择 Minimum Order 则 MATLAB根据所选择的滤波器类型自动使用最小阶数。 Frenquency Specifications 选项,可以详细定义频带的各参数,包括采样频率Fs 和频带的截止频率。 它的具体选项由 Filter Type 选项和 Design Method 选项决定,例如 Bandpass(带通 )滤波器需要定义 Fstop1(下阻带截止频率 )、 Fpass1(通带基于 FPGA 的 FIR 滤波器的程序设计 9 下限截止频率 )、 Fpass2(通带上限截 止频率 )、 Fstop2(上阻带截止频率 ),而Lowpass(低通 )滤波器只需要定义 Fstop Fpass1。 采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。 FDAtool 设计模板及设计结果图 FIR 8 阶低通滤波器总体设计参数 图 25 FIR 8阶低通滤波器总体设计参数 滤波器幅频响应 图 251 滤波器 幅频响应 基于 FPGA 的 FIR 滤波器的程序设计 10 滤波器相频响应 图 252 滤波器相 频响应 滤波器的幅频和相频响应 图 253滤波器的幅频和相 频响应 冲击响应 图 254冲击响应 基于 FPGA 的 FIR 滤波器的程序设计 11 阶跃响应 图 255阶跃 响应 零点响应 图 256阶跃 响应 滤波器系数 Export 对话框 图 257滤波器系数 Export对话框 基于 FPGA 的 FIR 滤波器的程序设计 12 滤波器系数 图 258滤波器系数 3 FIR数字滤波器的设计方法 程序分析部分 QuartusⅡ及 Verilog HDL 介绍 Quartus II 属于 Altera 公司的综合性 PLD 开发软件,支持原理图、 VHDL、VerilogHDL 以及 AHDL( Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD 设计流程。 Quartus II 可以在 XP、 Linux 以及 Unix 上使用,除了可以使用 Tcl 脚本完成设计流程外,提供了完善的用户图形界面设计方式。 具有运行速度快,界面统一,功能集中,易学易用等特点。 Quartus II 支持 Altera 的 IP 核,包含了 LPM/MegaFunction 宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。 对第三方 EDA 工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方 EDA 工具。基于fpga的fir滤波器的程序设计(8阶)(编辑修改稿)
相关推荐
(三)学生成绩查询模块分析 学生成绩查询的界面可分为 登录界面及查询成绩时各种功能的实现界面。 学生登录到查询界面可以通过学号和姓名查阅到自己的考试成绩。 教师和管理员登录到成绩查询的界面不仅可以实现对学生的成绩进行查询、还可以实现学生成绩修改、学生成绩添加、学生成绩删除等操作。 该学生成绩查询界面可以分页显示也可以返回到登录界面。 ( 四 ) 学生成绩查询模块流程图 学生成绩查询系统 学生
library IEEE。 use。 use。 use。 entity XD is Port ( clk1k : in STD_LOGIC。 keyin : in STD_LOGIC。 keyout : out STD_LOGIC)。 end XD。 architecture Behavioral of XD is signal key1,key2:std_logic。 signal count
集群技术还可以把多台主机联合起来服务于JSP应用程序 [7]。 总 而言 之,使用 JSP动态页面开发技术 可以降低 开发人员的学习门槛和系统开发的成本 ,提高 了编程代码 可读性, 便于 开发出高性能的 Web应用系统 [10]。 所以 本次网上订餐系统开发 采用了 JSP技术。 二、 JSP 技术和 ASP 技术比较 除了 JSP外,当然还有其他的一些构建动态 Web应用的语言,如 ASP、
上稳压二极管增加电源系统的稳定性,芯片电源电路图如下: R10330LED6D3+5vVin31Vout2GNDU2AMS C19100ufC18100nFC20100nFVin31Vout2GNDU3 AMS
青岛科技大学本科毕业设计(论文) 9 图 界面 interface 新建工程 打开“文件”下拉菜单,点击“新建工程”,如图 22所示。 基于 ETAP 软件的电力系统继电保护仿真研究 10 图 22 project interface 建立文件名 输入文件名,如“电力系统单线图”,选择文件保存路径,如图 23 所示。 进入 ETAP 编辑界面 点击“确定”,打开了 ETAP 软件的编辑界面,如图
) 这个函数来实现。 其完整代码是int FIRLMS(int *nx,float *nh,int nError,int nCoeffNumber){ int i,r。 float fWork。 r=0。 for ( i=0。 inCoeffNumber。 i++ ) { fWork=nx[i]*nError*fU。 nh[i]+=fWork。 r+=(nx[ii]*nh[i])。