firpm的介绍请见matlab的官方技术文档。
以实例说明一下firpm的用法:
f = [0 0.3 0.4 0.6 0.7 1.0]; a = [0 1.0 0.0 0.0 0.5 0.5]; b = firpm(50,f,a); [h,w] = freqz(b,1,512); plot(f,a,w/pi,abs(h)) legend('Ideal','firpm Design') xlabel 'Radian Frequency (\omega/\pi)', ylabel 'Magnitude'
结果如图:
要点:
1、f、a的长度相同
2、f、a的关系,可以理解为两两一组的分段函数。如 f 0 0.3时,a 0 1.0,则可见幅频响应基本均匀的线性增加到1.0中。
在f 0.7 1.0,a 0.5 0.5时,则可见幅频响应基本保持为0.5
3、在分段函数的间隙,在官方文档里认为是don't care,即为不需要考虑的部分。
4、firpm函数中的第一个参数为 FIR滤波器的长度N-1的值。图中滤波器的阶数为51阶。
5、貌似f里的值要单调递增,不能有重复的值。
6、f的曲线要连贯,如果跳度大容易导致震荡。