理论教育 环形缓冲FIR滤波的应用和实现

环形缓冲FIR滤波的应用和实现

时间:2023-06-23 理论教育 版权反馈
【摘要】:图3.16所示为滤波器输入的一个线性存储器模型。图3.17 具有静态存储器位置标号的环形缓存概念图3.18 具有动态存储器位置标号的环形缓存概念,图3.17后的采样时刻为了使用这个环形缓存,一个对于矩阵xLeft的指针必须建立起来。环形缓存FIR滤波器的代码如下,从代码可以了解其算法。程序清单3.6:使用环形缓存的FIR滤波器运行这个应用程序所需的文件在本书CD中第3章的ccs\FIRrevD目录中[13]。一旦编译完成,“加载”程序到DSK板并且单击“运行”按钮。

环形缓冲FIR滤波的应用和实现

如前面论述的一样,所有的矩阵x中的元素值在每一个点乘运算后右移。这是一个关于DSK板的计算资源的非常低效率的使用。需要进行移位是基于假设物理存储器线性的。假如是线性存储器,每一个存储器地址有固有的静态标记,值的移位是绝对需要的。

图3.16所示为滤波器输入的一个线性存储器模型。与期望的一样,在矩阵“x”中存储了“N+1”个元素,存储器的标号为“x[0]、x[-1]、…、x[-N]”,而且还有一个“x[-(N+1)]”。然而,这个地址没有被声明,它是物理存在的。声明以后,任何试图进入矩阵x越界将会导致一些声明被收回并且在随后的计算中使用。

978-7-111-33881-9-Part01-70.jpg

图3.16 具有静态存储器位置标号的线性存储器概念

这样的索引错误也许是灾难性的(比如,一个运行时间的错误),或者是难以分析的(如程序运行但给出了错误的结果)。无论如何,这类索引错误必须花很大代价来避免。

一个另类的线性存储器是环形存储器。如图3.17所示,这个环形存储器的概念覆盖在“x[-N]”的“后面的”位置返回到存储器位置“x[0]”。因为这个环形存储器的目的是存储或者缓存矩阵x。这个常规的概念是指环形缓存。

如果要取代使用静态存储器位置标号,一个指针能被用于指向和插入刚刚到达的最新的采样,“x[0]”进入到包含不再需要的最早的采样值“x[-N]”,这样一个循环缓存就生成了。不需要移位矩阵x的值,因为指针总是指向最新的采样值。如前面所指,缓存中最旧的采样值被最新的采样值取代。这个过程可以无限期继续。插入下一个采样值到缓存中的结果如图3.18所示。

978-7-111-33881-9-Part01-71.jpg

图3.17 具有静态存储器位置标号的环形缓存概念(www.daowen.com)

978-7-111-33881-9-Part01-72.jpg

图3.18 具有动态存储器位置标号的环形缓存概念,图3.17后的采样时刻

为了使用这个环形缓存,一个对于矩阵xLeft的指针必须建立起来。生成这个指针需要的代码如下。

978-7-111-33881-9-Part01-73.jpg

环形缓存FIR滤波器的代码如下,从代码可以了解其算法

程序清单3.6:使用环形缓存的FIR滤波器

978-7-111-33881-9-Part01-74.jpg

运行这个应用程序所需的文件在本书CD中第3章的ccs\FIRrevD目录中[13]。继续复制全部文件到一个独立的目录中。在CCS中打开这个工程并且“编译连接”。一旦编译完成,“加载”程序到DSK板并且单击“运行”按钮。你的FIR滤波器就运行在DSK板上。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