第6章 FIR数字滤波器设计 6.1 FIR数字滤波器原理 6.2 使用DSP Builder设计FIR数字滤波器

Slides:



Advertisements
Similar presentations
國立成功大學工程科學系 Department of Engineering Science -National Cheng Kung University 控制與訊號處理實驗室 Control & Signal Processing Lab MATLAB/Simulink 教學.
Advertisements

Final Review Chapter 1 Discrete-time signal and system 1. 模拟信号数字化过程的原理框图 使用 ADC 变换器对连续信号进行采样的过程 使用 ADC 变换器对连续信号进行采样的过程 x(t) Analog.
一、音调  听过女高音和男低音的歌唱吗?他们的声音 给你的印象是怎样的? 女高音:音调高, 男低音:音调低,比较低沉。
什么是SOPC: SOPC是英文System On a Programmable Chip的缩写,称为片上可编程系统。SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理等融为一体,综合了各自的优势,且在结构上形成一块芯片。 为什么用SOPC:SOPC是现代电子技术和电子系统设计的发展趋势,建立了电子系统设计的新模式。用户利用SOPC开发平台,自行设计高速、高性能的DSP处理器、特定功能的CPU及其外围接口电路,创建结构最为简洁的电子系统。
SOPC技术 数字逻辑电路 主讲:刘昌华 嵌入式技术研究所
FPGA设计与应用 大连理工大学软件学院 王洁 2011年春季.
第 3 章 聽覺 每章扉頁 3.1 聽覺 3.2 人類耳朵的反應 3.3 聽覺缺陷.
數位訊號處理 第4章 離散時間訊號與LTI系統之傅利葉分析
第一部分 中考基础复习 第一章 声现象.
一种对于单声道声源定位的3D声音定位算法DSP执行器
第2章 SOPC硬件开发环境及流程.
Introduction to Matlab
第一章 绪论.
运用Matlab GUI辅助大学物理实验 蒋志洁 中山大学 物理学院
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月22日星期三.
系统仿真软件Matlab及数模混合仿真 2013年4月2日.
提升國小自然與生活科技領域教師教學智能研習
电 子 信 息 工 程 系 热 烈 欢 迎 来自全国各地的新同学!.
波浪发电 组员:罗海荣 方健 凤亮 李健雄 江召.
A TIME-FREQUENCY ADAPTIVE SIGNAL MODEL-BASED APPROACH FOR PARAMETRIC ECG COMPRESSION 14th European Signal Processing Conference (EUSIPCO 2006), Florence,
IV. Implementation IV-A Method 1: Direct Implementation 以 STFT 為例
DDS原理与应用 通信工程2002级 李忠琦.
电工电子实验中心.
AKA Embedded 开放实验室系列普及讲座之一 FPGA/CPLD的应用和开发简介
聲音檔和 Video 檔的讀與寫 (by Matlab)
第1章 FPGA概述 1.1 FPGA的发展历程 1.2 FPGA的基本原理 1.3 FPGA的设计方法 1.4 FPGA的设计流程
V. Homomorphic Signal Processing
水煮FPGA 传统FPGA设计流程简介.
2-1 基本直流分析. 2-1 基本直流分析 新專案(Project)的建立 點選 File/New/Project.
單元一:基頻訊號傳送技術實習 (PCM取樣 量化 編碼部分) 數位通訊實習模擬 單元一.
VHDL數位電路實習與專題設計 文魁資訊-UE301
滤波器设计matlab相关函数.
第9章 DDS设计 9.1 DDS的基本原理 9.2 DDS的模块设计 9.3 FSK调制器设计.
第3章 DSP Builder设计入门 3.1 DSP Builder及其设计流程 3.2 DSP Builder设计向导
Chapter 5 Verilog硬體描述語言
第五章 数字滤波器设计 Filtering Beijing Institute of Technology 数字信号处理.
浅谈基于FPGA的电路设计 报告人:吴爱平 2005/11/13
版权所有,禁止未经授权的商业使用行为 何宾 Tel: 北京中教仪装备技术有限公司.
EDA技术实用教程 第1章 概 述.
6.5 数字高通、带通和带阻滤波器的设计.
無線通訊系統模擬 姓名:顏得洋 學號:B
内容: 1. 库模块简介 2.基本建模方法 3.模型举例 4.子系统与模块封装技术 5.函数的编写与应用
Simulink建模与仿真.
Simulink模擬基礎 主要內容 Simulink簡介 Simulink模組庫 Simulink的基本操作 S-函數.
第2章 Quartus II设计向导 2.1 频率计的VHDL设计 2.2 使用宏功能块设计频率计 2.3 嵌入式系统块ESB的应用
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
CH5、SIMULINK仿真基础 在工程实际中,控制系统的结构往往很复杂,如果不借助专用的系统建模软件,则很难准确地把一个控制系统的复杂模型输入计算机,对其进行进一步的分析与仿真。 1990年,Math Works软件公司为MATLAB提供了新的控制系统模型图输入与仿真工具,并命名为SIMULAB,该工具很快就在控制工程界获得了广泛的认可,使得仿真软件进入了模型化图形组态阶段。但因其名字与当时比较著名的软件SIMULA类似,所以1992年正式将该软件更名为SIMULINK。
本章小结: 可编程逻辑器件(Programmable Logic Device,简称为 PLD)是目前数字系统设计的主要硬件基础。现场可编程门阵列 FPGA(Field Programmable Gate Array)现场可编程门阵列FPGA在结构上由逻辑功能块排列为阵列,功能由逻辑结构的配置数据决定,配置数据可以存放在片外的EPROM或其他存储体上,人们可以控制加载过程,在现场修改器件的逻辑功能。
EDA 技术实用教程 第 5 章 QuartusII 应用向导.
信号与图像处理基础 Adaptive Filter 中国科学技术大学 自动化系 曹 洋.
Advanced Digital Signal Processing 高等數位訊號處理
Chapter 2 Z-Transform and Discrete Time Systems Analysis
第二章 闭环控 制的直 流调速 系统及 计算机 仿真.
第9章 MATLAB环境下的仿真软件Simulink
数字信号处理基础 第7章 FIR数字滤波器的理论和设计
现代电子系统设计 第十讲 实验五:数字下变频器 的设计实现 龚玉萍 讲师 无线通信系通信对抗教研室 理工大学通信工程学院.
第1章 概述 1.1 DSP实现方案及设计流程 1.2 现代DSP设计流程概述 1.3 两类DSP解决方案的比较.
9.1 仿真概念和仿真操作步骤 9.2 常用仿真元件与激励源 9.3 仿真器的设置与运行
數位邏輯設計 VHDL.
第四章 QuartusII软件的应用 本章重点: 本章难点: EDA技术 QuartusII的设计输入 QuartusII软件的综合与编译
SD IO Interface World Real Time Clock / Alarm with C-LCM
控制系统计算机辅助设计-MATLAB语言与应用
毕业设计课题: 用MATLAB实现 一种快跳频通信系统
Introduction to Matlab
本講義為使用「訊號與系統,王小川編寫,全華圖書公司出版」之輔助教材
本講義為使用「訊號與系統,王小川編寫,全華圖書公司出版」之輔助教材
群聚分析操作介紹 -以SOM和K-means為例
作者:郭阳宽 王正林 《过程控制系统仿真》 电子工业出版社 出版 作者:郭阳宽 王正林
按键处理部分 王安然.
Simulink National Tsing Hua University
Presentation transcript:

