Modeling and Simulation 建模与仿真, 2013, 2, 49-54 http://dx.doi.org/10.12677/mos.2013.24009 Published Online November 2013 (http://www.hanspub.org/journal/mos.html) Design and Realization of a Digital FIR Filter Jun Li Department of Electronic Engineering, Hubei University of Economic, Wuhan Email: lijun@hbue.edu.cn Received: Oct. 20th, 2013; revised: Nov. 4th, 2013; accepted: Nov. 9th, 2013 Copyright © 2013 Jun Li. This is an open access article distributed under the Creative Commons Attribution License, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Abstract: A low-pass filter is designed under MATLAB environment in this paper by using the window function method. Simulation test and implement are finished under the CCS integrated development environment, and the details of realization process on the DSP chip are also presented. FDATool toolbox is also used for filter design so that the parameters can be changed at any time according to the design requirements, which will make the filter achieve the optimization. Keywords: FIR Filter; MATLAB; FDATool; CCS FIR 数字滤波器的设计与实现 李 俊 湖北经济学院电子工程系,武汉 Email: lijun@hbue.edu.cn 收稿日期:2013 年10 月20日;修回日期:2013 年11 月4日;录用日期:2013 年11 月9日 摘 要:本文在MATLAB 环境下采用窗函数法设计了一个低通滤波器,并在CCS 集成开发环境下进行了仿真, 给出了在DSP 芯片上进行了实现的过程。FDATool 工具箱也被用来进行滤波器的设计,可方便地根据设计要求 随时改变参数,以使滤波器达到最优化。 关键词:FIR 滤波器;MATLAB;FDATool;CCS 1. 引言 数字滤波器利用离散时间系统的特性对输入序 列进行加工处理,将输入序列经过一定的运算后转变 为输出数字序列,从而达到改变信号频谱的效果[1]。 作为一种典型的数字信号处理系统,数字滤波器具有 稳定性高、精确度高、灵活性大等优点。而其中其中 有限脉冲响应(FIR)滤波器,又因为其稳定性和精确的 相位条件,受到人们的广泛关注,在图像处理、数字 通信、语音识别和模式识别等许多信号处理领域中均 占有重要地位[2,3]。 FIR数字滤波器的实现主要方法有:利用单片通 用数字滤波器集成电路;利用可编程逻辑器件和利用 DSP 芯片来实现[4,5]。单片通用数字滤波器使用方便, 但计算和缓存能力较差,只适合于字长和阶数较小的 滤波器设计,不能完全满足实际需要;可编程逻辑器 件计算能力较强大,连线资源丰富,能够实现较复杂 的信号处理,然而系统结构复杂,实现成本高[6,7]; DSP 器件由于接口资源丰富,成本适中,在很多领域 得到广泛的应用,然而传统滤波器的设计与实现的过 程较繁琐,参数调整麻烦,结果显示不够直观[8,9]。因 此,本文提出了一套方案,能够方便快捷地完成滤波 器的设计与实现全过程,在Matlab 和CCS 集成开发 Open Access 49 FIR 数字滤波器的设计与实现 环境下开发的系统,同时兼具实时性和灵活性,具备 参数可调整,易于设置,开发简便,结果直观等优点。 2. 数字滤波器理论基础 一般数字滤波器从功能上分类,可以分为低通、 高通和带通等滤波器。从实现的网络结构或单位脉冲 响应分类,可以分成无限脉冲响应(IIR)滤波器和有限 脉冲响应(FIR)滤波器。他们的系统函数分别为: 0 1 0 z 1 M r r r Nn n bz H hn z (1) 1 0 Nn n H zhnz (2) (1)式中的 H z称为 N阶IIR 滤波器函数,(2)式 中 H z称为 N-1 阶FIR 滤波器函数。 FIR 滤波器在实现时,不断地对输入样本 x(n)延 时后,再作乘法累加算法,输出滤波结果 y(n),因此, FIR滤波器实际上是一种乘法累加运算。在数字滤波 器中,FIR 滤波器的最主要的特点是没有反馈回路, 不存在不稳定的问题;可以随意设置幅度特性的同 时,还能保证精确的线性相位。稳定和线性相位特性 是FIR滤波器的最突出的优点,同时它还有其他特点, 如:设计方式是线性的;硬件容易实现;滤波器过渡 过程具有有限区间;相对 IIR 滤波器而言,阶次较高, 其延迟也要比同样性能的 IIR 滤波器大得多等等。 3. 基于 MATLAB 的FIR 数字滤波器的设计 3.1. 设计指标 本文设计的 FIR 低通滤波器,设计指标为: 采样 频率是 100 kHz,通带截止频率 5 kHz,阻带截止频率 10 kHz,通带最大衰减 0.1 dB,阻带最小衰减 65 dB。 3.2. 使用 FDATool 确定抽头系数 FDATool 是MATLAB 信号处理工具箱里专用的 滤波器设计分析工具,它可以灵活地采用不同方法设 计几乎所有的经典滤波器,查看滤波器的各种指标, 并得到所设计滤波器的系数。在MATLAB 的Start 菜 单中选择 Toolboxes→Fiter Design→Fiter Design & Analysis Tools(fdatool)选项,或者在命令行中输入 fdatool来启动滤波器设计分析器。根据设计指标,选 择Blackman 窗设计方法,填写参数,Fs = 100 kHz, Fc = 5 kHz,Specify order = 80, FDATool界面如图1 所示。左上角显示的是滤波器各种特性,其中包括设 计滤波器所需最少的阶数是30,直接型结构及良好的 Figure 1. Interface of digital lowpass filter design in FDATool by using Blackmann Windows 图1. 采用布莱克曼窗设计低通滤波器的 FDATool界面 Open Access 50 FIR 数字滤波器的设计与实现 幅频响应特性。图 1为所设计出的滤波器实例。 从matlab 中导出 FIR 滤波器系数步骤。如图2所 示,得到设计的滤波器的参数如下: const int BL = 81; const int16_T B[81] = {0, 0, 0, −1, −3, −4, −6, −8, −8, −5, 0, 9, 22, 38, 56, 72, 83, 85, 74, 46, 0, −64, −144, −231, −316, −386, −425, −419, −352, −215, 0, 291, 651, 1064, 1509, 1958, 2381, 2749, 3035, 3215, 3277, 3215, 3035, 2749, 2381,1958, 1509, 1064, 651, 291, 0, −215, −352, 419, −425, −386, −316, −231, −144, −64, 0, 46, 74, 85, 83, 72, 56, 38, 22, 9, 0, −5, −8, −8, −6, −4, −3, −1, 0, 0}; 4. FIR数字滤波器的 DSP 实现 4.1. DSP简介 数字信号处理器(DSP)作为一种可编程专用芯 片,是数字信号处理理论实用化过程的重要技术工 具,在语音处理、图像处理等技术领域得到了广泛的 应用。由 TI 公司提供专业的开发工具 CCS,自带 DSP/ BIOS 操作系统,可以直接编写适合 DSP 开发工程及 文件,满足 DSP 程序设计要求。由 MathWorks 公司 和TI 公司联合开发的 DSPMATLAB Link for CCS Development Tools(简称 CCSLin k) 是MATLAB6.5 版 本(Release13)中增加的一个全新的工具箱,它提供了 MATLAB、CCS 和DSP 目标板的接口,利用此工具 可以像操作 MATLAB 变量一样来操作 DSP 器件的存 储器和寄存器,使开发人员在MATLAB环境下完成 对DSP 的操作,从而极大地提高DSP 应用系统的开 发进程。 4.2. MATLAB产生输入信号 将下面代码另存为M文件,在 MATLAB 中运行 后将会生成input.out 文件。该数据文件中含有 500 Hz, 3000 Hz,8000 Hz 三种频率的信号,用于滤波器效果 的测试。信号的时域和频谱分别如图 3和图4所示。 f11 = 500; f12 = 3000; f13 = 8000; fs = 10000; N = 1000; T = 1/fs; n = 0:N; x11 = sin(2*pi*f11*n*T); x12 = 0.7*sin(2*pi*f12*n*T); x13 = 0.5*sin(2*pi*f13*n*T); x_base = (x11 + x12 + x13); figure(1); Figure 2. Output data type setting 图2. 设置输出数据类型 Open Access 51 FIR 数字滤波器的设计与实现 02004006008001000 1200 -2.5 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 2.5 Figure 3. Input signals in the time domain 图3. 输入信号的时域图 01000 20003000 40005000 6000 70008000 900010000 0 50 100 150 200 250 300 350 400 450 500 Figure 4. Spectral image of input signals 图4. 输入信号的频谱图 plot(x_base); figure(2); yff = abs(fft(x_base)); df = n*(fs/N); plot(df,yff); xout = x_base/max(x_base); xto_ccs = round(32767*xout) fid = fopen('input.dat','w'); fprintf(fid,'1651 1 0 0 0\n'); fprintf(fid,'%d\n',xto_ccs); fclose(fid); 4.3. DSP实现 在CCS 上建立 FIRfilter 工程,编写实现 FIR低 通滤波器的main.c 程序,如下: #include"stdio.h" #define N 81 #define LEN 200 long yn; int input[LEN]; //输入缓冲,在仿真时将从内存载 入 int output[LEN]; //输出缓冲,直接存放在内存中 void main() { int i,j; int *x; const long B[81] = {0, 0, 0, − 1, −3, −4, −6, −8, −8, −5, 0, 9, 22, 38, 56, 72, 83, 85, 74, 46, 0, −64, −144, −231, −316, −386, −425, −419, −352, −215, 0, 291, 651, 1064, 1509, 1958, 2381, 2749, 3035, 3215, 3277, 3215, 3035, 2749, 2381, 1958, 1509, 1064, 651, 291, 0, −215, −352, 419, −425, −386, −316, −231, −144, −64, 0, 46, 74, 85, 83, 72, 56, 38, 22, 9, 0, −5,−8, −8, −6, −4, −3, −1, 0, 0}; for(j = 0;j<LEN-1;j++) { x = &input[j]; yn = 0; for(i = 0;i<N-1;i++) yn+ = B[i]*(*x++); output[j] = yn>>15; } while(1); } 最后将链接文件 my.cmd 添加到工程中,对程序 进行调试、链接;调试无误后生成 filter.out 程序。在 CCS 软件的File→Load progarm里打开这个.out 文件。 下面将 File→Data→Load 菜单项打开之前 MATLAb 生成的 input.out 文件,如图4~5 所示,将 Address 设 置为 Input,Length 设置为0x00 C8,paga设置为 data, 运行程序。 4.4. 结果分析 滤波器的滤波效果可以采用 CCS 图形显示功能 Open Access 52 FIR 数字滤波器的设计与实现 Figure 5. Image of input signals in time domain 图5. 输入信号的时域和频谱图 Figure 6. Image of output signals in time domain and spectral field 图6. 输出信号的时域和频谱图 来进行观察,图 5是输入信号的时域和频域波形图, 图6是输出信号的时域和频域波形图。将图 5和图 6 的波形进行比较可知,图 5中的输入波形在频域有 3 个峰值,而图 6中频率为 8000 Hz 的信号已经被滤掉, 图6的时域波形也更加的平滑。这表明滤波效果良好, 所设计出的滤波器符合参数要求。滤波结果与输出信 号理论吻合,所以仿真结果清晰明了,完全符合参数 要求。 5. 总结 本文在 Matlab 和CCS 集成开发环境下,完成了 对于 FIR 低通滤波器设计、实现、仿真的全过程。利 用FDAtools工具箱设计了一个 FIR 数字低通滤波器, 非常便利地生成了FIR 滤波器的抽头系数,能够给出 了幅频特性曲线和其他相关参数。依据所设计出的滤 波器的系数,在CCSlink 开发环境下,将设计出的数 字滤波器进行了仿真并在 DSP上进行了实现,并完成 了对信号进行滤波处理的实例。实例表明该滤波器滤 波效果良好,参数合理。本文所采用的方法能完整地 解决 FIR 数字滤波器的设计与实现全部过程,设计方 法简便可行,结果可靠可信,可方便地根据设计要求 随时改变参数,以使滤波器达到最优化,也为数字信 Open Access 53 FIR 数字滤波器的设计与实现 号的滤波处理提供了一种很好的解决方案。 参考文献 (References) 著 (2008) 宁彦卿, 姚金科 Matlab 的FIR数字滤波器设计. 现 的FIR 数字滤波器实现. 硕士论文, , 饶坤 (2008) 基于 Matlab和FPGA的 与设 R数字滤波器设计与实 , F [1] Williams, A.B. and Taylor, F.J., 译. 电子滤波器设计. 科学出版社, 北京. [2] 赵瑞杰 (2012) 二维FIR 数字滤波器优化设计理论与二维优 设士济化 计算法研究. 硕 论文, 山东大学, 南. [3] 王恺, 吕英俊, 亓学广 (2011). 基于 LabVIEW 的语音噪声数 . 字滤波器的设计 工矿自动化 , 8, 26-28 [4] 王兵锋 (2009) FIR 数字滤波器设计与仿真研究. 硕士论文, 哈尔滨理工大学, 哈尔滨. [5] 王春兴, 张彬 (2011) 基于 代电子技术 , 18, 83-85,88. [6] 刘福泉 (2012) 基于FPGA 北京邮电大学, 北京. [7] 孙耀奇, 高火涛, 熊超 IR 数字滤波器设计及实现. 现代电子技术 , 11, 89-92. [8] 赵秀玲 (2007) 基于定点 DSP 的FIR 数字滤波器的研究 计. 硕士论文, 曲阜师范大学, 曲阜. [9] 赵顺珍, 马英 (2009) 基于 DSP 的FI 现. 微计算机信息 , 5, 162-163. Open Access 54 |