线性相位滤波器设计
前文提到Matlab中很容易使用firl或fdatool工具实现窗函数法低通滤波器,但这仅仅是一种逼近的方法,还有其他相对复杂但更精确的达到设计指标的方法。
由于FIR的线性相位十分容易获得,所以其在工程应用中十分常见,在图像处理和数据传输系统中的应用更是十分广泛。
我们通过简单的数学分析得到滤波器的零相响应,设计滤波器就变成一个数学问题,其流程如下所示:确定最佳近似值—理想低通滤波器的频率响应—多项式计算—得到滤波器阶数。
非线性相位滤波器设计
FIR滤波器可以直接设计得到精确的线性相位,线性相位的滤波器意味着滤波器的系数是对称的或者反对称的,然而,正是由于这种系数上的对称特性,限制了设计的多样性。对于一个N阶滤波器而言,只有N/2+1个系数是可以自由设计的,另外N/2个系数是根据对称性确定的。

图 带相位限制和没有相位限制的FIR滤波器的关系图
通过维恩图我们可以看到,对滤波器进行分类后,在设计滤波器时我们可以大大减少搜索的范围,A代表有特定的相位要求的线性滤波器,这里面就包含等波纹滤波器、最小二乘滤波器等。B就代表了所有的FIR滤波器,显然B中包含A。
使用firlpnorm函数可以设计非线性相位滤波器,下面给出一个简单的例子。设计指标:
截止频率:0.3π rad/sample
过渡带宽度:0.15π rad/sample
通带最大波纹:0.008
止带最大波纹:0.009
要满足上述参数,设计出来的线性相位滤波器有37阶,使用firlpnorm函数设计出的滤波器只有30阶,实际上这种改善是十分可观的。

br = remez(37,[0 0.3 0.45 1],[1 1 0 0]);
fvtool(br);