<?xml version="1.0" encoding="gbk"?> <rss version="2.0"><channel> <title>定阅帖子更新</title> <link>http://www.broadkey.com.cn/XML.ASP</link><description>TEAM Board - 科伟奇电子</description> <copyright>TEAM 2.0.5 Release</copyright><generator>TEAM Board by TEAM5.Cn Studio</generator> <ttl>30</ttl><item><link>http://www.broadkey.com.cn/Thread.asp?tid=206 </link><title>基于DSP&amp;nbsp;Builder的16阶FIR滤波器实现</title><author>alans</author><pubDate>2009/12/1 17:08:15</pubDate><description><![CDATA[<p><strong>0 引 言</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; </strong>FIR数字滤波器在数字信号处理的各种应用中发挥着十分重要的作用，它能够提供理想的线性相位响应，在整个频带上获得常数群时延，从而得到零失真输出信号，同时它可以采用十分简单的算法予以实现。这些优点使FIR滤波器成为设计工程师的首选。在采用VHDL或VerilogHDL等硬件描述语言设计数字滤波器时。由于程序的编写往往不能达到良好优化而使滤波器性能表现一般，而采用调试好的IP Core需要向Al-tera公司购买。在此，采用一种基于DSP Builder的FPGA设计方法，使FIR滤波器设计较为简单易行，并能满足设计要求。</p>
<p><strong>1 FIR滤波器介绍</strong></p>
<p><strong>1．1 FIR滤波器原理</strong></p>
<p>&nbsp;&nbsp;&nbsp; 对于一个FIR滤波器系统，它的冲激响应总是有限长的，最具体的FIR滤波器可用下式表示：<br />
&nbsp;&nbsp;&nbsp; <img border="0" src="/uploadfile/DSP/uploadfile/200911/20091125084424312.jpg" width="216" height="58" alt="" /><br />
式中：r是FIR滤波器的抽头数；x(n-r)是延时，r个抽头的输入信号；b(r)是第r级抽头数(单位脉冲响应)；M是滤波器的阶数；y(n)表示滤波器的输出序列。滤波器就是寻求一个可实现的系统函数H(z)，使其频率响应H(ej&omega;)满足所希望得到的频域信号，也可以用卷积的形式来表示：</p>
<p>&nbsp;&nbsp;&nbsp; y(n)=z(n)*h(n)</p>
<p>典型的直接I型FIR滤波器如图1表示，其输出序列y(n)满足下式：<br />
<img border="0" src="/uploadfile/DSP/uploadfile/200911/20091125084424771.jpg" width="436" height="61" alt="" /></p>
<p align="center"><img border="0" src="/uploadfile/DSP/uploadfile/200911/20091125084427126.jpg" width="316" height="135" alt="" /></p>
<p><strong>1．2 设计要求</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; </strong>数字滤波器实际上是一个采用有限精度算法实现的线性非时变离散系统。它的设计步骤是先根据需要确定其性能指标，设计一个系统函数h(n)逼近所需要的性能指标，滤波器的系数计算可以借助Matlab强大的计算功能和现成滤波器设计工具来完成，最后采用有限的精度算法实现。该系统的设计指标为：设计一个16阶的低通滤波器，选模拟信号的采样频率Fs为5 kHz，要求信号的截止频率Fc=1 kHz，输入序列的位宽为9位(最宽位为符号位)。激励源为幅值为27，频率为800 Hz与1 600 Hz两个信号的混频信号。</p>
<p><strong>2 基于DSP Builder设计FIR滤波器</strong></p>
<p><strong>2．1 DSP Builder介绍</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; </strong>DSP Builder是美国Al-tera公司推出的一个面向DSP开发的系统级设计工具，它在QuartusⅡ设计环境中集成了Matlab和SimuIinkDSP开发软件。以往使用的Matlab工具仅仅作为DSP算法的建模和基于纯数学的仿真，其数学模型无法为硬件DSP应用系统直接产生实用的程序代码，仿真测试的结果也往往是基于数学的算法结果。而以往的FPGA所需要的传统基于硬件描述语言的设计因考虑了FPGA硬件的延时与VHDL递归算法的衔接，以及补码运算和乘积结果截取等问题，所以相当繁琐。而对于DSP Builder而言，它作为Matlab的一个Simulink工具箱，使得用FPGA设计的DSP系统完全可以通过Simulink的图形化界面进行建模、系统级仿真。设计模型可直接向VHDL硬件描述语言转换，并自动调用QuartusⅡ等EDA设计软件，完成综合、网表生成以及器件适配乃至FPGA的配置下载，使得系统描述与硬件实现有机地融合，充分体现了现代电子技术自动化开发的特点与优势。</p>
<p><strong>2．2 FIR滤波器的设计</strong></p>
<p><strong>2．2．1 FIR滤波器参数选取</strong></p>
<p>&nbsp;&nbsp;&nbsp; 采用Matlab提供的滤波器专用设计工具FDAtool仿真设计的滤波器，可满足要求的FIR滤波器幅频特性，由于浮点小数在FPGA中实现得比较困难，且代价太大，因而需要将滤波器的系数和输人数据转化为整数，其中量化后的系统可以在Matlab主窗口中直接转化，对于输入数据，乘以28的增益用Altbus控制位宽转化为整数输入。</p>
<p><strong>2．2．2 FIR滤波器模型的建立</strong></p>
<p>&nbsp;&nbsp;&nbsp; 根据FIR滤波器原理，可以利用FPGA来实现FIR滤波电路。DSP Builder设计流程的第一步是在Matlab／Simulink中进行设计输入的，即在Matlab的Simulink环境中建立一个MDL模型文件，用图形方式调用DSP Builder和其他Simulink库中的图形模块，构成系统级或算法级设计框图，如图2所示。</p>
<p align="left"><img style="width: 508px; height: 459px" border="0" src="/uploadfile/DSP/uploadfile/200911/20091125084428475.jpg" width="508" height="459" alt="" /></p>
<p align="left"><strong>2．2．3 在Simulink中的仿真并生成VHDL代码</strong></p>
<p align="left">&nbsp;&nbsp;&nbsp; 完成模型设计之后，可以先在Simulink中对模型进行仿真，可以通过Simulink中的示波器模块查看各个步骤的中间结果。输入信号采用800 Hz和1 600 Hz，幅值相同的两个正弦信号的叠加。仿真结果如图3所示。从仿真波形可以看出，通过滤波器之后，1 600 Hz的信号能够被很好地滤除。</p>
<p>&nbsp;</p>
<p align="center"><img border="0" src="/uploadfile/DSP/uploadfile/200911/20091125084432582.jpg" width="445" height="281" alt="" /></p>
<p>&nbsp;&nbsp;&nbsp; 双击SignalCompiler可对以上的设计模型进行分析，选择相应的芯片，将以上设计模块图文件&ldquo;翻译&rdquo;成VHDL语言。</p>
<p><strong>2．2．4 Modelsim的RTL仿真</strong></p>
<p>&nbsp;&nbsp;&nbsp; 在Simulink中进行的仿真属于系统验证性质的，是对mdl文件进行的仿真，并没有对生成的VHDL代码进行仿真。事实上，生成VHDL描述的是RTL级的，是针对具体的硬件结构，而在Matlab的Simulink中的模型仿真是算法级的，两者之间有可能存在软件理解上的差异，转化后的VHDL代码实现可能与mdl模型描述的情况不完全相符。这就需要针对生成的RTL级VHDL代码进行功能仿真，仿真结果如图4所示。</p>
<p align="center"><img border="0" src="/uploadfile/DSP/uploadfile/200911/20091125084433477.jpg" width="459" height="239" alt="" /></p>
<p>&nbsp;&nbsp;&nbsp; 仿真结果说明，在Modelsim中仿真结果和Simulink里的仿真结果基本一致，该滤波器有较好的滤波效果。可以看出，输入正弦波经过数字化过程以后，能够在Modelsim中还原出模拟波形．符合设计的要求，可以在QLtortusⅡ的环境下进行硬件设计。</p>
<p><strong>2．2．5 滤波器在FPGA上的实现</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp; </strong>在QuartusⅡ环境中，打开DSP Builder建立的QuartusⅡ项目文件，在QuartusⅡ中再进行一次仿真，由此可以看到符合要求的时序波形。然后指定器件引脚，并进行编译，最后下载到FPGA器件中，就可以对硬件进行测试，加上clok信号和使能信号，用信号发生器产生所要求的两个不同频率的正弦信号，就可以在示波器上看到滤波后的结果。需要设计不同的滤波器电路是仅修改FIR滤波器模型文件就可以实现，这样不仅避免了繁琐的VHDL语言编程，而且便于进行调整。</p>
<p><strong>3 结 语</strong></p>
<p>&nbsp;&nbsp;&nbsp; 在利用FPGA进行数字滤波器开发时，采用DSPBuilder作为设计工具，能加快进度。当然，在实际应用中，受精度、速度和器件选择方面的影响，可能对其转化的VHDL进行进一步的优化。</p>]]></description></item></channel></rss>