第6章 FIR数字滤波器设计 6.1 FIR数字滤波器原理 6.2 使用DSP Builder设计FIR数字滤波器 6.3 使用FIR IP Core设计FIR滤波器

6.1 FIR数字滤波器原理 对于一个FIR滤波器系统而言,它的冲激响应总是有限长的,其系统函数可以记为

其中M是FIR滤波器的零点数,即延时节数,为叙述简便,在本章中M被称为FIR滤器的阶数。最基本的FIR滤波器可用下式表示: 其中x(n)是输入采样序列,h(i)是滤波器系数,L是 滤波器的系数长度,y(n)表示滤波器的输出序列。 也可以用卷积来表示输出序列y(n)与x(n)、h(n)的关系。

图6-1中显示了一个典型的直接I型4阶FIR滤波器,其输出序列y(n)满足下列等式:

图6-1 4阶FIR滤波器结构

在这个FIR滤波器中,总共存在3个延时节,4个乘法单元,一个4输入的加法器。如果采用普通的数字信号处理器(DSP Processor)来实现,只能用串行的方式顺序地执行延时、乘加操作,这不可能在一个DSP(指数字信号处理器)指令周期内完成,必须用多个指令周期来完成。 但是,如果采用FPGA来实现,就可以采用并行结构,在一个时钟周期内得到一个FIR滤波器的输出。

