
MATLAB是一种实用的工程软件,具有强大的数据分析和处理功能。其滤波器设计工具箱为声音信号的数字滤波提供了非常方便的函数和命令,但MAT-LAB的计算速度较慢。Visual C是Windows平台下的主要应用开发环境之一,可以方便软件开发。所开发的系统具有执行速度快的优点,所以MATLAB和VC的混合编程正好将MATLAB强大的工具箱和VC快速的执行速度结合起来。结合两者的优点,采用MATLAB和VC混合编程的方法,设计了一个实用的数字均衡器。
1、设计原理分析根据数字滤波器冲激响应的时域特性比较,FIR数字滤波器的优点是对有限字长效应不敏感,线性相位严格;但是,要达到同样的指标,计算量要比IIR滤波器大得多。
为了说明这两种滤波器的设计方法,数字滤波器采用FIR方法,均衡器采用IIR方法。
1)用窗函数法设计FIR滤波器
根据过渡带宽和阻带衰减的要求,选择窗函数的类型,估计窗长N(或阶数M=N-1)。可以根据最小阻带衰减As独立选择窗函数类型,因为窗长n对最小阻带衰减As没有影响。在确定窗函数类型后,可以根据过渡带宽小于给定指标来确定所建议的窗函数的窗长n,将待计算滤波器的过渡带宽设为w,它与窗长n近似成反比,在确定窗函数类型后,也就确定了它的计算公式。但这些公式都是近似的,得到的窗口长度要在计算中逐步修正。原则是在阻带衰减满足要求的情况下,尽量选择较小的n。n和窗函数类型确定后,在MATLAB中调用窗函数就可以计算出窗函数wd (n)。
根据待求滤波器的理想频率响应,求理想单位冲激响应hd(n)。如果已知待求滤波器的频率应为Hd,则理想单位脉冲响应可通过以下傅里叶逆变换公式得到:
2)用双线性变换法设计IIR滤波器。
等式(2)和(3)是S平面和Z平面之间的单值映射关系。这种变换是两个线性函数的比值,所以称为双线性变换。
IIR数字滤波器的设计步骤如下:
(1)按照一定的规则,将数字滤波器的技术指标转换为模拟低通滤波器的技术指标。
(2)根据转换后的技术规格设计一个模拟低通滤波器G(s)(G(s)是低通滤波器的传递函数)。
(3) G(s)按照一定的规则转换成H(z)(H(z)是数字滤波器的传递函数)。如果所设计的数字滤波器是低通的,则可以完成上述过程。如果设计的数字滤波器是高通、带通或带阻滤波器,则需要以下步骤:
将高通、带通或带阻数字滤波器的技术指标转换成低通模拟滤波器的技术指标,然后设计低通G(s),再将G(s)转换成H(z)。
Matlab信号工具箱提供了几个直接设计IIR数字滤波器的函数,直接调用这些函数就可以方便地进行设计。这里选择巴特沃兹法、切比雪夫、切比雪夫和椭圆法进行比较。
2、软件设计在划分模块时应遵循以下规则:改进软件结构以提高模块独立性;模块大小要适中;深度、宽度、扇出和扇入要合适;模块的范围应该在控制域内;努力降低模块接口的复杂度;设计一个单入口单出口的模块;该函数应该是可预测的。根据上述启发式规则,软件被划分为如图1所示的模块。
MATLAB提供的GUIDE工具是可视化编程工具,使得软件的界面设计像VB一样方便。为了实现预期的功能,设计如图2所示的界面。
3、VC和MATLAB混合编程
MATLAB中提供了滤波函数,但这里我们用VC来实现滤波函数,以提高运算速度。具体步骤如下:(1)在1)MATLAB中运行mex -setup,选择VC作为编译器;(2)在VC中创建新的DLL项目,并添加以下代码:
(3)保存为qfilter.cpp,放在MATLAB的工作目录下,在MAT-LAB中运行mexqfilter.cpp,生成qfilter.cpp。这样只需要调用qfilter函数就可以实现过滤。
4、错误分析理想滤波器不存在。在实际中,它只能尽可能地接近理想滤波器,所以它只能尽可能地接近理想滤波器。对于IIR数字滤波器,阶数越高,滤波器精度越高,即越接近理想情况,但计算机运行速度越慢,所以实际中要权衡运行速度和滤波器精度。另外,计算机本身也有误差(如截断误差),但与滤波器的设计误差相比,可以忽略不计。因此,提高精度的关键在于提高滤波器的设计精度。
此外,每个带通滤波器之间的过渡也存在设计误差。理论上带通滤波器之间的滤波要满足每个滤波器的频响曲线叠加成一条值为1的水平线,但实际上只能尽量接近理论情况。









