首页 理论教育 FIR梳状滤波器原理及应用

FIR梳状滤波器原理及应用

时间:2023-06-23 理论教育 版权反馈
【摘要】:程序清单10.1:一个Matlab的FIR梳状滤波器的例子该程序位于本书CD中第10章的matlab目录下,该目录下还有本章的其他Matlab程序代码。下面的程序实现如图10.1所示的框图中下面给出的滤波器,其响应如图10.5所示。程序清单10.2:一个接近于C语言的Matlab FIR梳状滤波器的例子第4章演示的IIR滤波器一次仅处理一个采样,这里则不同。可以很方便地使用程序demo_fir_comb2.m读入WAV音频文件,运行梳状滤波器并播放结果。参考表10.1对不同值进行实验,特别是延迟值。

FIR梳状滤波器原理及应用

下面的程序fir_comb1.m利用名为filter的内置函数。

程序清单10.1:一个Matlab的FIR梳状滤波器的例子

978-7-111-33881-9-Part02-25.jpg

该程序位于本书CD中第10章的matlab目录下,该目录下还有本章的其他Matlab程序代码。这里仅给出该程序的关键部分。

下面的程序实现如图10.1所示的框图中下面给出的滤波器,其响应如图10.5所示。输入变量x(输入矢量)、R(所需的时间延迟采样数)和α(前馈系数α)。

fir_comb1.m对整个输入矢量x的所有采样进行处理,但不是实时处理。该程序写起来很简单,但是不能帮助我们得到实时C语言实现。注意,第5、6行保证B系数矢量有正确的长度和值。(www.xing528.com)

下一个程序fir_comb2.m是同样的滤波器,同样也不能实时运算,但是和C语言程序代码更接近,有助于转换到C语言。该程序的输入变量同上。

程序清单10.2:一个接近于C语言的Matlab FIR梳状滤波器的例子

978-7-111-33881-9-Part02-26.jpg

第4章演示的IIR滤波器一次仅处理一个采样,这里则不同。该程序使用“for loop”模拟逐个到来的采样,从而处理整个输入矢量x的所有采样。实时C语言程序不会使用“for loop”,但是“for loop”中的代码可用在中断服务子函数(Interrupt Service Routine,ISR)中逐个处理采样。第13行使用模运算符使索引值oldest“绕回”,从而得到本书第3章所述的循环缓冲器(见图3.17)。第11、14行使用“oldest+1”的原因在于Matlab规定阵列索引值从1开始而不是0。第12行增加索引值,使索引指向缓冲器中最老的采样。如果对此不确信,你可以在纸上画一个短的循环缓冲器并且整个算几遍,在缓冲器中逐个放入采样。现在明白了吧?

可以很方便地使用程序demo_fir_comb2.m读入WAV音频文件,运行梳状滤波器并播放结果。参考表10.1对不同值进行实验,特别是延迟值。

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

我要反馈