6.2 使用DSP Builder设计FIR数字滤波器 使用DSP Builder可以方便地在图形化环境中设计FIR数字滤波器,而且滤波器系数的计算可以借助Matlab强大的计算能力和现成的滤波器设计工具来完成。 6.2.1 3阶常系数FIR滤波器的设计 在此用以下示例来说明整个设计过程。 假定一个3阶的FIR滤波器,其可以表示为

其中:h(0)=63,h(1)=127,h(2)=127,h(3)=63,是量化时附加的因子。 这里采用直接I型来实现该FIR滤波器。设计好的3阶直接I型FIR滤波器模型图可以参见图6-2。具体的新模型建立、模块调用过程可以参见第3章。

图6-2 3阶FIR滤波器

图中模块的参数作如下设置: xin模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Input port” 参数“number of bits”设为“8”

yout模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“8”   Parallel Adder Subtractor模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 “Add(+)Sub(-)”设为“++++”

Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builder中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1”   h0模块:(Gain) 库:Altera DSP Builder中Arithemtic库 参数“Gain Value”设为“63” 参数“Map Gain Value to Bus Type”设为“Signed Integer” 参数“Gate Value number of bits”设为“8” 参数“Number of Pipeline Levels”设为“0”

h1模块:(Gain) 参数“Gain Value”设为“127” 其余同h0模块   h2模块:(Gain) h3模块:(Gain) 参数“Gain Value”设为“63”

由于FIR滤波器的系数已经给定,是一个常数,从图中看到,在DSP Builder中可以用Gain(增益)模块来实现的运算,用延时Delay模块来实现输入信号序列的延时。 设计完3阶FIR滤波器模型后,就可以添加Simulink模块进行仿真了,如图6-3所示。

图6-3 带仿真模块的3阶滤波器模型

新增的仿真模块的参数作如下设置: Chirp Signal模块:(Chirp Signal) 库:Simulink中Sources库 参数“Initial Frequency(Hz)”设为“0.1” 参数“Target time”设为“10” 参数“Frequency at target time(Hz)”设为“1” 参数“Interpret vectors parameters as 1-D”选中

Gain模块:(Gain) 库:Simulink中Math Operations库 参数“Gain”设为“127” 参数“Multiplication”设为“Element wise(K.*u)” Scope模块:(Scope) 库:Simulink中sinks库 参数“Number of Axes”为“2”

其中,Chirp Signal模块为线性调频信号发生模块,生成一个线性调频信号0.1 Hz~1 Hz。 在该模型仿真中,使用默认的仿真参数。 仿真结果如图6-4所示。显然,一个线性调频信号通过3阶FIR滤波器后幅度发生了变化,频率较高部分的幅度被衰减了。

图6-4 FIR滤波器仿真结果

6.2.2 4阶FIR滤波器节的设计 上节介绍的是常系数FIR滤波器的示例。本节将设计一个系数可变的FIR滤波器节。对于直接I型的FIR滤波器(结构见图6-5),是可以级联的。也就是说,在滤波器系数可变的情况下,可以预先设计好一个FIR滤波器节,在实际应用中通过不断地调用FIR滤波器节,将其级联起来,用来完成多阶FIR滤波器的设计。当然,对于线性相位的FIR滤波器,我们可以采用改进后的滤波器结构,可以节省一半的乘法器。在这里,为了叙述方便,没有采用改进后的FIR结构。

图6-5 直接I型FIR滤波器结构

图6-6是一个直接I型的4阶FIR滤波器节的结构。为了使该滤波器节的调用更为方便,在xin输入后插入了一个延时单元,由3阶滤波器演变成4阶的,不过常系数项(系数项) 恒为0。由于在通信应用中,FIR滤波器处理的往往是信号流,因而增加一个延时单元不会影响FIR滤波器处理的结果,只是系统延时增加了一个时钟周期。

