首页 理论教育 生成个性化的滤波器算法

生成个性化的滤波器算法

时间:2023-06-23 理论教育 版权反馈
【摘要】:程序清单3.2:适合于实时处理的Matlab FIR滤波器来自于这个FIR滑动平均滤波器的输入输出矢量如下所示。注意,4个输入采样值产生1个输出结果值,如期望的一个3阶滤波器。滤波器的阶数N被声明(21行)尽管实际上Matlab能根据惟一的矢量B的长度确定滤波器的阶数。声明了滤波器的阶数N和FIR滤波器的系数B(22行),提高了我们将要从Matlab代码开发的C/C++代码的可移植性。FIR滤波仅涉及N+1项的点乘。

生成个性化的滤波器算法

前面的例子有助于我们使用基于Matlab的滤波处理,但是这个内置函数filter.m对我们在DSP硬件平台上使用实时FIR滤波处理来说没有什么用处。接下来的Matlab例子更接近于实时数字信号处理需要的应用算法。这个例子的代码将基于当前的输入值和3个以前的输入值来计算出一个单一的输出值。

程序清单3.2:适合于实时处理的Matlab FIR滤波器

来自于这个FIR滑动平均滤波器的输入输出矢量如下所示。注意,4个输入采样值产生1个输出结果值,如期望的一个3阶滤波器。尽管,矢量“x”的显示形式显示了右移这些值为下一采样值留出位置的效果,讨论如下。

就这个例子而言有几条需要论述。(www.xing528.com)

(1)滤波器的阶数N被声明(21行)尽管实际上Matlab能根据惟一的矢量B长度(即N=length(B)-1)确定滤波器的阶数。声明了滤波器的阶数N和FIR滤波器的系数B(22行),提高了我们将要从Matlab代码开发的C/C++代码的可移植性。提高代码可移植性也可以看作是降低对机器的依赖,这通常是一个很受欢迎的代码特征。

(2)x只有4个值被存储(20行)。FIR滤波仅涉及N+1项的点乘。因为在这个例子中N=3,只需要4个x项。

(3)这个例子被称作“平滑”方法,这基于存储的x值在这个矢量x中的移位(30-32行),为下一个采样值留出位置,在x(0)处的值将重写。这个不必要的操作浪费了资源,而这个资源对于另外的操作也许是必需的。因为我们最终的目标是在DSP硬件平台上能高效实时应用。对这个问题更为简洁和高效的解决方法将在下一节中讨论。

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

我要反馈