引言
本文介绍在ADSP-TS20x TigerSHARC®处理器上执行一个2阶16-bit IIR滤波,利用了直接型II。
滤波器结构
2阶滤波器的结构见图1。可以通过若干个2阶滤波器的级联或并联达到高于2阶的滤波。这样的滤波器的阶数是2的倍数。做一个奇数阶数的滤波器需要一个1阶滤波器和一个或几个2阶滤波器。 列表3中的示例代码没有包括这一点。
图1 2阶直接型II
下面的方程式1描述了这种类型的滤波器结构。
方程式1 描述2阶直接型II IIR第一个分子系数( b0)总设为1,这样需要将输 入x[i]除以b0,b1和b2再除以b0。示例中即如是做法,见下面的列表1。
执行
以流水线方式执行一个小的递归运算是个困难的问题。这个滤波器中W[i]的值取决于W[i-1]。这种前后依赖限制了流水线操作的程度。在这个程序中,所有用来产生w[i] 和 y[i]的乘法运算都在单个周期中计算。然而,把部分结果再送入输入,累加得到最终的结果需要5个周期。这期间乘法器处于空闲状态,结果造成程序只利用了一个计算单元。由于用于管理延迟线(还有内存装取)的操作由ALU完成,因此要在每个指令行中插入多个指令槽也是个问题。上面提到,可以通过并连2阶滤波器得到高阶滤波器。这样就可以同时在两个计算区块计算两个滤波输出,最后累加得到这些结果的和。这2个要素的状态存储在寄存器yR5中,在每次递归运算中,每个新得到的w[i]先被插入状态寄存器,再进行左移位操作。由于延迟线是重叠的,因而可以执行一个如图2所示的上的4个乘法运算。
图2 延迟线和系数的乘法部分结果由Sideways Summation指令得到。如果系数既有分数又有整数,那么这4-way乘法必须分成两个独立的乘法分别运算,同时会降低效率。因为使用了SDAB(短型字数据队列缓存),每次调用就要载入8个16-bit字,而仅需使用第一个字。因为内存带宽不是瓶颈,所以这种对载入字的看似浪费的处理方法却是合适的。
接口
本例中讲述的C类型的滤波器原型见下面的列
附录
附录为示例文件的汇编源代码。
完整文档请百度云盘下载:链接:http://pan.baidu.com/s/1geiopX5 密码:zmla
ADI DSP任何问题,可联系OP的QQ:5516164,邮箱:sale@openadsp.com
|