首页 理论教育 使用C语言实现平滑FIR滤波的技巧和方法

使用C语言实现平滑FIR滤波的技巧和方法

时间:2023-06-23 理论教育 版权反馈
【摘要】:上一节介绍了一个FIR滤波的平滑处理方法。与在前面的例子中讨论的4阶滤波器比起来,大多数的FIR滤波器使用了一个相对高的阶数。在这5个实时步骤中的第4步在平滑FIR滤波章节中又牵涉,在那讨论了所有的“x”矩阵中的元素值在每一个点乘运算后右移。如果你使用Matlab设计你的FIR滤波器,一个解决这个问题的办法是复制和粘贴来自于Matlab窗口的系数到你的C语言程序编辑器屏幕中[12]。你的FIR滤波器就运行在DSK板上。

使用C语言实现平滑FIR滤波的技巧和方法

上一节介绍了一个FIR滤波的平滑处理方法。这个应用比较直观,并且理解起来相对比较容易。它因以下两个主要问题而有所损害。

(1)与在前面的例子中讨论的4阶滤波器比起来,大多数的FIR滤波器使用了一个相对高的阶数。大多数滤波器也需要多一些的数位数值来提高精度以精确地指定这个系数“B”。这些事实使得手工输入系数“B”非常不方便。

(2)在这5个实时步骤中的第4步在平滑FIR滤波章节中又牵涉,在那讨论了所有的“x”矩阵中的元素值在每一个点乘运算后右移。“手工的”移位是一个DSK板上计算资源非常低效率的应用。

这些问题将会在接下来的章节中解决。

关于矩阵“B[N+1]”的声明见下面的描述,第12行要求初始化一个30阶FIR滤波器,这一滤波器设计应用在Matlab中。

你真的想要手工输入这些系数值吗?那么对于一个200阶滤波器或者更高阶滤波器要怎样呢?即使你有时间并且爱好做这项工作,你真的相信你能输入这些系数值而不犯打字错误吗?

如果你使用Matlab设计你的FIR滤波器,一个解决这个问题的办法是复制和粘贴来自于Matlab窗口的系数到你的C语言程序编辑器屏幕中[12]。一个更好的办法牵涉一个Matlab脚本文件,这个文件将生成coeff.h和coeff.c文件以便用于你的CCS工程中。这个脚本文件命名为FIR_DUMP2C.m,并且它能在本书第3章中的Matlab目录(并且也存在于附件E的MatlabExports目录下)找到。与这个文件有关的Matlab帮助如下:(www.xing528.com)

这个帮助输出讨论Matlab的cd函数,在Matlab桌面上部的工具条中,它是一个可选择使用当前的目录区的函数。可选择意味着,你能允许这个文件FIR_dump2c生成两个文件(coeff.h和coeff.c)在当前的目录中。并且,可移动这两个文件到你的CCS工程应用,如Windows Explorer程序。一旦这些文件放在你的CCS工程目录中,你必须添加这些文件到你的工程中。注意,附录A中包含了一个基本的指南来帮助你开始使用CCS。另外,添加这两个文件(coeff.h和coeff.c)到你的工程中,是用单独的一行C代码。

必须加到你的ISRs.c文件中,下面是一个coeff.h文件示例。

程序清单3.5:coeff.h文件示例

在coeff.h文件中,第5行用于定义滤波器的阶数并且第7行允许系数“B”在其他的文件中定义。在这种情况下,这个系数在coeff.c文件中定义。

一旦你熟悉了这个处理过程和一些Matlab滤波器设计技术,FIR滤波器就能设计、使用并且非常容易地进行实时处理。

现在你理解了这段代码。这些文件必须运行的这个应用程序在本书CD中第3章ccs\FIRrevB目录中。继续复制所有的文件到一个独立的目录中。在CCS中打开这个工程并且“编译连接”。一旦编译完成,“加载”程序到DSK板并且单击“运行”按钮。你的FIR滤波器就运行在DSK板上。

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

我要反馈