说明:本文并非全部原创,是在网上学习各位前辈的文章后写的学习总结,文中有些图片和代码使用了网上的文章,若侵比删。所参考文章的链接已在文中给出!
先导知识
什么是滤波器?
滤波器就是滤掉干扰信息(噪声),保留有用信息。
下面分别是按滤掉噪声频率的几类滤波器的幅频曲线图:
设计常规滤波器的时候,我们一般采用另外一种分类,FIR(Finite Impulse Response)和IIR(Infinite Impulse Response)filter,即有限脉冲响应滤波器和无限脉冲响应滤波器。
理想脉冲信号,其傅里叶变换恒为1,也就时包含了所有频率分量,是一个理想的测试信号,能够激发出所有单位频率分量的响应,因此理想脉冲信号的响应,就代表了系统的特性。
滤波器也可以看成一个系统,如果用一个理想脉冲信号激励,就会有输出,我们把输出个数有限的称为有限脉冲响应滤波器(FIR);输出无限多的称为无限脉冲响应滤波器(IIR)。
滤波器分为模拟滤波器和数字滤波器。模拟滤波器的理论和设计方法已经非常成熟,可以通过模拟滤波器间接设计数字滤波器。
如何设计滤波器?
就如第一幅图一样,我们可以通过其幅频曲线得到其截止频率、通带情况。那么怎么获得幅频曲线图呢?那就是通过系统函数。
H ( j ω ) = ∣ H ( j ω ) ∣ e θ ( ω ) H(j\omega)=\left|H(j\omega)\right|e^{\theta(\omega)} H(jω)=∣H(jω)∣eθ(ω)
∣ H ( j ω ) ∣ |H(j\omega)| ∣H(jω)∣就是其幅频特性曲线, θ ( ω ) \theta(\omega) θ(ω)就是其相频特性曲线。
如何得到系统函数:
由系统的特性分析得到微分方程或差分方程,再拉普拉斯变换或z变换。
FT、LT、ZT之间的(映射)关系
LT是对连续FT的拓展,即从频率到复频域, j ω ⟹ s = δ + j ω j{\omega}{\Longrightarrow}s={\delta}+j{\omega} jω⟹s=δ+jω。
ZT是对离散FT的拓展,也可以看是对LT的再映射,即 z = e s T s z=e^{sT_s} z=esTs。
如何从DTFT到ZT,请看。简单说一下:
D F T : X ( j ω ) = ∑ n = − ∞ + ∞ x ( n ) e j ω n T s DFT:X(j\omega)=\sum_{n=-\infin}^{+\infin}x(n)e^{j{\omega}nT_s} DFT:X(jω)=n=−∞∑+∞x(n)ejωnTs
同FT到LT一样,为了满足绝对可和条件,乘上一个衰减因子 e δ t = e δ n T s e^{
{\delta}t}=e^{
{\delta}nT_s} eδt=eδnTs(离散化)。
X ( j ω ) = ∑ n = − ∞ + ∞ x ( n ) e j ω n T s e δ n T s = ∑ n = − ∞ + ∞ x ( n ) e − ( δ + j ω ) n T s X(j\omega)=\sum_{n=-\infin}^{+\infin}x(n)e^{j{\omega}nT_s}e^{
{\delta}nT_s}\\ =\sum_{n=-\infin}^{+\infin}x(n)e^{-({\delta}+j{\omega})nT_s} X(jω)=n=−∞∑+∞x(n)ejωnTseδnTs=n=−∞∑+∞x(n)e−(δ+jω)nTs
令 z = e ( δ + j ω ) T s z=e^{({\delta}+j{\omega})T_s} z=e(δ+jω)Ts,得到DFT的式子为:
X ( j ω ) = ∑ n = − ∞ + ∞ x ( n ) z − n X(j{\omega})=\sum_{n=-\infin}^{+\infin}x(n)z^{-n} X(jω)=n=−∞∑+∞x(n)z−n
上式就是Z变换了。
如何理解上面的规律?
- 需要明白幅频曲线自变量是频率 ω \omega ω,而不是 s = δ + j ω s={\delta}+j{\omega} s=δ+jω。
- H ( j ω ) = ∣ H ( j ω ) ∣ e θ ( j ω ) = N u m ( j ω ) / D e n ( j ω ) H(j{\omega})=|H(j{\omega})|e^{ {\theta}(j{\omega})}=Num(j{\omega})/Den(j{\omega}) H(jω)=∣H(jω)∣eθ(jω)=Num(jω)/Den(jω),其中的 ∣ H ( j ω ) ∣ |H(j\omega)| ∣H(jω)∣就是幅频曲线、 θ ( j ω ) \theta{(j\omega)} θ(jω)就是相频响应。
- s平面的虚轴(频率轴)被ZT映射到z平面的单位圆上。
因此,分析幅频响应时,频率轴在单位圆上,这也是为什么上面提到的规律都在说单位圆上的点怎么怎么样。
- 对于规律一,因为零点就在单位圆上,因此当频率为零点对应的频率时, ∣ H ( j ω ) ∣ = 0 |H(j\omega)|=0 ∣H(jω)∣=0,因此幅值响应为零。
- 对于规律二,不在单位圆上的零点,单位圆上越靠近零点的频率,其 ∣ H ( j ω ) ∣ |H(j\omega)| ∣H(jω)∣也就越小。
- 对于规律三,因为是极点,极点为0时即系统函数的分母为0, ∣ H ( j ω ) ∣ |H(j\omega)| ∣H(jω)∣很大。(至于为什么要指定是单位圆内部的极点呢?我猜是单位圆外部的极点使系统不稳定,因此不必讨论)
零、极点分布如何影响频率响应
H ( z ) = A ∏ r = 1 M ( 1 − c r z − 1 ) ∏ r = 1 N ( 1 − d r z − 1 ) ∣ H ( e j ω ) ∣ = ∣ A ∣ ∏ r = 1 M ∣ z r ∣ ∏ r = 1 N ∣ P r ∣ ϕ ( ω ) = ω ( N − M ) + ∑ r = 1 N α r − ∑ r = 1 M β r H(z)=A\frac{\prod_{r=1}^M(1-c_rz^{-1})}{\prod_{r=1}^{N}(1-d_rz^{-1})} \\ |H(e^{j\omega})|=|A|\frac{\prod_{r=1}^M|z_r|}{\prod_{r=1}^N{|P_r|}} \\ \phi(\omega)=\omega(N-M)+\sum_{r=1}^{N}\alpha_r-\sum_{r=1}^{M}\beta_r H(z)=A∏r=1N(1−drz−1)∏r=1M(1−crz−1)∣H(ejω)∣=∣A∣∏r=1N∣Pr∣∏r=1M∣zr∣ϕ(ω)=ω(N−M)+r=1∑Nαr−r=1∑Mβr
即幅频响应等于所有的零点到 ω \omega ω的模长的乘积除以所有的极点到 ω \omega ω的模长的乘积;相频响应等于所有的零点与 ω \omega ω形成的夹角之和减去所有的极点与 ω \omega ω形成的夹角之和。
从均值滤波看滤波器及系统函数
时域表达式
y ( n ) = 1 N ∑ k = 0 N x ( n − k ) = 1 N [ x ( n ) + . . . + x ( n − N + 1 ) ] y(n)=\frac{1}{N}\sum_{k=0}^Nx(n-k)\\=\frac{1}{N}\left[x(n)+...+x(n-N+1)\right] y(n)=N1k=0∑Nx(n−k)=N1[x(n)+...+x(n−N+1)]
x ( n ) x(n) x(n)是当前测量值, x ( n − N + 1 ) x(n-N+1) x(n−N+1)是前第N-1次测量值。
频率表达式
对均值滤波的时域表达式进行Z变换得:
H ( z ) = 1 N ∑ k = 0 N z − N = 1 N 1 − z − N 1 − z − 1 H(z)=\frac{1}{N}\sum_{k=0}^{N}z^{-N}\\=\frac{1}{N}\frac{1-z^{-N}}{1-z^{-1}} H(z)=N1k=0∑Nz−N=N11−z−11−z−N
令 z = e j ω z=e^{j\omega} z=ejω得:
H ( e j ω ) = 1 N 1 − e − j ω N 1 − e − j ω = 1 N e − j ω ( N − 1 ) 2 sin ( ω N ) / 2 sin ( ω ) / 2 H(e^{j\omega})=\frac{1}{N}\frac{1-e^{-j{\omega}N}}{1-e^{-j{\omega}}}\\=\frac{1}{N}e^{-j\frac{\omega(N-1)}{2}}\frac{\sin({\omega}N)/2}{\sin(\omega)/2} H(ejω)=N11−e−jω1−e−jωN=N1e−j2ω(N−1)sin(ω)/2sin(ωN)/2
零极点分布图
H ( z ) = 1 N 1 − z − N 1 − z − 1 = 1 N z N − 1 z N − z N − 1 H(z)=\frac{1}{N}\frac{1-z^{-N}}{1-z^{-1}}\\=\frac{1}{N}\frac{z^{N}-1}{z^{N}-z^{N-1}} H(z)=N11−z−11−z−N=N1zN−zN−1zN−1
matlab代码:
NN = [3 6 12];
for i = 1:3
N = NN(i);
B = ones(1, N);
B = [B -1];
A = zeros(1, N-1);
A = [1 -1 A];
subplot(3, 1, i);
zplane(B, A);
xlabel(['N=', num2str(N)]);
end
频率响应分析
python代码分析均值滤波频率响应,采样率为200Hz,阶数为7。
from scipy.optimize import newton
from scipy.signal import freqz, dimpulse, dstep
from math import sin, cos, sqrt, pi
import numpy as np
import matplotlib.pyplot as plt
import sys
#函数用于计算移动平均滤波器的截止频率
def get_filter_cutoff(N, **kwargs):
func = lambda w: sin(N*w/2) - N/sqrt(2) * sin(w/2)
deriv = lambda w: cos(N*w/2) * N/2 - N/sqrt(2) * cos(w/2) / 2
omega_0 = pi/N # Starting condition: halfway the first period of sin
return newton(func, omega_0, deriv, **kwargs)
#设置采样率
sample_rate = 200 #Hz
N = 7
# 计算截止频率
w_c = get_filter_cutoff(N)
cutoff_freq = w_c * sample_rate / (2 * pi)
# 滤波器参数
b = np.ones(N)
a = np.array([N] + [0]*(N-1))
#频率响应
w, h = freqz(b, a, worN=4096)
#转为频率
w *= sample_rate / (2 * pi)
#绘制波特图
plt.subplot(2, 1, 1)
plt.suptitle("Bode")
#转换为分贝
plt.plot(w, 20 * np.log10(abs(h)))
plt.ylabel('Magnitude [dB]')
plt.xlim(0, sample_rate / 2)
plt.ylim(-60, 10)
plt.axvline(cutoff_freq, color='red')
plt.axhline(-3.01, linewidth=0.8, color='black', linestyle=':')
# 相频响应
plt.subplot(2, 1, 2)
plt.plot(w, 180 * np.angle(h) / pi)
plt.xlabel('Frequency [Hz]')
plt.ylabel('Phase [°]')
plt.xlim(0, sample_rate / 2)
plt.ylim(-180, 90)
plt.yticks([-180, -135, -90, -45, 0, 45, 90])
plt.axvline(cutoff_freq, color='red')
plt.show()
改变滤波器阶数,观察幅频响应(N=3,7,18):
可以看出,均值滤波器:
- 是一个低通滤波器
- 随着滤波器得阶数(长度)增加(求和的项越来越多),截止频率变小,通带变窄。滤波器的响应变慢,延迟变大。
- 是FIR滤波器
FIR和IIR滤波器的比较
稳定和线性相位特性是FIR滤波器最突出的优点,但阶数较高;IIR滤波器相位非线性,但阶数低。
性能上
- IIR滤波器系统函数的极点可位于单位圆内的任何地方,因此零点和极点相结合,可用较低的阶数获得较高的选择性,所用的存储单元少,计算量小,经济效应高。但是这个高效率是以相位的非线性为代价的。
- 相反,FIR滤波器可以得到严格的线性相位,然而由于FIR滤波器系统函数的极点固定在原点,因而只能用较高的阶数达到较高的选择性。
- 对于同样的滤波器幅频特性指标,FIR滤波器所要求的阶数一般比IIR滤波器高5~10倍,信号延时也比较大。
结构上
- IIR滤波器必须采用递归结构,极点位置必须在单位圆内,否则系统不稳定。另外,这种结构中由于运算过程中对序列的舍入处理,会引起寄生振荡。
- FIR滤波器主要采用非递归结构,有限精度运算中不存在稳定性问题,运算误差引起的输出信号噪声功率也较小。此外,FIR滤波器可以采用FFT算法实现,速度大大提高。
设计工具上
- IIR滤波器可以借助成熟的模拟滤波器设计理论及成果。
- FIR滤波器计算带通和阻带衰减等仍无显示表达式,边界频率也不易精确控制。
效果上
- IIR滤波器虽然设计简单,但主要是用于设计具有片段常数特性的选频型滤波器,比如低通、高通、带通及带阻等,往往脱离不了几种典型模拟滤波器的频响特性的约束。
- 而FIR滤波器要灵活得多,易于适应某些特殊的应用,比如只想滤掉特定的不连续的频率。
从上面可以看出,IIR和FIR滤波器各有所长,在实际运用当中应全面考虑再加以选择。比如,对于相位要求不高的场合,如语音通讯等可以选用IIR滤波器;对于图象信号处理等相位要求高的场合应采用FIR滤波器。
FIR滤波器的设计
基本设计思路
FIR滤波器的设计方法和IIR滤波器的设计方法有很大差别。FIR滤波器的设计任务是选择有限长度的 h ( n ) h(n) h(n),使频率响应函数 H ( e j ω ) H(e^{j\omega}) H(ejω)满足技术指标要求。
下面介绍几种设计FIR滤波器的方法:窗函数法、频率采样法、响应最优法(切比雪夫等波纹逼近法、最小二乘法)。
窗函数法
FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄漏。为了将这个泄漏误差减少到最小程度(注意我说是的减少,而不是消除),我们需要使用加权函数,也叫窗函数。加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。
如下图所示:
- 若周期截断,则FFT频谱为单一谱线;
- 若为非周期截断,则频谱出现拖尾,如图中部所示,可以看出泄漏很严重。
为了减少泄漏,给信号施加一个窗函数(如图中上部红色曲线所示),原始截断后的信号与这个窗函数相乘之后得到的信号为上面右侧的信号。可以看出,此时,信号的起始时刻和结束时刻幅值都为0,也就是说在这个时间长度内,信号为周期信号,但是只有一个周期。对这个信号做FFT分析,得到的频谱如下部右侧所示。相比较之前未加窗的频谱,可以看出,泄漏已明显改善,但并没有完全消除。因此,窗函数只能减少泄漏,不能消除泄漏。
基于窗函数法设计FIR滤波器,其基本步骤如下:
- 确定频域的响应函数 H d ( e j ω ) H_d(e^{j\omega}) Hd(ejω),低通、高通、带通或者其它;
- 确定频域的响应函数 H d ( e j ω ) H_d(e^{j\omega}) Hd(ejω)的傅里叶逆变换,找到连续脉冲响应函数 h d ( t ) h_d(t) hd(t);
- 对连续脉冲响应函数 h d ( t ) h_d(t) hd(t)按照一定的采样频率进行采样,获得离散信号 h d ( m ) h_d(m) hd(m);
- 选择合适的窗函数,对离散信号 h d ( m ) h_d(m) hd(m)加窗,获得有限长度的脉冲响应 h ( m ) h(m) h(m)。
MATLAB中基于窗函数法设计滤波器:
% h = fir1(n, Wn, ftype, window);
% n表示滤波器阶数;Wn表示归一化后的滤波器截止频率,可表示成[fl fh]的形式;ftype表示滤波器类型;window表示窗函数类型。
% 这是一个24阶的带通滤波器,归一化截止频率为[0.2 0.4]
h = fir1(24, [0.2 0.4]);
freqz(h, 1, 512);
频率采样法
设希望逼近的滤波器的频响函数用 H d ( e j ω ) H_d(e^{j\omega}) Hd(ejω)表示,对 H d ( e j ω ) H_d(e^{j\omega}) Hd(ejω)在 ω = 0 \omega=0 ω=0到 2 π 2\pi 2π之间等间隔采样N点,得到 H d ( k ) H_d(k) Hd(k):
H d ( k ) = H d ( e j ω ) ∣ ω = 2 π N k k = 0 , 1 , . . . , N − 1 H_d(k)=H_d(e^{j\omega})|_{\omega=\frac{2\pi}{N}k}{\quad}k=0,1,...,N-1 Hd(k)=Hd(ejω)∣ω=N2πkk=0,1,...,N−1
再对 H d ( k ) H_d(k) Hd(k)进行N点IDFT,得到 h ( n ) h(n) h(n):
h ( n ) = I D F T [ H d ( k ) ] = 1 N ∑ k = 0 N − 1 H d ( k ) W N − k n n = 0 , 1 , 2 , . . . , N − 1 h(n)=IDFT[H_d(k)]=\frac{1}{N}\sum_{k=0}^{N-1}H_d(k)W_N^{-kn}{\quad}n=0,1,2,...,N-1 h(n)=IDFT[Hd(k)]=N1k=0∑N−1Hd(k)WN−knn=0,1,2,...,N−1
将 h ( n ) h(n) h(n)作为所设计的FIR滤波器的单位冲激响应,其系统函数 H ( z ) H(z) H(z)为:
H ( z ) = ∑ n = 0 N − 1 h ( n ) z − n H(z)=\sum_{n=0}^{N-1}h(n)z^{-n} H(z)=n=0∑N−1h(n)z−n
或者根据频率域采样理论,利用频率域采样值 H d ( k ) H_d(k) Hd(k)恢复原信号的Z变换,得到 H ( z ) H(z) H(z)的内插表示形式为:
H ( z ) = 1 − z − 1 N ∑ k = 0 N − 1 H d ( k ) 1 − W N − k z − 1 H(z)=\frac{1-z^{-1}}{N}\sum_{k=0}^{N-1}\frac{H_d(k)}{1-W_N^{-k}z^{-1}} H(z)=N1−z−1k=0∑N−11−WN−kz−1Hd(k)
上述两种方法如下:
MATLAB中使用频率采样法设计FIR滤波器:
% h = fir2(n, f, m);
% n表示阶数;f表示分立点频率矢量;m表示分立点对应的幅值响应矢量
f = [0 0.7 0.7 1];
m = [10 1 0 0];
h = fir2(24, f, m);
freqz(h, 1);
响应最优法
主要思路就是找到一组脉冲响应,让它的频域响应 H ( e j ω ) H(e^{j\omega}) H(ejω)与期望的滤波器的频域响应 H d ( e j ω ) H_d(e^{j\omega}) Hd(ejω)尽可能一致。主要通过两种方法来实现,一个是最小二乘法、另一个是(切比雪夫)等波纹逼近法。
最小二乘法
与频率采样法近似,期望的频率响应用一组分立的点 ( f i , A ( f i ) ) i = 1 , 2 , . . . , N (f_i,\ A(f_i)){\quad}i=1,2,...,N (fi, A(fi))i=1,2,...,N来表示,优化目标如下:
∑ i = 1 N W i [ H ( f i ) − H d ( f i ) ] 2 → m i n \sum_{i=1}^{N}W_i\left[H(f_i)-H_d(f_i)\right]^2{\rightarrow}min i=1∑NWi[H(fi)−Hd(fi)]2→min
其中 W i W_i Wi为不同频率下的权重。
MATLAB指令为:
% h = firls(n, f, m);
% n为滤波器阶数,f表示分立点的矢量,m表示分立点对应的幅值响应矢量。
% 下面以低通滤波器为例:
f = [0 0.3 0.3 1];
m = [10 1 0 0];
h = firls(24, f, m);
freqz(h, 1)
切比雪夫等波纹最佳逼近法
书上的:
用 H d ( ω ) H_d(\omega) Hd(ω)表示希望逼近的幅度特性函数,要求设计线性相位FIR数字滤波器时, H d ( ω ) H_d(\omega) Hd(ω)必须满足线性相位约束条件。用 H g ( ω ) H_g(\omega) Hg(ω)表示实际设计的滤波器幅度特性函数,定义加权误差函数 E ( ω ) E(\omega) E(ω)为:
E ( ω ) = W ( ω ) [ H d ( ω ) − H g ( ω ) ] m a x E ( ω ) → m i n E(\omega)=W(\omega)[H_d(\omega)-H_g(\omega)]\\ max\ E(\omega){\rightarrow}min E(ω)=W(ω)[Hd(ω)−Hg(ω)]max E(ω)→min
另外:
与最小二乘法不同(方差最小),切比雪夫法采用的方案是最大误差最小,即:
max ∣ W i ( H ( f i ) − H d ( f i ) ) ∣ → min \max{\left|W_i(H(f_i)-H_d(f_i))\right|}{\rightarrow}\min max∣Wi(H(fi)−Hd(fi))∣→min
MATLAB指令:
h = firpm(n, f, m);
% 对于切比雪夫法,频率响应不能直接从1降到0
% f = [0 0.1 0.1 1]这样是不行的
f = [0 0.1 0.101 1];
m = [100 1 0 0];
h = firpm(24, f, m);
freqz(h, 1)
IIR滤波器设计
基本设计思路
利用模拟滤波器成熟的理论及其设计方法来设计IIR数字低通数字滤波器是常用的方法。设计过程是:
- 按照数字滤波器技术指标要求设计一个过渡模拟低通滤波器 H a ( s ) H_a(s) Ha(s);
- 再按照一定的转换关系将 H a ( s ) H_a(s) Ha(s)转换成数字低通滤波器的系统函数 H ( z ) H(z) H(z);
所以可见,设计的关键就是找到某种转换关系,将s平面上的 H a ( s ) H_a(s) Ha(s)转换到z平面上的 H ( z ) H(z) H(z)。这种转换关系需要满足一定的条件:
- 因果稳定的模拟滤波器转换成数字滤波器后,仍是因果稳定的;
- s平面的左半平面映射到z平面的单位圆内部;
- 数字滤波器的频率响应应模仿模拟滤波器的频响特性,s平面的虚轴映射为z平面的单位圆,相应的频率之间呈线性关系。
基于以上要求,目前常用的转换方法有**[脉冲响应不变法](# 脉冲响应不变法)、双线性变换法**。脉冲响应不变法是线性变换,而双线性变换法是非线性变换。
注:我们一般是设计相应的低通滤波器,然后根据频率变换公式,得到相应的高通、带通、带阻滤波器。
模拟滤波器的设计
模拟滤波器的技术指标给定后,需要设计一个系统函数 H a ( s ) H_a(s) Ha(s),希望其幅度平方函数满足给定的指标。一般滤波器的单位冲激响应为实函数,因此:
∣ H a ( j Ω ) ∣ 2 = H a ( s ) H a ( − s ) ∣ s = j Ω = H a ( j Ω ) H a ∗ ( j Ω ) |H_a(j\Omega)|^2=H_a(s)H_a(-s)|_{s=j\Omega}=H_a(j\Omega)H_a^*(j\Omega) ∣Ha(jΩ)∣2=Ha(s)Ha(−s)∣s=jΩ=Ha(jΩ)Ha∗(jΩ)
如果能由 α p \alpha_p αp, Ω p \Omega_p Ωp, α s \alpha_s αs, Ω s \Omega_s Ωs求出 ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2,那么就可以求出 H a ( s ) H a ( − s ) H_a(s)H_a(-s) Ha(s)Ha(−s),由此可以求出需要的 H a ( s ) H_a(s) Ha(s),其极点必须落在s平面的左半平面;相应地, H a ( − s ) H_a(-s) Ha(−s)的极点就应落在s平面的右半平面,这就是模拟低通滤波器的逼近方法。
巴特沃斯滤波器
幅度平方函数 ∣ H a ( j Ω ) ∣ 2 |H_a(j\Omega)|^2 ∣Ha(jΩ)∣2为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ( Ω Ω c ) 2 N = 1 1 + ( s j Ω c ) 2 N ∣ s = j Ω |H_a(j\Omega)|^2=\frac{1}{1+(\frac{\Omega}{\Omega_c})^{2N}}\\ =\frac{1}{1+(\frac{s}{j\Omega_c})^{2N}}|_{s=j\Omega} ∣Ha(jΩ)∣2=1+(ΩcΩ)2N1=1+(jΩcs)2N1∣s=jΩ
N为滤波器阶数,该滤波器是一个低通滤波器,原因如下:
- Ω = 0 \Omega=0 Ω=0时, ∣ H a ( j Ω ) ∣ 2 = 1 |H_a(j\Omega)|^2=1 ∣Ha(jΩ)∣2=1;
- Ω = Ω c \Omega=\Omega_c Ω=Ωc时, ∣ H a ( j Ω ) ∣ 2 = 1 2 |H_a(j\Omega)|^2=\frac{1}{\sqrt{2}} ∣Ha(jΩ)∣2=21,即3dB截至频率;
- Ω > > Ω c \Omega>>\Omega_c Ω>>Ωc时,$|H_a(j\Omega)|^2=$0;
该系统函数有2N个极点,极点为:
s k = ( − 1 ) 1 2 N ( j Ω c ) = Ω c e j π ( 1 2 + 2 k + 1 2 N ) , k = 0 , 1 , . . . , 2 N − 1 s_k=(-1)^{\frac{1}{2N}}(j\Omega_c)={\Omega_c}e^{j{\pi}(\frac{1}{2}+\frac{2k+1}{2N})},k=0,1,...,2N-1 sk=(−1)2N1(jΩc)=Ωcejπ(21+2N2k+1),k=0,1,...,2N−1
这2N个极点等间隔分布在半径为 Ω c \Omega_c Ωc的圆上(此圆称为巴特沃斯圆),间隔是 π / N \pi/N π/Nrad。
N = 3;
k = 0:(2*N-1);
k = k';
Z = [];
P = exp(1i*pi*(0.5 + (2*k+1) ./ (2*N)));
% 零极点
zplane(Z, P);
title('零极点分布图');
取左半平面的N个极点构成系统函数 H a ( s ) H_a(s) Ha(s),并用3dB截止频率 Ω c \Omega_c Ωc归一化得:
G a ( s Ω c ) = 1 ∏ k = 0 N − 1 ( s Ω c − s k Ω c ) = 1 ∏ k = 0 N − 1 ( p − p k ) ( 1 ) G_a(\frac{s}{\Omega_c})=\frac{1}{\prod_{k=0}^{N-1}(\frac{s}{\Omega_c}-\frac{s_k}{\Omega_c})}\\ ={\color{blue}\frac{1}{\prod_{k=0}^{N-1}(p-p_k)}}{\quad}(1) Ga(Ωcs)=∏k=0N−1(Ωcs−Ωcsk)1=∏k=0N−1(p−pk)1(1)
式中
p k = s k / Ω c = e j π ( 1 2 + 2 K + 1 2 N ) , k = 0 , 1 , . . . , N − 1 ( 2 ) p_k=s_k/\Omega_c=e^{j{\pi}(\frac{1}{2}+\frac{2K+1}{2N})},k=0,1,...,N-1{\qquad}(2) pk=sk/Ωc=ejπ(21+2N2K+1),k=0,1,...,N−1(2)
为归一化极点。
这样,只要根据技术指标求出阶数N,按照式(2)求出N个极点,再按照式(1)得到归一化的系统函数 G a ( s ) G_a(s) Ga(s)。如果知道截止频率 Ω c \Omega_c Ωc,即可知道系统函数 H a ( s ) H_a(s) Ha(s)。
注:设计出满足要求的低通滤波器后,通过频率变换公式即可得到高通滤波器、带通滤波器、带阻滤波器等。
用MATLAB设计巴特沃斯滤波器(成电DSP书上P160有详细说明):
[Z, P, K] = buttap(N);
[N, wc] = buttord(wp, ws, Rp, As);
[N, wc] = buttord(wp, ws, Rp, As, 's');
[B, A] = butter(N, wc, 'ftype');
[B, A] = butter(N, wc, 'ftype', 's')
切比雪夫I型滤波器
其幅度平方函数为:
∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 C N 2 ( Ω Ω p ) |H_a(j\Omega)|^2=\frac{1}{1+\varepsilon^2C_N^2(\frac{\Omega}{\Omega_p})} ∣Ha(jΩ)∣2=1+ε2CN2(ΩpΩ)1
式中, ε \varepsilon ε为小于1的正数。
椭圆滤波器
会用MATLAB提供的函数即可。
高通、带通和带阻滤波器的设计
通过某些方法得到了低通滤波器后,再通过频率变换就可以得到高通、带通和带阻滤波器。
归一化低通滤波器
令截止频率 ω c = 1 \omega_c=1 ωc=1:
H ( s ) = ω c s + ω c = 1 s + 1 H(s)=\frac{\omega_c}{s+\omega_c}\\=\frac{1}{s+1} H(s)=s+ωcωc=s+11
低通到高通的频率转换
我们的目标是:
- 当 ω → 0 \omega{\rightarrow}0 ω→0时, ∣ H ′ ( ω ∣ ) → 0 |H'(\omega|){\rightarrow}0 ∣H′(ω∣)→0;
- 当 ω → ω c \omega{\rightarrow}\omega_c ω→ωc时, ∣ H ′ ( ω ∣ ) → 1 2 |H'(\omega|){\rightarrow}\frac{1}{\sqrt{2}} ∣H′(ω∣)→21;
- 当 ω → ∞ \omega{\rightarrow}\infin ω→∞时, ∣ H ′ ( ω ∣ ) → 1 |H'(\omega|){\rightarrow}1 ∣H′(ω∣)→1;
所以,令 s → ω c s s{\rightarrow}\frac{\omega_c}{s} s→sωc即可,则传递函数变为:
H ′ ( s ) = s s + ω c H'(s)=\frac{s}{s+\omega_c} H′(s)=s+ωcs
低通到带通的频率转换
我们的目标是:
- 当 ω → 0 \omega{\rightarrow}0 ω→0时, ∣ H ′ ( ω ∣ ) → 0 |H'(\omega|){\rightarrow}0 ∣H′(ω∣)→0;
- 当 ω → ω l \omega{\rightarrow}\omega_l ω→ωl时, ∣ H ′ ( ω ∣ ) → 1 2 |H'(\omega|){\rightarrow}\frac{1}{\sqrt{2}} ∣H′(ω∣)→21;
- 当 ω ⊂ ( ω l , ω h ) \omega{\subset}(\omega_l,\omega_h) ω⊂(ωl,ωh)时, ∣ H ′ ( ω ∣ ) ≥ 1 2 |H'(\omega|){\ge}\frac{1}{\sqrt{2}} ∣H′(ω∣)≥21
- 当 ω → ω h \omega{\rightarrow}\omega_h ω→ωh时, ∣ H ′ ( ω ∣ ) → 1 2 |H'(\omega|){\rightarrow}\frac{1}{\sqrt{2}} ∣H′(ω∣)→21;
- 当 ω → ∞ \omega{\rightarrow}\infin ω→∞时, ∣ H ′ ( ω ∣ ) → 0 |H'(\omega|){\rightarrow}0 ∣H′(ω∣)→0;
所以,令 s → s 2 + ω 0 2 B s s{\rightarrow}\frac{s^2+\omega_0^2}{Bs} s→Bss2+ω02即可,其中 ω 0 2 = ω l ω h , B = ω h − ω l \omega_0^2=\omega_l\omega_h,\ B=\omega_h-\omega_l ω02=ωlωh, B=ωh−ωl,则传递函数变为:
H ′ ( s ) = B s s 2 + B s + ω 0 2 H'(s)=\frac{Bs}{s^2+Bs+\omega_0^2} H′(s)=s2+Bs+ω02Bs
低通到带阻的频率转换
我们的目标是:
- 当 ω → 0 \omega{\rightarrow}0 ω→0时,$|H’(\omega|){\rightarrow}$1;
- 当 ω → ω l \omega{\rightarrow}\omega_l ω→ωl时, ∣ H ′ ( ω ∣ ) → 1 2 |H'(\omega|){\rightarrow}\frac{1}{\sqrt{2}} ∣H′(ω∣)→21;
- 当 ω ⊂ ( ω l , ω h ) \omega{\subset}(\omega_l,\omega_h) ω⊂(ωl,ωh)时, ∣ H ′ ( ω ∣ ) ≤ 1 2 |H'(\omega|){\le}\frac{1}{\sqrt{2}} ∣H′(ω∣)≤21
- 当 ω → ω h \omega{\rightarrow}\omega_h ω→ωh时, ∣ H ′ ( ω ∣ ) → 1 2 |H'(\omega|){\rightarrow}\frac{1}{\sqrt{2}} ∣H′(ω∣)→21;
- 当 ω → ∞ \omega{\rightarrow}\infin ω→∞时, ∣ H ′ ( ω ∣ ) → 1 |H'(\omega|){\rightarrow}1 ∣H′(ω∣)→1;
所以,令 s → B s s 2 + ω 0 2 s{\rightarrow}\frac{Bs}{s^2+\omega_0^2} s→s2+ω02Bs即可,其中 ω 0 2 = ω l ω h , B = ω h − ω l \omega_0^2=\omega_l\omega_h,\ B=\omega_h-\omega_l ω02=ωlωh, B=ωh−ωl,则传递函数变为:
H ′ ( s ) = s 2 + ω 0 2 s 2 + B s + ω 0 2 H'(s)=\frac{s^2+\omega_0^2}{s^2+Bs+\omega_0^2} H′(s)=s2+Bs+ω02s2+ω02
从模拟到数字的转换方法
脉冲响应不变法
基本思路
设模拟滤波器的系统函数为 H a ( s ) H_a(s) Ha(s),单位冲激响应是 h a ( t ) h_a(t) ha(t), H a ( s ) = L T [ h a ( t ) ] H_a(s)=LT[h_a(t)] Ha(s)=LT[ha(t)]。对 h a ( t ) h_a(t) ha(t)进行等间隔采样,采样间隔为T,得到 h a ( n T ) h_a(nT) ha(nT),将 h ( n ) = h a ( n T ) h(n)=h_a(nT) h(n)=ha(nT)作为数字滤波器的单位冲激响应,那么数字滤波器的系统函数 H ( z ) H(z) H(z)便是 h ( n ) h(n) h(n)的Z变换。
因此脉冲响应不变法是一种时域逼近方法,它使 h ( n ) h(n) h(n)在采样点上等于 h a ( t ) h_a(t) ha(t)。由于模拟滤波器的设计结果是 H a ( s ) H_a(s) Ha(s),所以下面基于脉冲响应不变法的思想,导出直接从 H a ( s ) H_a(s) Ha(s)到 H ( z ) H(z) H(z)的转换公式。
推导过程
设模拟滤波器 H a ( s ) H_a(s) Ha(s)只有单阶极点,且分母多项式的阶次高于分子多项式的阶次,将 H a ( s ) H_a(s) Ha(s)用部分分式表示并进行推导:
H a ( s ) = ∑ i = 1 N A i s − s i h a ( t ) = L [ H a ( s ) ] = ∑ i = 1 N A i e s i t u ( t ) h ( n ) = h a ( n T ) = ∑ i = 1 N A i e s i n T u ( n T ) H ( z ) = ∑ i = 1 N A i T 1 − e s i T z − 1 H_a(s)=\sum_{i=1}^{N}\frac{A_i}{s-s_i}\\ h_a(t)=\mathscr{L}[H_a(s)]=\sum_{i=1}^{N}A_ie^{s_it}u(t)\\ h(n)=h_a(nT)=\sum_{i=1}^{N}A_ie^{s_inT}u(nT)\\ H(z)=\sum_{i=1}^{N}\frac{A_iT}{1-e^{s_iT}z^{-1}}\\ Ha(s)=i=1∑Ns−siAiha(t)=L[Ha(s)]=i=1∑NAiesitu(t)h(n)=ha(nT)=i=1∑NAiesinTu(nT)H(z)=i=1∑N1−esiTz−1AiT
即:
H a ( s ) = ∑ i = 1 N A i s − s i ( 1 ) H ( z ) = ∑ i = 1 N A i T 1 − e s i T z − 1 ( 2 ) H_a(s)=\sum_{i=1}^{N}\frac{A_i}{s-s_i}{\quad}(1)\\ H(z)=\sum_{i=1}^{N}\frac{A_iT}{1-e^{s_iT}z^{-1}}{\quad}(2) Ha(s)=i=1∑Ns−siAi(1)H(z)=i=1∑N1−esiTz−1AiT(2)
我们已经得到直接从 H a ( s ) H_a(s) Ha(s)到 H ( z ) H(z) H(z)的转换公式了,下面分析从模拟滤波器 H a ( s ) H_a(s) Ha(s)转换到数字滤波器 H ( z ) H(z) H(z),s平面和z平面之间的映射关系,从而找到这种转换方式(即式(1)到式(2))的优缺点。这里以理想采样信号 h ^ a ( t ) \hat{h}_a(t) h^a(t)作为桥梁,推导其映射关系,即推导 h ^ a ( t ) \hat{h}_a(t) h^a(t)与 H ( z ) H(z) H(z)之间的映射关系。
∵ h ^ a ( t ) = ∑ n = − ∞ + ∞ h a ( t ) δ ( t − n T ) ∴ H ^ a ( s ) = L [ h ^ a ( t ) ] = ∫ − ∞ + ∞ h ^ a ( t ) e − s t d t = ∫ − ∞ + ∞ [ ∑ n = − ∞ + ∞ h a ( t ) δ ( t − n T ) ] e − s t d t = ∫ − ∞ + ∞ [ ∑ n = − ∞ + ∞ h a ( n T ) δ ( t − n T ) ] e − s n T d t = ∑ n = − ∞ + ∞ h a ( n T ) e − s n T ∫ − ∞ + ∞ δ ( t − n T ) d t = ∑ n = − ∞ + ∞ h a ( n T ) e − s n T {\because}{\quad}\hat{h}_a(t)=\sum_{n=-\infin}^{+\infin}h_a(t)\delta(t-nT)\\ {\therefore}{\quad}\hat{H}_a(s)=\mathscr{L}[\hat{h}_a(t)]=\int_{-\infin}^{+\infin}\hat{h}_a(t)e^{-st}d_t\\ =\int_{-\infin}^{+\infin}[\sum_{n=-\infin}^{+\infin}h_a(t)\delta(t-nT)]e^{-st}d_t\\ =\int_{-\infin}^{+\infin}[\sum_{n=-\infin}^{+\infin}h_a({\color{blue}nT})\delta(t-nT)]e^{-s{\color{blue}nT}}d_t\\ =\sum_{n=-\infin}^{+\infin}h_a(nT)e^{-snT}{\color{red}\int_{-\infin}^{+\infin}\delta(t-nT)d_t}\\ =\sum_{n=-\infin}^{+\infin}h_a(nT)e^{-snT} ∵h^a(t)=n=−∞∑+∞ha(t)δ(t−nT)∴H^a(s)=L[h^a(t)]=∫−∞+∞h^a(t)e−stdt=∫−∞+∞[n=−∞∑+∞ha(t)δ(t−nT)]e−stdt=∫−∞+∞[n=−∞∑+∞ha(nT)δ(t−nT)]e−snTdt=n=−∞∑+∞ha(nT)e−snT∫−∞+∞δ(t−nT)dt=n=−∞∑+∞ha(nT)e−snT
式中, h a ( n T ) h_a(nT) ha(nT)是 h a ( t ) h_a(t) ha(t)在采样点 t = n T t=nT t=nT时的幅度值,它与序列 h ( n ) h(n) h(n)的幅度值相等,即 h ( n ) = h a ( n T ) h(n)=h_a(nT) h(n)=ha(nT),因此得到:
H ^ a ( s ) = ∑ n = − ∞ + ∞ h ( n ) e − s n T = ∑ n = − ∞ + ∞ h ( n ) z − n ∣ z = e s T = H ( z ) ∣ z = e s T \hat{H}_a(s)=\sum_{n=-\infin}^{+\infin}h(n)e^{-snT}\\ =\sum_{n=-\infin}^{+\infin}h(n)z^{-n}|_{z=e^{sT}}\\ =H(z)|_{z=e^{sT}} H^a(s)=n=−∞∑+∞h(n)e−snT=n=−∞∑+∞h(n)z−n∣z=esT=H(z)∣z=esT
上式表明理想采样信号 h ^ a ( t ) \hat{h}_a(t) h^a(t)的拉氏变换与相应采样序列 h ( n ) h(n) h(n)的Z变换之间的映射关系为:
z = e s T l e t s = δ + j Ω , z = r e j ω { r = e δ T ω = Ω T z=e^{sT}\\ let{\quad}s={\delta}+j\Omega,\ z=re^{j\omega}\\ \begin{cases} r=e^{
{\delta}T} \\ \omega={\Omega}T \end{cases} z=esTlets=δ+jΩ, z=rejω{
r=eδTω=ΩT
因此:
{ δ = 0 , r = 1 δ < 0 , r < 1 δ > 0 , r > 1 \begin{cases} \delta=0,\ r=1\\ \delta<0,\ r<1\\ \delta>0,\ r>1 \end{cases} ⎩⎪⎨⎪⎧δ=0, r=1δ<0, r<1δ>0, r>1
上式说明,s平面的虚轴映射为z平面的单位圆;s平面的左半平面映射为z平面单位圆内;s平面的右半平面映射为z平面单位圆外。这说明,如果 H a ( s ) H_a(s) Ha(s)因果稳定,转换后得到的 H ( z ) H(z) H(z)仍是稳定的。
待补:讨论数字滤波器的频响特性与模拟滤波器的频响特性之间的关系(P179)。
双线性变换法
脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。产生的原因是模拟低通滤波器不是带限于折叠频率 π / T {\pi}/T π/T,在离散化(采样)后产生了频谱混叠,再通过映射关系 z = e s T z=e^{sT} z=esT,使数字滤波器在 ω = π \omega=\pi ω=π附近形成了频谱混叠。
基本思路
为了克服这一缺点,可以采用非线性频率压缩方法,将整个模拟频率轴压缩到 ± π / T \pm\pi/T ±π/T之间,再用 z = e s T z=e^{sT} z=esT转换到z平面上。这里用正切变换实现频率压缩:
Ω = 2 T tan ( 1 2 Ω 1 T ) \Omega=\frac{2}{T}\tan{\left(\frac{1}{2}{\Omega_1}T\right)} Ω=T2tan(21Ω1T)
式中,T仍是采样间隔。当 Ω 1 \Omega_1 Ω1从 − π / T -\pi/T −π/T经过0变化到 − π / T -\pi/T −π/T时, Ω \Omega Ω则由 − ∞ -\infin −∞经过0变换到 + ∞ +\infin +∞,实现了s平面上整个虚轴完全压缩到s1平面上虚轴的 ± π / T \pm\pi/T ±π/T之间的转换。
s = 2 T 1 − z − 1 1 + z − 1 ( 1 ) z = 2 T + s 2 T − s s=\frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}{\quad}(1)\\ z=\frac{\frac{2}{T}+s}{\frac{2}{T}-s} s=T21+z−11−z−1(1)z=T2−sT2+s
转换性能分析
先分析模拟频率 Ω \Omega Ω和数字频率 ω \omega ω之间的关系,令 s = j Ω , z = e j ω s=j\Omega,\ z=e^{j\omega} s=jΩ, z=ejω,并带入式(1)得到:
j Ω = 2 T 1 − e − j ω 1 + e − j ω Ω = 2 T tan ( 1 2 ω ) j\Omega=\frac{2}{T}\frac{1-e^{-j\omega}}{1+e^{-j\omega}}\\ \Omega=\frac{2}{T}\tan{(\frac{1}{2}\omega)} jΩ=T21+e−jω1−e−jωΩ=T2tan(21ω)
上式说明,s平面上的 Ω \Omega Ω与z平面的 ω \omega ω成非线性正切关系。
- 在 ω = 0 \omega=0 ω=0附近接近线性关系;
- 当 ω \omega ω增加时, Ω \Omega Ω加得愈来愈快;
- 当 ω \omega ω趋近于 π \pi π时, Ω \Omega Ω趋近于 ∞ \infin ∞。
正是这种非线性关系,消除了频谱混叠现象。
可见,对于双线性变换而言,在s域的频率和z域对应的频率不同,发生了一定的弯曲,也就意味着截止频率在s域和在z域是不一样的,现在我们需要找到这种关系(省略掉推导),在z域,假设截止频率为 f d f_d fd,则:
f a = f s π tan ( π f d f s ) f_a=\frac{f_s}{\pi}\tan{\left(\frac{
{\pi}f_d}{f_s}\right)} fa=πfstan(fsπfd)
也就是说对于双线性变而言,模拟的截止频率和数字的截止频率是不同的,不同的原因是因为双线性变换是近似变换,不是准确换算。
但是,当 f s > > f d f_s>>f_d fs>>fd时,即采样频率远大于截止频率时,可以得到:
f a = f s π tan ( π f d f s ) ≈ f s π ( π f d f s ) = f d f_a=\frac{f_s}{\pi}\tan{\left(\frac{
{\pi}f_d}{f_s}\right)}{\approx}\frac{f_s}{\pi}\left(\frac{
{\pi}f_d}{f_s}\right)=f_d fa=πfstan(fsπfd)≈πfs(fsπfd)=fd
有了前面的说明,就可以设计IIR滤波器了,基本步骤如下:
- 选择一个归一化的模拟滤波器 H ( s ) H(s) H(s);
- 确定数字滤波器的截止频率,也就是响应为-3dB(幅值衰减为 1 / 2 1/\sqrt{2} 1/2)时对应的频率;
- 利用公式 f a = f s π tan ( π f d f s ) f_a=\frac{f_s}{\pi}\tan{\left(\frac{ {\pi}f_d}{f_s}\right)} fa=πfstan(fsπfd)计算对应的模拟截止频率;
- 选择合适的变换,得到 H ′ ( s ) H'(s) H′(s);比如对于低通滤波器: s → s / ω c s{\rightarrow}s/\omega_c s→s/ωc,其中 ω c = 2 π f a \omega_c=2{\pi}f_a ωc=2πfa。
- 在 H ′ ( s ) H'(s) H′(s)中,用 s → 2 f s ( z − 1 z + 1 ) s{\rightarrow}2f_s(\frac{z-1}{z+1}) s→2fs(z+1z−1)进行替换,得到数字化的滤波器 H ( z ) H(z) H(z)。
IIR滤波器设计实例
比如:现在假设要设计一个低通滤波器,截止频率为 f d = 10 H z f_d=10Hz fd=10Hz,采样频率为 f s = 50 H z f_s=50Hz fs=50Hz。
- 选择归一化的滤波器 H ( s ) = 1 s + 1 H(s)=\frac{1}{s+1} H(s)=s+11;
- 数字截止频率为10Hz;
- 对应的模拟截止频率为: f a = f s π tan ( π f d f s ) = 11.56 H z f_a=\frac{f_s}{\pi}\tan{\left(\frac{ {\pi}f_d}{f_s}\right)}=11.56Hz fa=πfstan(fsπfd)=11.56Hz;
- 将 H ( s ) H(s) H(s)中的s进行替换: s → s / ω c , ω c = 2 π f a s{\rightarrow}s/\omega_c,\ \omega_c=2{\pi}f_a s→s/ωc, ωc=2πfa。得到: H ′ ( s ) = ω c s + ω c H'(s)=\frac{\omega_c}{s+\omega_c} H′(s)=s+ωcωc,其中 ω c = 2 π ( 11.56 ) = 72.6 r a d / s \omega_c=2{\pi}(11.56)=72.6rad/s ωc=2π(11.56)=72.6rad/s;
- 用 s = 2 f s ( z − 1 z + 1 ) s=2f_s\left(\frac{z-1}{z+1}\right) s=2fs(z+1z−1)进行替换,得到 H ( z ) = 0.4206 ( z + 1 ) z − 0.1587 H(z)=\frac{0.4206(z+1)}{z-0.1587} H(z)=z−0.15870.4206(z+1)。