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

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

一、全零点滤波器

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

 


信号处理小结(2):滤波器_第1张图片

二、狭窄带通滤波器

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

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

滤波器的转移函数为



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

信号处理小结(2):滤波器_第2张图片

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

## 全零点滤波器
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
from pylab import *

mpl.rcParams['font.sans-serif'] = 'KaiTi'
mpl.rcParams['axes.unicode_minus'] = False

n = np.arange(0,6, 0.0002)
N = 12
z = 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 np
import matplotlib.pyplot as plt
from pylab import *

mpl.rcParams['font.sans-serif'] = 'KaiTi'
mpl.rcParams['axes.unicode_minus'] = False

n = np.arange(0,20, 0.0001)
w1 = 2*np.pi*50
fs = np.array([600, 1000, 1500])
N = fs/50
z = 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 = 0
for 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 += 1
plt.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.95
for 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()

你可能感兴趣的:(信号处理小结(2):滤波器)