最简单的低通滤波器传递函数入手
万事开头难,所以我们先研究这个最简单的滤波器传递函数:
H
(
s
)
=
1
1
+
s
H(s) = \frac{1}{1+s}
H(s)=1+s1
这是一个最简单的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Ω)=1+jΩ1 求|H(j Ω \Omega Ω)|=1/ 2 \sqrt 2 2等价于求 Ω = 1 \Omega=1 Ω=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}
H(s)=Ωc+sΩc
这里
Ω
c
\Omega_c
Ωc=2
π
\pi
π
f
c
f_c
fc, 通过这个函数可以轻松的搞定截止频率的问题,看上去我们的这个巴特沃兹一阶滤波器好像可以用了。
低通变高通
用s=
1
s
\frac{1}{s}
s1 带入上面的公式,就会得到高通滤波器了。
H
(
s
)
=
Ω
c
s
Ω
c
s
+
1
H(s) = \frac{\Omega_c s}{\Omega_c s+1}
H(s)=Ωcs+1Ωcs
可以直观的观察当s=0时, |H(s)|=0;当s=
∞
\infty
∞,|H(s)|=1。那此时的截止频率该怎么算,还是
Ω
c
\Omega_c
Ωc=2
π
\pi
π
f
c
f_c
fc吗?答案当然是否定的了,我们定义高通截止频率
Ω
h
\Omega_h
Ωh=
1
Ω
c
\frac{1}{\Omega_c}
Ωc1,显然,之前在 设计低通的时候确定的截止频率要取倒数了,或者干脆放弃
Ω
c
\Omega_c
Ωc,
1
Ω
h
\frac{1}{\Omega_h}
Ωh1=2
π
\pi
π
f
h
f_h
fh,我们得到
f
h
f_h
fh=
1
2
π
Ω
h
\frac{1}{2\pi\Omega_h}
2πΩh1。
当然,我们可以用另一个直观的表达来重写这个传递函数
H
(
s
)
=
s
s
+
Ω
h
H(s) = \frac{s}{s+\Omega_h}
H(s)=s+Ωhs
可以看出
Ω
h
\Omega_h
Ωh就是截止频率了。
低通变带通
低通变带通要比之前变高通复杂了,替换公式
s
=
s
2
+
Ω
m
2
B
W
s
s = \frac{s^2+\Omega_m ^2}{BWs}
s=BWss2+Ωm2
代入最原始的低通滤波器,我们会得到如下传递函数
H
(
s
)
=
B
W
s
s
2
+
Ω
m
2
+
B
W
s
H(s) = \frac{BWs}{s^2+\Omega_m ^2+BWs}
H(s)=s2+Ωm2+BWsBWs
数学推算,留给读者自己吧,我也没有推出来,以后理清了再补上。
高通变带阻
高通变带阻,一样的替换公式,
s
=
s
2
+
Ω
c
2
B
W
s
s = \frac{s^2+\Omega_c ^2}{BWs}
s=BWss2+Ωc2
带入如下初始的高通滤波器
H
(
s
)
=
s
s
+
1
H(s) = \frac{s}{s+1}
H(s)=s+1s
得到如下传递函数
H
(
s
)
=
s
2
+
Ω
m
2
s
2
+
Ω
m
2
+
B
W
s
H(s) = \frac{s^2+\Omega_m ^2}{s^2+\Omega_m ^2+BWs}
H(s)=s2+Ωm2+BWss2+Ωm2
从模拟到数字,采用双线性变换,简单方便
假设我们需要为外放输出的数字音频作一个高通滤波器,截止频率在400Hz,采样频率48000Hz,第一章我们已经有了一个原型:
H
(
s
)
=
s
s
+
1
H(s) = \frac{s}{s+1}
H(s)=s+1s
数字滤波器的截止频率计算公式:
ω
c
=
2
π
f
f
s
\omega_c =\frac{2\pi f}{f_s}
ωc=fs2πf
数字和模拟频率的转换关系:
Ω
c
=
ω
c
T
\Omega_c = \frac{\omega_c}{T}
Ωc=Tωc
双线性变换一般要求对频率作预畸变处理,采用如下公式:
Ω
c
=
2
T
tan
ω
c
2
\Omega_c = \frac{2}{T}\tan{\frac{\omega_c}{2}}
Ωc=T2tan2ωc
以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=fs2πf=60π≈0.05236
直接变换
Ω
c
=
ω
c
T
≈
0.05236
T
\Omega_c = \frac{\omega_c}{T}\approx \frac{0.05236}{T}
Ωc=Tωc≈T0.05236
预压缩变换
Ω
c
=
2
T
tan
ω
c
2
≈
0.05236
T
\Omega_c = \frac{2}{T}\tan{\frac{\omega_c}{2}} \approx \frac{0.05236}{T}
Ωc=T2tan2ωc≈T0.05236
居然两个结果算得一样,哈哈。做如下代换
s
=
s
Ω
c
{s=\frac{s}{\Omega_c}}
s=Ωcs我们得到如下传递函数
H
(
s
)
=
s
Ω
c
+
s
=
s
T
0.05236
+
s
T
H(s) = \frac{s}{\Omega_c+s}= \frac{sT}{0.05236 +sT}
H(s)=Ωc+ss=0.05236+sTsT
最后用双线性变换公式:
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=T2z+1z−1=T21+z−11−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}}
H1(z)=1.02618−0.97371z−11−z−1
频域分析
利用Octave开源的工具,几乎可以替换Matlab,
H
(
z
)
H(z)
H(z)绘出频域响应曲线
至此,我们一阶的高通滤波器的系数已经得出。
结论
我们用最简单的模拟低通滤波器推导出一个简单的数字高通滤波器,基本满足假设的使用要求。本文主要参考了《Real-Time Digital Signal Processing Fundamentals, Implementations and Applications》,其他内容如有纰漏欢迎回复指正,谢谢。