图6-6 直接I型4阶FIR滤波器节

对于该FIR滤波器节,其系统函数可以用下式来表示:   由于浮点小数在FPGA中实现比较困难,实现的代价太大,因而在DSP Builder中不妨使用整数运算来实现,最后用位数舍取的方式得到结果。为了使参数可变,FIR滤波器系数、、、也作为输入端口。在本设计中输入序列的位宽设为9位。 图6-7显示的就是一个设计好的4阶FIR滤波器节,与图6-2的常数FIR滤波器相比,这里用Product(乘法)模块代替了Gain(增益)模块。

图6-7 直接I型4阶FIR滤波器节

图6-7中相关模块的参数设置如下: xin、hn1、hn2、hn3、hn4模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Input port” 参数“number of bits”设为“9”

yn模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“20”   xn4模块:(Altbus) 参数“number of bits”设为“9”

Parallel Adder Subtractor模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Add(+)Sub(-)”设为“++++” 使用“Pipeline” 参数“Clock Phaese Selectioon”设为“1”   Delay、Delay1、Delay2、Delay3模块:(Delay) 库:Altera DSP Builder中Storage库 参数“Depth”设为“1” 参数“Clock Phase Selection”设为“1”

Product模块:(Product) 库:Altera DSP Builder中Arithemtic库 参数“Pipeline”设为“2” 参数“Clock Phase Selection”设为“1” 不选择“Use LPM”

6.2.3 16阶FIR滤波器模型设计 利用以上设计的4阶FIR滤波器节可以方便地搭成阶直接I型FIR滤波器(注意: )。比如要实现一个16阶的低通滤波器,可以调用4个4阶FIR滤波器节来实现。 1. 设计4阶FIR滤波器节子系统 建立一个新的DSP Builder模型,复制上节的FIR4tap模型到新模型。按照第4章所示的方法由FIR4tap模型建立子系统(SubSystem),并对端口信号进行修改,把子系统更名为fir4tap,如图6-8所示。fir4tap的内部结构如图6-9所示。

图6-8 fir4tap子系统

图6-9 fir4tap子系统内部原理图

2. 组成16阶FIR滤波器模型 复制4个fir4tap,并将它们衔接起来。前一级的输出端口x4接后一级的x输入端口,并附加上16个常数端口,作为FIR滤波器系数的输入。把4个子系统fir4tap的输出端口y连接起来,接入一个4输入端口的加法器,得到FIR滤波器的输出yout。 注意:在作好子系统后,要按照第4章中所述的方式,修改其Mask参数Mask Type为“SubSystem AlteraBlockSet”。设计好的16阶FIR滤波器如图6-10所示。

图6-10 16阶直接I型FIR滤波器模型

16阶直接I型FIR滤波器模型中,对新增加的模块作如下设置: xin模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Input port” 参数“number of bits”设为“9”

yout模块:(Altbus) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“signed Integer” 参数“Node Type”设为“Output port” 参数“number of bits”设为“20”   x16模块:(Altbus) 参数“number of bits”设为“9”

Parallel Adder Subtractor模块:(Parallel Adder Subtractor) 库:Altera DSP Builder中Arithmetic库 参数“Add(+)Sub(-)”设为“++++” 使用“Pipeline” 参数“Clock Phaese Selectioon”设为“1”   h0、h1、h2、h3、h4、h5、h6、h7、h8、 h9、h10、h11、h12、h13、h14、h15模块:(Delay) 库:Altera DSP Builder中Bus Manipulation库 参数“Bus Type”设为“Signed Integer” 参数“number of bits”设为“9”

6.2.4 使用MATLAB的滤波器设计工具 1. 滤波器指标 若需要设计一个16阶的FIR滤波器(),给定的参数如下: ● 低通滤波器 ● 采样频率Fs为48 kHz,滤波器Fc为10.8 kHz ● 输入序列位宽为9位(最高位为符号位) 在此利用MATLAB来完成FIR滤波器系数的确定。

