1.Fdatool工具箱使用方法
滤波器有IIR和FIR两种滤波器设计方式,分别对应以下公式:
从公式上可以看出,FIR的输出只与输入X(n-k)有关,而IIR则不仅与输入X(n-k)有关,还与输出y(n-k))有关,因此IIR是一种递归函数。
IIR滤波器的优点是,对于与FIR类似的滤波器,可以使用较低的阶数或项数. 这意味着实现相同结果所需的计算量更少,使得IIR的计算速度更快. 然而,IIR具有非线性相位和稳定性问题. 这有点像龟兔赛跑的寓言,FIR滤波器就像赛跑中的乌龟—缓慢而稳定,总是能跑完全程. 兔子就像IIR滤波器—非常快,但有时崩溃,并没有完成比赛。
Matlab有滤波器工具箱fdatool,我们可以使用此工具箱设计我们想要的滤波器,进而应用到工程当中去,打开方法是再Matlab的命令行窗口输入fdatool即可。
Matlab中可以选择IIR和FIR两种滤波器设计方法,对于对时延要求严格的系统来讲,需要选择IIR滤波方法。根据滤波的具体要求,可选择低通Lowpass、高通Highpass、带通Bandpass、带阻Bandstop滤波方式。以低通滤波器为例,Fs是系统的采样频率,Fc是截至频率,Filter order是滤波器阶数,阶数越高,计算速度越慢,滤波器的频率下降会更清晰。
下图分别是选取的10阶和2阶的滤波器的幅频曲线,截至频率均为10khz。可以看出10阶的衰减频率更靠后,边界更明确。
选取好响应类型Response Type、设计方法Designed Method、滤波阶数(Filter Order)、采样频率Fs、截至频率Fc,点击Designed Filter按键,即可得到Matlab根据输入的需求设计好的滤波器。可以选择查看滤波器的幅频曲线Magnitude Response、相频曲线Phase Response等。
Fdatool根据我们的需求设计出相应的滤波器,该怎么使用呢,选择Filter Confficients可以得到设计出的滤波器系数,如下图所示:
Numerator对b,Denoinator对应a
根据以上公式可以得到:
a (1)*Y(n) = b(1) * x(n) + b(2)* x(n-1) - a(2)*y(n-1)
带入例子生成的系数b(1) =0.4341, b(2) =0.4341, a(2)=-0.1316
可得:
Y(n) = 0.4341*x(n) + 0.4341*x(n-1)+0.1316*Y(n-1)
转换成C代码则为:
- Y = 0.4341*X + 0.4341*XLast + 0.1316*YLast;
-
- XLast = X;YLast=Y;