一阶IIR数字滤波器的设计

最简单的低通滤波器传递函数入手

万事开头难,所以我们先研究这个最简单的滤波器传递函数:
H ( s ) = 1 1 + s H(s) = \frac{1}{1+s}

这是一个最简单的1阶低通滤波器的传递函数,当s=0时, |H(s)|=1;当s= \infty ,|H(s)|=0。首先我们需要确定这个滤波器的截止频率,分析连续时间域的傅氏变换形式: H ( j Ω ) = 1 1 + j Ω H(j\Omega) = \frac{1}{1+j\Omega} 求|H(j Ω \Omega )|=1/ 2 \sqrt 2 等价于求 Ω = 1 \Omega=1 Ω \Omega =2 π \pi f,所以此滤波器的-3db截止频率是f=1/2 π \pi =0.159 Hz。这个恐怕是没办法满足大部分要求的。

对原始滤波器的改造

H ( s ) = Ω c Ω c + s H(s) = \frac{\Omega_c}{\Omega_c+s}
这里 Ω c \Omega_c =2 π \pi f c f_c , 通过这个函数可以轻松的搞定截止频率的问题,看上去我们的这个巴特沃兹一阶滤波器好像可以用了。

低通变高通

用s= 1 s \frac{1}{s} 带入上面的公式,就会得到高通滤波器了。
H ( s ) = Ω c s Ω c s + 1 H(s) = \frac{\Omega_c s}{\Omega_c s+1}
可以直观的观察当s=0时, |H(s)|=0;当s= \infty ,|H(s)|=1。那此时的截止频率该怎么算,还是 Ω c \Omega_c =2 π \pi f c f_c 吗?答案当然是否定的了,我们定义高通截止频率 Ω h \Omega_h = 1 Ω c \frac{1}{\Omega_c} ,显然,之前在 设计低通的时候确定的截止频率要取倒数了,或者干脆放弃 Ω c \Omega_c 1 Ω h \frac{1}{\Omega_h} =2 π \pi f h f_h ,我们得到 f h f_h = 1 2 π Ω h \frac{1}{2\pi\Omega_h}
当然,我们可以用另一个直观的表达来重写这个传递函数
H ( s ) = s s + Ω h H(s) = \frac{s}{s+\Omega_h}
可以看出 Ω h \Omega_h 就是截止频率了。

低通变带通

低通变带通要比之前变高通复杂了,替换公式
s = s 2 + Ω m 2 B W s = \frac{s^2+\Omega_m ^2}{BW}
代入最原始的低通滤波器,我们会得到如下传递函数
H ( s ) = B W s 2 + Ω m 2 + B W H(s) = \frac{BW}{s^2+\Omega_m ^2+BW}
数学推算,留给读者自己吧,我也没有推出来,以后理清了再补上。

高通变带阻

高通变带阻,一样的替换公式,
s = s 2 + Ω c 2 B W s = \frac{s^2+\Omega_c ^2}{BW}
带入如下初始的高通滤波器
H ( s ) = s s + 1 H(s) = \frac{s}{s+1}
得到如下传递函数
H ( s ) = s 2 + Ω m 2 s 2 + Ω m 2 + B W H(s) = \frac{s^2+\Omega_m ^2}{s^2+\Omega_m ^2+BW}

从模拟到数字,采用双线性变换,简单方便

假设我们需要为外放输出的数字音频作一个高通滤波器,截止频率在400Hz,采样频率48000Hz,第一章我们已经有了一个原型: H ( s ) = s s + 1 H(s) = \frac{s}{s+1}
数字滤波器的截止频率计算公式: ω c = 2 π f f s \omega_c =\frac{2\pi f}{f_s}

数字和模拟频率的转换关系: Ω c = ω c T \Omega_c = \frac{\omega_c}{T}
双线性变换一般要求对频率作预畸变处理,采用如下公式: Ω c = 2 T tan ω c 2 \Omega_c = \frac{2}{T}\tan{\frac{\omega_c}{2}}
以400Hz截止频率和48000Hz采样率来计算: ω c = 2 π f f s = π 60 0.05236 \omega_c =\frac{2\pi f}{f_s}=\frac{\pi}{60}\approx 0.05236
直接变换
Ω c = ω c T 0.05236 T \Omega_c = \frac{\omega_c}{T}\approx \frac{0.05236}{T}
预压缩变换
Ω c = 2 T tan ω c 2 0.05236 T \Omega_c = \frac{2}{T}\tan{\frac{\omega_c}{2}} \approx \frac{0.05236}{T}
居然两个结果算得一样,哈哈。做如下代换 s = s Ω c {s=\frac{s}{\Omega_c}} 我们得到如下传递函数 H ( s ) = s Ω c + s = s T 0.05236 + s T H(s) = \frac{s}{\Omega_c+s}= \frac{sT}{0.05236 +sT}
最后用双线性变换公式: s = 2 T z 1 z + 1 = 2 T 1 z 1 1 + z 1 s = \frac{2}{T} \frac{z-1}{z+1}=\frac{2}{T} \frac{1-z^{-1}}{1+z^{-1}} 把s域映射到z域:
H 1 ( z ) = 1 z 1 1.02618 0.97371 z 1 H_1(z) = \frac{1-z^{-1}}{1.02618-0.97371z^{-1}}

频域分析

利用Octave开源的工具,几乎可以替换Matlab, H ( z ) H(z) 绘出频域响应曲线
H(z)
至此,我们一阶的高通滤波器的系数已经得出。

结论

我们用最简单的模拟低通滤波器推导出一个简单的数字高通滤波器,基本满足假设的使用要求。本文主要参考了《Real-Time Digital Signal Processing Fundamentals, Implementations
and Applications》,其他内容如有纰漏欢迎回复指正,谢谢。

猜你喜欢

转载自blog.csdn.net/golfbears/article/details/86488998