2. 打开MATLAB的FDATool MATLAB集成了一套功能强大的滤波器设计工具FDATool(Filter Design & Analysis Tool),可以完成多种滤波器的设计、分析和性能评估。 点击MATLAB主窗口下方的“Start”(开始)按钮,按图6-11选择“ToolBox”→“Filter Design”→“Filter Design & Analysis Tool(FDATool)”,打开FDATool,如图6-12所示。

图6-11 打开FDATool

图6-12 FDATool界面

3. 选择Design Filter FDATool界面左下侧排列了一组工具按钮,其功能分别如下所述: 滤波器转换(TransForm Filer) 设置量化参数(Set Quantization Parameters) 实现模型(Realize Model) 导入滤波器(Import Filter) 设计滤波器(Design Filter) 选择其中的按钮,进入设计滤波器界面,进行下列选择:

● 滤波器类型(Filter Type)为低通(Lowpass); ● 设计方法(Design Method)为FIR,采用窗口法(Window); ● 滤波器阶数(Filter Order)定制为15; ● 窗口类型为Kaiser,Beta为0.5; ● Fs为48 kHz,Fc为10.8 kHz。 设置好后的界面见图6-13。 注意:在滤波器阶数选择时,在此设置的是15阶,而不是16阶!这是由于在前面设计的16阶FIR滤波器的常系数项。其系统函数可用下式来表示:

图6-13 滤波器设计界面

显然上式可以写成:   即可以看成是一个15阶的FIR滤波器的输出结果经过了一个单位延时单元。所以在FDATool中把它当成15阶FIR滤波器来计算参数。点击,让MATLAB计算FIR滤波器系数并作相关分析。

4. 滤波器分析 计算完FIR滤波器系数后,往往需要对设计好的FIR滤波器进行相关的性能分析,以便了解该滤波器是否满足设计要求。分析操作步骤如下: 选择FDATool的菜单“Analysis”→“Magnitude Response”,启动幅频响应分析。图6-14显示了滤波器的幅频响应图,x轴为频率,y轴为幅度值(单位为dB)。 在图的左侧列出了当前滤波器的相关信息:

● 滤波器类型为Direct form FIR(直接I型FIR滤波器); ● 滤波器阶数为15。 注意:不是每种FIR滤波器设计方法计算出的滤波器都是直接I型结构的。如果在DSP Builder中设计的FIR滤波器为直接I型结构,那就必须保证在这里显示的FIR滤波器结构为“Direct form FIR”。

图6-14 FIR滤波器的幅频响应

选择菜单“Analysis”→“Phase Response”,启动相频响应分析。图6-15显示了滤波器的相频响应。由图可以看到设计的FIR滤波器在通带内其相位响应为线性的,即该滤波器是一个线性相位的滤波器。 图6-16显示了滤波器幅频特性与相频特性的比较。这可以通过菜单选择“Analysis”→“Magnitude & Phase Response”来启动分析。 选择菜单“Analysis”→“Group Delay Response”,启动群延时分析,波形如图6-17所示。

图6-15 FIR滤波器的相频响应

图6-16 幅频响应与相频响应的比较

图6-17 FIR滤波器的群延时

在菜单“Analysis”下还有一些分析: ● “Impulse Response”:冲激响应,见图6-18。 ● “Step Response”:阶跃响应,见图6-19。 ● “Pole/Zero Plot”:零极点图,见图6-20。 由于直接I型FIR滤波器只有零点,所以在图6-20中不存在极点。

图6-18 FIR滤波器的冲激响应

图6-19 FIR滤波器的阶跃响应

图6-20 FIR滤波器的零极点

求出的FIR滤波器的系数可以通过选择菜单“Analysis”→“Filter Coefficients”来观察,见图6-21。图中列出了FDATool计算的15阶直接I型FIR滤波器的部分系数。

图6-21 FIR滤波器系数

5. 量化 从图6-21可以看到,FDATool计算出的值是一个有符号小数,而在DSP Builder下建立的FIR滤波器模型需要一个整数作为滤波器系数。所以必须进行量化,并对得到的系数进行归一化。为此,点击FDATool左下侧的工具按钮进行量化参数设置。在设置“Turn quantization on”前选择“√”,如图6-22所示。

