在工作中,我们最佩服的一群人就是那种只用“纸和笔”就能把问题说清楚甚至解决的人,这需要超强的理论基础以及模型抽象能力——一言不合就上公式,简单、粗暴、有效。

今天,我们也来看看如何通过简单“写写画画”来设计一个FIR滤波器。

滤波器的概念相比大家都很熟悉了,一般按照频率特性可以分为低通、高通、带通及带阻滤波器,这是从输出特性来说的。

图源:知乎

(以下均为来源知乎)

设计常规滤波器的时候,我们一般采用另外一种分类,FIR(Finite Impulse Response)和IIR(Infinite Impulse Response)filter,即有限脉冲响应滤波器和无限脉冲响应滤波器。前面的文章中,我们已经介绍了,理想脉冲信号,其傅里叶变换恒为1,也就时包含了所有频率分量,是一个理想的测试信号,能够激发出所有单位频率分量的响应,因此理想脉冲信号的响应,就代表了系统的特性。

滤波器也可以看成一个系统,如果用一个理想脉冲信号激励,就会有输出,我们把输出个数有限的称为有限脉冲响应滤波器(FIR);输出无限多的称为无限脉冲响应滤波器(IIR)。今天先说一下FIR。

一、Z传递函数的零点和极点代表什么


 域单位圆上不同的点,代表了不同的频率。


 域零极点类似的结论:

  • 规律1:如果在单位圆上有零点,则在零点所对应的频率上幅值响应为零;
  • 规律2:对于不在单位圆上的零点,在单位圆上离零点最近的点对应的频率上幅值响应最小。
  • 规律3:对于在单位圆内部的极点,在单位圆上离极点最近的点对应的频率上幅值响应最大。
  • 规律4:如果极点和零点重合,对系统的频率响应没有影响

在“如何理解离散傅里叶变换及z变换”一文中,我们还介绍了如果一个信号的频谱如下:


也就是说,采样之后的频谱是一个周期函数,我们把 


二、零、极点分布如何影响频率响应

我们先看个简单的例子,熟悉一下套路。


细心的童鞋可能发现了另外一个端倪,你刚分析了零点,可系统明明还有一个极点啊!——没错,为你的细心点赞——我们仔细观察,发现极点正好位于圆心位置,也就是说所有频率段离极点的距离都一样,因此可以认为都没影响。

用freqz函数将系统的频响画出来,就长成下图的样子,这也印证了我们之前的分析,这个系统本质上是一个高通滤波器。



 


 

Ex2: 

很容易看出系统的零极点图如下:

显然,零小值,然后又增加,具体频响如下图,这本质上是一个低通滤波器。



 


 



 



 


,响应应该到达最大值。

可见,零极点的位置决定了系统在不同频率下的响应情况。



 

根均布在单位圆上,如下图:

我们可以画出如下的频率响应,可见其本质是一个多个带阻的滤波器。这种滤波器有啥用呢?我们知道,市电频率是50Hz,其带来的干扰一般就是50Hz其整数倍谐波100Hz、150Hz,200Hz等,选择这种数字滤波器就可以消除类似于市电50Hz带来的噪声影响。

 



 

 

E,与该处的零点重合,零极点如下图所示。

可见,在  处由于零极点重合,并未对系统产生影响,也就是说,如果想消除某零点给系统带来的影响,我们可以再该位置同时也放置一个极点;反之亦然。

观察一下与Ex5的频响的区别,是不是很有意思?



 

三、如何简单粗暴的设计一个FIR滤波器

前面套路差不多说完了——有高通、低通、带阻滤波器,好像还没有带通滤波器,下面我们就拿带通滤波器来练练手。

要求如下:在125Hz时频率响应达最大值,采样频率  。

由于125Hz是采样频率1000Hz的1/8,我们先均匀布置8个零点在单位圆上,这样就能保证有一个零点是位于125Hz处的。



 是未来的数啊,这显然不太合理,那怎么办呢?——还记得Ex1吗?我们可以再圆点处加极点啊,当其他零极点都在单位圆上时不影响频率响应,如下图: