基于fpga 的f.i.r 滤波器设计探讨
1.引言
数字滤波在图像处理、语音识别和模式识别等数字信号处理中占有重要地位。与模拟滤波器相比,数字滤波器可以满足滤波器幅度和相位特性的严格要求,可以克服模拟滤波器所无法克服的电压漂移、温度漂移和噪声等问题。有限冲激响应(FIR)滤波器可以保证严格的线性相位。同时由于其实现结构主要是非递归的,因此FIR 滤波器可以稳定工作。FIR 滤波器被广泛用于各类数字信号处理系统中实现卷积、相关、自适应滤波、正交插值等处理,对于非实时系统和低速采样系统,FIR 滤波器的运算可在CPU 或DSP 处理器上采用软件实现。但对于无线通讯、雷达以及工业控制,甚至语音信号处理等实时应用,由于FIR 运算计算量过大,采用DSP 软件可能无法实现,因此采用可编程器件便是最好的方法。
目前 FIR 滤波器大致有以下几种实现方法:
(1)使用单片通用数字滤波器集成电路。单片通用数字滤波器使用简单方便,但由于字长ค和阶数的规格较少,不能完全满足实际需要。虽可采用多片扩展来满足,但会增加体积和功耗,因而在实际中受到一定限制。
(2)采用DSP 器件实现。由于有专门的函数可供调用,因此使用DSP 器件设计FIR滤波器相对较简单,其应用也最为广泛。其唯一缺点是程序顺序执行,尽管DSP 器件性能不断提高,但在某些实时性要求极高的场合中受到限制。
(3)采用可编程逻辑器件实现。随着可编程逻辑器件的容量和速度的不断增加,实现单片系统集成已经成ป为可能。利用可编程逻辑器件实现FIR 滤波器,由于实现的是硬件并行算法,因此特别适用于某些实时性要求高的场合。
2.FIR 滤波器基本原理
滤波,顾名思义是对输入信号通过一定的处理得到输出信号,这个处理通常是提取信号中某频率范围内的信号成分,把这种处理的过程称为滤波。而能实现滤波处理的运算电路或设备就称为滤波器。数字滤波器是完成信号滤波处理功能的,用有限精度算法实现的离散时间线性非时变系统,其输入是一组数字量,其输出是经过变换的另一组数字量。数字滤波器具有稳定性高、精度高、灵活性大等突出优点。随着数字技术的发展,用数字技术设计滤波器的功能越来越受到人们的注意和广泛的应用。FPGA 有着规整的内部逻辑块阵列和丰富的连线资源,特别适合细精度和高并行度结构特点的数字信号处理任务,如FIR、FFT 等。本文详细讨论利用FPGA 实现FIR 滤波器的设计过程,并且对设计中的关键技术—分布式算法进行详细描述。
3. FIR 分布式算法原理
3.1 总体设计
分布式算法是一种以实现乘加运算为目的的运算方法。它与传统算法实现乘加运算的不同在于执行部分积运算的先后顺序不同。简单地说,分布式算法在完成乘加功能时是通过将各输入数据每一对应位产生的部分积预先进行相加形成相应部分积,然后再对各部门积进行累加形成最终结果,而传统算法是等到所有乘积产生之后再进行相加来完成乘加运算的。与传统算法相比,分布式算法可极大地减少硬件电路规模,很容易实现流水线处理,提高电路的执行速度。
FIR 滤波器(Finite Impulse Response)有直接型、级联型和频率抽样型三种基本结构,其中最常见的是直接型结构。这种结构也称为抽头延迟线结构,或横向滤波器结构。
可以看出,线性相位FIR 滤波器的固有对称属性可以降低所需要的乘法器的数量,它使得乘法器的数量降低了一半,而加法器的数量增加了一半,总的运算量减少。
FIR 滤波器的优点有:
4.FIR 滤波器设计实现
4.1 总体设计思路
基于抽取滤波器的工作原理,本文采用FLEX10K 实现了一个具有线性相位的16 阶FIR抽取滤波器,利用原理图和VHDL 共同完成源文件设计。
1.FIR 滤波器的设计指标
采样频率:5KHz截止频率:2KHz类型:低通 输入数据宽度: 8 位阶 数:16 阶 系数数据宽度: 8 位
2.参数提取 根据数字系统输出与输入的关系,并根据模块化的设计思想,把系统分为六个模块,包括控制模块,数据寄存模块,加法模块,计数模块,数据选择模块以及乘加模块。其核心部分是控制模块,通过对控制模块编程,分别在相应的周期内实现A/D 读入,转换以及数据的读出,再经数据寄存器来储存数据,经加法模块后来实现系数相同的两个采样值相加,以节省储存空间。加完后的采样值通过计数部分的地址选择信号与乘加部分随机储存器部分的对应系数相乘后输出,乘加模块里包括有反馈环节以实现与前面乘加的结果进行累加,待完成8 次累加后,把数据送到输出端并再送往D/A 转换器,这时实现了把数字信号转化成模拟信号的工作。然后把输出接到示波器上,在输入端通过高频信号发生器输入一个模拟信号,如果信号的最高频率小于滤波器的截止频率,则示波器上显示信号能顺利通过,反之若信号的最高频率大于截止频率,则不能通过。
编程时考虑到应用模块化的设计思想,对各个模块分别进行编译仿真调试,保正每个部分的功能实现后再进行综合,这样有利于实现程序的最优化设计,如果有°哪一部分出了问题可以单独进行修改仿真调试,避免了大规模设计中从头开始查找的繁琐问题。
4.2 各模块实现
4.2.1 控制模块实现
控制器是抽取滤波器的核心模块,有两个功能:一是接收输入数据,二是向其它模块发送数据和控制信号。它根据加法器、乘法器和累加器的时序特性,有规律地向加法器发送抽头数据,向乘法器发送系数,向累加器发送控制信号,让加法器、乘法器和累加器在每个时钟周期都完成指定的任务,从而实现流水线操作。控制器的功能用VHDL 语言描述,用寄存器存放抽头和系数。
4.2.2 数据移位模块的实现
数据移位模块的符号图如图6 所示,其中:DATAIN[7..0]是来自A/D 转换器的数据;OUT0[7..0]~OUT15[7..0]是16 个输出数据,送往加法器;SCLK 是时钟信号,接控制器的ENSHIFT 端。数据移位寄存器中共有16 个触发器,每来一个脉冲,数据依次往后移。
4.2.3 加法模块实现本论文所设计的滤波器是具有线性相位的FIR 滤波器,满足偶对称条件:h=h。
利用加法模块来减少乘法运算的计算量,提高运行速度、简化设计。加法模块的符号图如图8 所示,其中:ADDIN0[7..0]~ADDIN15[7..0]是输入数据,来自数据移位模块;ADDO0~ADDO7 是输出数据,送往乘法累加单元。
4.2.4 数据选择模块实现
根据计数器发送的的地址选择信号,依次输出D0~D7 八个数据,送往乘法累加单元,与ROM 中的特征参数对应进行乘法累加。
4.2.5 计数模块实现
计数模块按照控制器所产生的COM_CLK(于计数器的CLK 相连)信号,向数据选择模块和ROM 单元发送地址信号,取出数据于参数,送往乘法累加单元进行乘法累加。其中:CLK 是时钟信号,CLR 清零信号,Q[2..0]输出地址信号。
4.2.6 乘法累加模块实现
乘法累加单元接受来自数据选择单元的数据和ROM 单元内的特征参数,完成乘法累加的运算,并ก最总输出结果,送往D/A 转换器。
其中:SEL[2..0]是地址选择信号,按时序选择ROM 中的特征参数,TAP_OUT[7..0]是来自数据选择单元的数据,/COM_CLK 是时钟信号,/ENCOM 清零信号 ,DA_WE 是输出数据的控制信号。
5 编译,仿真,调试结果
5.1 编译、仿真
将各部分的原理图(或程序)分别画出(或输入),对各部分分别进行编译仿真,生成*.sym 符号图后,再进行综合,画出顶层文件原理图,再进行编译,确保正确后再进行波形的仿真。由于器件的综合会有一定时间的时延,所以也可以分析各部分的时延。
在仿真通过后就可进行编程/下载到目标器件中。首先进行管脚锁定,完成管脚锁定后,重新编译使之生效,此时回到原来的设计文件“*.gdf”上的输入输出信号旁都标有其对应的管脚号。重新编译好后,在重新进行时序仿真,若正确,可进行下一步,器件编程/配置.在通过项目编译后可生成文件*.sof 用于下载.FLEX系列有些类似FPGA,其逻辑块LE 及内部互连信息都是通过芯片内部的存储器单♂元阵列完成的,这些存储单元阵列可由配置程序装入, 存储单元阵列采用SRAM 方式,对这类器件的下载称为配置。因为FLEX 系列的配置信息采用SRAM 方式保存,所以掉电后FLEX 系列的配置信息会丢失,需每次系统上电后重新配置。
5.2 调试
在调试的过程中,出现了不少问题,例如:由于忽略了A/D 转换器TLC549 是串行输出这一点,而设计的控制器的输入数据是并行的,造成了不匹配;进行管脚锁定时,输出数据的高位和低位锁反;在设计控制模块时,有不少情况起初没有考虑到或是和预想的不一致等。但经过认真的分析,排除疑点,调试出了预期的结果。
6 结论
假设在输入端通过高频信号发生器输入一个模拟正弦信号,如果信号的最高频率小于滤波器的截止频率f s =2KHz,则示波器上显示信号能顺利通过;反之信号的最高频率如果大于截止频率,则信号不能通过。
具体说明如下:
(1) 在 RESET 信号的控制下,实现低电平复位,即所有的输出均置为零。
(2) 在时钟信号CLK 的控制下,在内部产生一个新的时钟信号CLK-1us,随着计数功能的启动,在不同的时间段将启动不同的模块工作,以实现不同的功能。
(3) FPGA 与外部器件A/D TLC549 有3 个接口连接,由于TLC549 是串行输出数据,因此DATA-IN 只赋一位变量,AD_ rd 负责将经TLC549 处理过的数字信号输入FPGA,以便数字滤波器对其进行处理。
(4) FPGA 与D/A 的接口是8 位,因此分派了DATA OUT[7..0]的输出口,在经D/A转换后,以便在模拟示波器上显示。
但是我们最终得到的波形,并没有像输入波形过渡那么平滑。
引起这种现象的原因可能是参数设置的不够精确、各器件之间存在干扰、采样的点数不够密等。在这里还需要指出的一点是:当我们把高频信号发生器产生的正弦波信号加到EDA 实验箱上时,波形发生了失真,顶部的圆弧过度变窄,底部的圆弧过度变宽,底部的失真情况比顶部明显的多。
硕士论文代写网专业提供mba硕士论文代写服务