在滤波器的设计指标中,已经提到FIR滤波器的输入位宽是9位,表示为有符号数。在图6-22中设置前4项的量化格式(Format)为“[9 8]”,表示量化后位宽为9位,绝对值为8位;设置后2项(乘积、乘积和)的量化格式为“[18 16]”。 点击按钮,打开图6-23所示的对话框。在此量化优化设置对话框中选择相关的优化选项。 图6-24中显示了量化后的部分系数值。注意在这里系数仍是用小数表示的,不同于量化前的系数,现在其二进制表示的位数已满足量化要求。

图6-22 量化参数设置

图6-23 量化优化设置对话框

图6-24 量化后的系数值

设计的FIR滤波器在量化后滤波器的性能会有所改变,其幅频响应、相频响应也有所变化。量化在带来实现方便的同时也带来了量化噪声,图6-26显示了量化带来的噪声分析。

图6-25 量化后的幅频、相频响应

图6-26 量化后的噪声分析

6. 导出滤波器系数 为导出设计好的滤波器系数,选择FDATool菜单的“File”→“Export...”,打开导出(Export)对话框,如图6-27所示。在该窗口中,选择导出到工作区(Workspace)。这时滤波器系数就存入到一个一维变量Num中了,不过这时Num中的元素是以小数形式出现的: Num = -0.0742 0.0234 0.1133 0.0117 -0.1758 -0.0977 0.3594 0.8281 0.8281 0.3594 -0.0977 -0.1758 0.0117 0.1133 0.0234 -0.0742

图6-27 导出系数对话框

现在若要在FIR滤波器模型中使用这些数据,还需要将它们转化为整数:在MATLAB主窗口的命令窗口中键入: Num * (2^8) 得到:>> Num*(2^8) ans = Columns 1 through 10 -19 6 29 3 -45 -25 92 212 212 92 Columns 11 through 16 -25 -45 3 29 6 -19

7. 修改FIR滤波器模型添加参数 把计算出的系数逐个填入到FIR滤波器模型中,见图6-28。这样就完成了一个16阶直接I型FIR低通滤波器的设计。  

图6-28 16阶低通FIR滤波器

8. 导出滤波器系数的另一种方法 按照上面介绍的导出滤波器系数的方法在FIR滤波器阶数较大时就不太方便,而且在设计要求有所变化时系数的修改极为不利。可以按照以下方法来导出: 把FIR滤波器模型中的h1~h16模块的参数“Constant Value(常数值)”设置为: Num(n)*(2^8) 其中Num同上文所述,是FDATool的导出系数,n用具体的数字来代替,如h1模块用Num(1)*(2^8),h2模块用Num(2)*(2^8)。

6.2.5 16阶FIR滤波器的硬件实现 1. 由Simulink模型转成VHDL 打开SingalCompiler,选定器件系列,把模型转成VHDL文件,具体操作步骤可以参见第3章。 2. 综合 在SignalCompiler中选择Quartus II进行综合,或者利用第三方综合工具,比如LeonardoSpectrum进行综合。图6-29显示了LeonardoSpectrum综合结果的部分RTL原理图。

3. 适配下载 如果采用Quartus II进行综合,在Quartus II中打开SignalCompiler建立的Quartus项目文件,选择具体器件,锁定管脚,完成适配后下载至FPGA开发板中。若采用其它综合工具进行综合,适配流程请参见第4章。 在FPGA开发板上加入高频信号源,验证FIR滤波器的滤波效果。

图6-29 LeonardoSpectrum综合结果

6.3 使用FIR IP Core设计FIR滤波器 对于一个面向市场和实际工程应用的系统设计,在开发速度和效率方面要求很高。然而对于一般的设计者,在短期内也不可能全面了解FIR滤波器(指在FPGA上实现)相关的优化技术,也没有必要了解过多的细节。另外,FIR滤波器的滤波系数的确定,即FIR滤波器的设计方法也是比较麻烦的,需要花费大量的精力和时间才能设计出在速度、资源利用、性能上都满足要求的FIR滤波器。

另一方面,虽然DSP Builder提供了大量的基本DSP模块,但是要了解用哪些模块可以构建一个高效的FIR滤波器仍然不是一件简单的事情。 但是,如果采用设计好的FIR滤波器的IP核,几乎可以很容易地解决以上的问题。对于IP核,在速度、资源利用、性能上往往进行过专门的优化,还提供了相关的IP应用开发工具。 Altera提供的FIR Compiler是一个结合Altera FPGA器件的FIR Filter Core,DSP Builder与FIR Compiler可以紧密地结合起来。DSP Builder提供了一个FIR Core的应用环境和仿真验证环境。

