信号处理小结(2):滤波器

来源:互联网 发布:中昌数据股票 编辑:程序博客网 时间:2024/05/20 18:19

除了用基本滤波单元组成级联滤波器的方法外,在数字保护中用得较多的就是用零、极点配置法设计数字滤波器。它通过直接在Z平面上合理地设置零点和极点,以得到合乎要求的频率响应特性和时延特性。

一、全零点滤波器

在转移函数中只含有零点而无极点。假定N为偶数,要求除k=m次谐波外,完全滤除直流、N/2次及其它各次谐波。

 



二、狭窄带通滤波器

除了考虑必要的零点外,在需要滤取得频率处再设置一个合适的极点。如使r很接近1,就可以获得很窄的通带和比较陡峭的过渡带。

为距离保护设计一个狭窄带通滤波器。要求完全抑制直流和N/2次谐波分量,并比较采样频率fs、极点的极径r=p对滤波特性的影响。

滤波器的转移函数为



p越接近1,幅频特性曲线越窄越陡,因此p的取值与滤波器滤除非基频分量的能力成正比变化。


设p=0.95。有图可见,随fs增大,滤波器滤除非基频分量能力下降。这是由于位于高频处的零点对应于N/2次谐波,当fs越低,N/2次谐波分量就越靠近基频。但fs越低,对模拟低通滤波器的要求越苛刻,或者说越容易出现混叠现象。

## 全零点滤波器# -*- coding: utf-8 -*-import numpy as npimport matplotlib.pyplot as pltfrom pylab import *mpl.rcParams['font.sans-serif'] = 'KaiTi'mpl.rcParams['axes.unicode_minus'] = Falsen = np.arange(0,6, 0.0002)N = 12z = np.exp(2*np.pi*n/N*1j)##f = (1-z**(-8))**2*(1-z**(-10))/(1-z**(-12))Hb = ( 1+z**(-2)-z**(-6)-z**(-8))Hb1 = ( 1+z**(-2)-z**(-6)-z**(-8))*( 1+np.sqrt(3)*z**(-1)+z**(-2))Hs = ( 1-z**(-3)+z**(-6)-z**(-9))Hs1 = ( 1-z**(-3)+z**(-6)-z**(-9))*( 1+z**(-1))magHb = np.abs(Hb)magHb1 = np.abs(Hb1)magHs = np.abs(Hs)magHs1 = np.abs(Hs1)plt.figure(1)plt.plot(n, magHb/np.max(magHb), label=u"简化的基波滤波器幅频特性", lw=2)plt.plot(n, magHb1/np.max(magHb1), '--', label=u"基波滤波器幅频特性", lw=2)plt.xlabel(r"$f/f_1$", fontsize=15)plt.xticks(fontsize=18); plt.yticks(fontsize=18)plt.title(r"$H_b=(1+z^{-2}-z^{-6}-z^{-8})( 1+\sqrt{3}z^{-1}+z^{-2})$", fontsize=15)plt.legend()plt.figure(2)plt.plot(n, magHs/np.max(magHs), label=u"简化的二次谐波滤波器幅频特性", lw=2)plt.plot(n, magHs1/np.max(magHs1), '--', label=u"二次谐波滤波器幅频特性", lw=2)plt.xlabel(r"$f/f_1$", fontsize=15)plt.xticks(fontsize=18); plt.yticks(fontsize=18)plt.title(r"$H_s=(1-z^{-3}+z^{-6}-z^{-9})( 1+z^{-1})$", fontsize=15)plt.legend()plt.show()

## 狭窄带通滤波器# -*- coding: utf-8 -*-import numpy as npimport matplotlib.pyplot as pltfrom pylab import *mpl.rcParams['font.sans-serif'] = 'KaiTi'mpl.rcParams['axes.unicode_minus'] = Falsen = np.arange(0,20, 0.0001)w1 = 2*np.pi*50fs = np.array([600, 1000, 1500])N = fs/50z = np.exp(2*np.pi*n/N[1]*1j)Ts = [1.0/600, 1.0/1000, 1.0/1500]plt.figure(1)line_style = ['r-.', 'k--', '-']line_label = ['p = 0.969', 'p = 0.936', 'p = 0.910']p = [0.969, 0.936, 0.910]i = 0for p in [0.969, 0.936, 0.910]:    Hz = ( 1-z**(-2) ) / ( 1-2*p*np.cos(w1*Ts[1])*z**(-1)+p**2*z**(-2) )    magHz = np.abs(Hz)    if i==0:        max_mag = np.max(magHz)    plt.plot(n, magHz/max_mag, line_style[i], lw=2, label=line_label[i])    i += 1plt.xticks(fontsize=18); plt.yticks(fontsize=18)plt.xlabel(r"$f/f_1$", fontsize=15)plt.title(u"狭窄带通滤波器频谱特性与参数p的关系", fontsize=15)plt.legend()plt.figure(2)p = 0.95for i in [0, 1, 2]:    z = np.exp(2*np.pi*n/N[i]*1j)    Hz = ( 1-z**(-2) ) / ( 1-2*p*np.cos(w1*Ts[i])*z**(-1)+p**2*z**(-2) )    magHz = np.abs(Hz)    if i==0:        max_mag = np.max(magHz)    plt.plot(n, magHz/max_mag, line_style[i], lw=2, label=('fs = '+str(fs[i])+'Hz'))plt.xticks(fontsize=18); plt.yticks(fontsize=18)plt.xlabel(r"$f/f_1$", fontsize=15)plt.title(u"狭窄带通滤波器频谱特性与采样频率fs的关系", fontsize=15)plt.legend()plt.show()