五一这几天天气真好,我想出去玩。:(

经典滤波器:FIR滤波器、IIR滤波器、FFT滤波器
现代滤波器:LMS滤波器、RLS滤波器

经典滤波器在信号和噪声没有发生重叠的时候具有比较好的滤波效果。
现代滤波器等自适应滤波器适合用在可能会发生重叠的地方。

FIR滤波器属于稳定滤波器,不用担心加入滤波器会引起控制系统失稳,但是需要相当多的抽头系数(阶数),比起IIR可能要多5-10倍甚至更多,因此在某些情况下会占据大量内存。

IIR滤波器通常根据模拟滤波器来进行设计,不像FIR滤波器,IIR通常还需要调整极点,因此会引入稳定性问题,但是IIR滤波器具有非常高的滤波效率,往往只需要很少的阶数可以达到不错的滤波效果。不过IIR也具有比较严重的相位延迟,在某些场合可能需要注意。IIR还分为I型和II型等,区别在于I型独立性较好,微调参数不易引起系统不稳定,但是抽头数较多。II型合并了不少抽头数,使函数结构更加简单,但是合并之后独立性变差,参数调整可能引起其他参数一起变化,最终导致系统不稳定。

FFT滤波器非常简洁粗暴,将原始信号进行FFT变换,根据自己需要的截至频率,舍去超出的频率的信号,再做IFFT变换即可实现滤波。但是这个还是有点难,需要具有比较系统的数字信号处理的知识,另外计算量相比上面的几个滤波器要大的多。

经典滤波器的滤波过程通常是:你需要先记录原始数据,在电脑上画出数据的频谱图,分析频率成分,判断哪些频率是噪声,根据需要选择合适的截至频率以及期望的幅值衰减,然后拿着这些期望的数据设计滤波器,可以使用Origin也可以使用Matlab的filterDesigner工具箱,它们都会告诉你目标滤波器的理论相应特性。

LMS滤波器和RLS滤波器都可以用在信号和噪声叠加的系统里,LMS需要存储大量历史数据才能滤波,RLS则可以通过递归的方式,实现实时滤波。LMS可否改造成递归形式我暂时不清楚,但是相关的资料非常少。

现代滤波器的滤波原理是利用信号的特征,因此需要知道输入的信号和噪声信号是什么,事实上如果知道输入信号是什么,那也不需要愁滤波的问题,但是我们虽然不知道输入信号是什么,但是噪声信号的种类却非常典型,典型噪声就是白噪声和粉红噪声等,因此可以利用滤波器筛选出噪声信号(即通常滤波器的输出是噪声而不是期望的滤波后信号),然后根据信号叠加的原理,输入信号减噪声信号,即可得到过滤的信号。非常奇妙。

上面叙述非常不严谨,会有不少问题,具体的严格叙述应参考各滤波器的理论知识。

一些不错的参考资料:

IIR数字滤波器的实现

https://zhuanlan.zhihu.com/p/45138629