6.3.1 FIR滤波器核与DSP Builder集成 使用FIR Core之前,首先必须保证Matlab、DSP Builder、Quartus II以及IP核的本身,即FIR Compiler等工具安装正确。如果一切正常,我们可以在Simulink库管理器中看到“Altera MegaCore FIR Compiler”这个库,如图6-30所示。 MegaCore是Altera的IP Core计划中的一个组成部分,FIR Compiler作为一个MegaCore,不附带在DSP Builder和Quartus II中,需要单独向Altera公司购买或申请试用版。现在最新的FIR Compiler的版本可以支持Quartus II和DSP Builder。

图6-30 FIR Core模块

6.3.2 FIR滤波器核的使用 1. 调用FIR模块 在Simulink环境中新建一个模型,放置SignalCompiler模块和FIR模块(如图6-31)。 注意:在DSP Builder中使用FIR Compiler时,需要有SignalCompiler的支持,所以在使用配置FIR模块时,必须放置SignalCompiler模块。

图6-31 调用FIR Core

2. 配置FIR滤波器核 假定需要设计一个带通的高阶FIR滤波器,设计指标如下: ● 滤波器类型:带通(BandPass) ● 采样频率:50 MHz ● 通带:2~4 MHz ● 阶数:64 双击新模型中的FIR模块,打开FIR滤波器核的设置窗口,进行FIR滤波器参数的配置(参见图6-32)。

图6-32 确定FIR滤波器系数

在这里,设计者只要把设计要求直接输入到对应的设置框,并点击“Apply”(应用)按钮,FIR滤波器的系数就自动计算完成,并在窗口中显示出设计的FIR滤波器的幅频特性。 除了将设计指标输入外,还有一些选项可以设置,比如FIR滤波器设计时采用的窗函数类型,在这里我们设为Blackman窗。设计者不用关心这些窗口类型在FIR滤波器设计中的具体实现算法,只要观察不同的窗函数(Window)对FIR滤波器性能的影响,选定其中一种最符合设计性能要求的窗函数类型即可。

点击“Apply”按钮后在图中的右侧就显示了计算出的滤波器系数。注意在这里FIR滤波器的系数还没有被量化。设置完后点击“Next”按钮,进行下一步设置,完成系数的量化。 FIR滤波器在FPGA上进行实现时,往往需要进行滤波器系数的量化,系数以整数的面目出现在图6-33中。可以选择合适的系数的位宽,同时在设置窗口中还显示了当前滤波器的幅频响应,可用以分析系数量化对FIR滤波器性能的影响。 设计者应在满足设计要求的前提下尽可能地减少系数的位宽,以减少FPGA资源的耗费。

图6-33 FIR滤波器系数分析和量化

3. FIR滤波器结构与分析 FIR Compiler可以帮助设计者完成FIR滤波器的结构分析并生成仿真时的仿真文件。 图6-35显示了具体实现的FIR滤波器和采用的滤波器结构,以及具体用什么系列的FPGA加以实现,或实现在FPGA的哪种资源中,某些选项可以更改。   点击“Next”后进行FIR滤波器核的仿真分析,图6-36显示了在时域中表示的FIR滤波器的冲激响应。图6-37显示了阶跃响应。

图6-34 FIR滤波器的I/O设置

图6-35 FIR滤波器结构

图6-36 冲激响应

图6-37 阶跃响应

FIR Compiler在进行FIR滤波器分析的同时可以帮助设计者生成对应的仿真文件,并以多种形式出现。比如仿真用的MATLAB文件,用于Quartus II的仿真激励文件,用于HDL仿真器的TestBench文件等。 4. FIR滤波器核的硬件测试 设计好的FIR Core可以像普通的DSP Builder模块一样使用,与其它设计模块相连接,并在Simulink中进行仿真,直至使用SignalCompiler完成到VHDL的转化。最后,接着送入Quartus II进行编译、适配,完成后下载到FPGA开发板上进行硬件测试。