当前位置:   article > 正文

浅谈低通滤波器设计思路及离散序列实现

低通滤波器设计


前言

简单介绍常用低通滤波器的设计思路,以及将低通滤波器使用matlab和c语言实现。抛砖引玉,为刚接触这一领域的同学提供思路,也为后续的进阶学习铺路。

低通滤波器简介

本来默认这篇帖子的阅读者均是学习过信号与系统或类似课程,就不对这一基本概念进行赘述。但为了这篇博客更好读懂,在这里做一些简单的非专业描述,有过基础的同学可跳过。
在信号学科中,无论是什么类型的信号,都可以通过傅里叶变换,将一个任意信号分解成由若干“权重不一”“频率不同”三角函数信号(即正弦余弦信号)的线性组合(即直接叠加在一起)。因此对于一个信号而言,根据不同的三角函数信号组合方式便有了不同的信号特性。如果其信号中包含的小频率(低频)信号权重更大,则其低频的特性明显。同理,根据不同频率信号权重的占比具有不同的信号特性。

举个例子,声音就是一种信号,有人声音低沉,有人声音高亮,这是因为不同的人的声带等发生结构发出的声音的频率特性不同导致的。

原本是介绍低通滤波器,为什么要介绍信号。
信号具有频率特性,是由其组成成分决定的。
滤波器也具有频率特性,是由其结构特征决定的。
不同的滤波器对于不同频率的信号具有不同的接受程度,这种接收程度即对信号的增益。根据这一特点,可以将滤波器分为低通滤波器、带通滤波器、带阻滤波器、高通滤波器等。顾名思义,就是对于低于某一频率的信号段更能接受(增益较大),对于中间某一个范围频率的信号段更能接受,对于高于某一频率的信号段更能接受。
这里面还有好很多专业的描述,例如如何衡量接受程度,这个接受的范围如何量化,滤波器的相位问题以及一些专业名词如截止频率通带频率阻带频率等。

继续举例子,麦克风中就包含滤波器,有些麦克风质量较差,容易录不进去低频的声音,也容易导致高音失真沙哑,都是因为这个麦克风对于高频信号的接受程度低,采集声音时容易将声音信号压缩变质。

低通滤波器设计

以常见的一阶低通滤波器为例,其传递函数形式为
G ( s ) = 1 s ω c + 1 G(s)=\frac{1}{\frac{s}{\omega _c}+1} G(s)=ωcs+11
其中, ω c \omega _c ωc为截止角频率。
设计一个截止频率 f c = 5 h z f_c=5hz fc=5hz的滤波器,则 ω c = 2 π f c \omega _c=2\pi f_c ωc=2πfc,在matlab中实现,并观察其伯德图(幅相曲线)。

wc = 2*pi*5;
%截止频率为5hz
a=[1];
b=[1/wc,1];
H = tf(a,b);
bode(H);
grid;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

伯德图如下
在这里插入图片描述
可以根据自己的需要设计对应的滤波器。

离散序列实现

大多数工程上都需要使用低通滤波器来对数据进行滤波处理,在此记录一下c语言实现的基本思路。
由于计算机系统属于离散系统,因此需要对滤波器进行离散化,得到差分方程。
离散化(Z变换)有三种方法(只给结论,不作讨论)

  • 后向差分
    s = 1 − z − 1 T s=\frac{1-z^{-1}}{T} s=T1z1
  • 前向差分
    s = z − 1 T s=\frac{z-1}{T} s=Tz1
  • 双线性变换
    s = 2 T 1 − z − 1 1 + z − 1 s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}} s=T21+z11z1
    此处以双线性变换为例,对上述滤波器进行离散化,得到
    G ( z ) = G ( s ) ∣ s = 2 T 1 − z − 1 1 + z − 1 = 1 s ω c + 1 ∣ s = 2 T 1 − z − 1 1 + z − 1 = ω c T ( 1 − z − 1 ) 2 + ω c T + ( ω c T − 2 ) z − 1 G(z)=G(s)|_{s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}}=\frac{1}{\frac{s}{\omega _c}+1}|_{s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}}= \frac{\omega _c T(1-z^{-1})}{2+\omega _cT+(\omega _cT-2)z^{-1}} G(z)=G(s)s=T21+z11z1=ωcs+11s=T21+z11z1=2+ωcT+(ωcT2)z1ωcT(1z1)
    设输入输出信号分别为 R , C R,C R,C,则有
    C R = G ( z ) = ω c T ( 1 − z − 1 ) 2 + ω c T + ( ω c T − 2 ) z − 1 \frac{C}{R}=G(z)=\frac{\omega _c T(1-z^{-1})}{2+\omega _cT+(\omega _cT-2)z^{-1}} RC=G(z)=2+ωcT+(ωcT2)z1ωcT(1z1)

    C ( 2 + ω c T + ( ω c T − 2 ) z − 1 ) = R ( ω c T − ω c T z − 1 ) C(2+\omega _cT+(\omega _cT-2)z^{-1})=R(\omega _cT-\omega _cTz^{-1}) C(2+ωcT+(ωcT2)z1)=R(ωcTωcTz1)
    转换成离散序列则为
    ( 2 + ω c T ) c ( k ) + ( ω c T − 2 ) c ( k − 1 ) = ω c T r ( k ) − ω c T r ( k − 1 ) (2+\omega _cT)c(k)+(\omega _cT-2)c(k-1)=\omega _cTr(k)-\omega _cTr(k-1) (2+ωcT)c(k)+(ωcT2)c(k1)=ωcTr(k)ωcTr(k1)
    整理后得到滤波公式
    c ( k ) = ω c T 2 + ω c T r ( k ) − ω c T 2 + ω c T r ( k − 1 ) − ω c T − 2 2 + ω c T c ( k − 1 ) c(k)=\frac{\omega _cT}{2+\omega _cT}r(k)-\frac{\omega _cT}{2+\omega _cT}r(k-1)-\frac{\omega _cT-2}{2+\omega _cT}c(k-1) c(k)=2+ωcTωcTr(k)2+ωcTωcTr(k1)2+ωcTωcT2c(k1)
    到这里就完成了对于低通滤波器离散序列的推导,有兴趣也可以利用另外两种方法算一下结果,观察有什么异同。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/117364?site
推荐阅读