岚县网站建设,全网关键词优化公司哪家好,龙岩seo外包公司,动画设计师证怎么考信号处理工作中滤波器的应用是非常广泛的#xff0c;可以分成模拟滤波器和数字滤波器两种#xff0c;数字滤波器主要包括两种#xff0c;IIR和FIR#xff0c;这两种滤波器后面统一说#xff0c;今天先来说一说模拟滤波器#xff08;主要是我先用Python实现了Matlab书里面…
信号处理工作中滤波器的应用是非常广泛的可以分成模拟滤波器和数字滤波器两种数字滤波器主要包括两种IIR和FIR这两种滤波器后面统一说今天先来说一说模拟滤波器主要是我先用Python实现了Matlab书里面模拟滤波器的一些内容。
首先什么是滤波器什么又是模拟滤波器
滤波器具有频率选择作用的电路或者运算处理系统具有滤除噪声、分离不同信号的功能今天主要写的是1、巴特沃斯滤波器、2、切比雪夫滤波器3、椭圆滤波器4、低通到低通的频带转换
模拟滤波器更具一组设计规范来设计模拟系统函数,使其逼近某个理想滤波器的特性。
各种模拟滤波器的设计过程都是先设计出低通滤波器再通过频率变换将低通滤波器转换成其他类型模拟滤波器。
我们考虑因果系统 其中是系统的单位脉冲响应是实函数那么就有 实际上有
定义模拟滤波器的振幅平方函数为 令
如果要系统稳定那么
如果我们要让系统函数稳定就应该选用在s剖面的左半平面的极点作为的极点。
来看看今天的内容
目录
1、巴特沃斯滤波器 2、切比雪夫I型滤波器 3、切比雪夫II型滤波器 4、椭圆滤波器考尔滤波器 5、低通到低通的频带变换
首先和Jupyter笔记本一样先导入我们需要的包
import numpy as np
import matplotlib.pyplot as plt
import scipy.signal as signal
1、巴特沃斯滤波器
其振幅平方函数为 其中N是滤波器的阶数N越大带通和傣族的近似性越好过渡带也就越陡。
tips之前一大段时间没有更新一个是野外没条件另一个原因就是懒得没有好好去读Scipy.signal的文档所以说博客有一大段时间空下来了其实这两天再去读文档同时对照着Matlab书里面的函数讲解发现很多都是一样的。
MATLAB中buttap函数用来计算N阶巴特沃斯归一化模拟低通原型滤波器系统函数的零点、极点、增益因子的Python也一样返回的都是zpk分别是G(p)的极点、零点、增益
我们来看一个最简单的例子产生一个20阶低通模拟滤波器原型表示为零极点增益形式
[z,p,k]signal.buttap(20)
[n,den]signal.zpk2tf(z,p,k)
[h,w]signal.freqs(n,den)
plt.subplot(211)
plt.plot(np.abs(h))
plt.grid(True)
plt.subplot(212)
plt.plot(w)
plt.grid(True)
来看看结果chule 说实话除了这张图以外其他的我都能和Matlab的对的上。
那就来看一看不同阶数下的巴特沃斯滤波器的幅频响应曲线
nnp.linspace(0,2,200,dtypefloat)
[z1,p1,k1]signal.buttap(1)
[num1,den1]signal.zpk2tf(z1,p1,k1)
[w1,h1]signal.freqs(num1,den1)
magh1abs(h1)
[z2,p2,k2]signal.buttap(3)
[num2,den2]signal.zpk2tf(z2,p2,k2)
[w2,h2]signal.freqs(num2,den2)
magh2abs(h2)
[z3,p3,k3]signal.buttap(8)
[num3,den3]signal.zpk2tf(z3,p3,k3)
[w3,h3]signal.freqs(num3,den3)
magh3abs(h3)
[z,p,k]signal.buttap(12)
[num,den]signal.zpk2tf(z,p,k)
[w,h]signal.freqs(num,den)
maghabs(h)
plt.subplot(2,2,1)
plt.plot(magh1)
plt.grid(True)
plt.subplot(2,2,2)
plt.plot(magh2)
plt.grid(True)
plt.subplot(2,2,3)
plt.plot(magh3)
plt.grid(True)
plt.subplot(2,2,4)
plt.plot(magh)
plt.grid(True)在已知设计参数之后利用buttord函数可以求出所需要的滤波器的阶数和3dB截止频率
[n,Wn]signal.buttord(Wp,Ws,Rp,Rs)
其中
Wp:带通截止频率
Ws:带阻起始频率
Rp:通带内波动
Rs:阻带内最小衰减
1、低通滤波器
# 采样速率为10000H在设计一个低通滤波器fp2000Hzfs3000H在Rp4dBRs30dB
fn10000
fp900
fs600
Rp3
Rs20
Wp(fp/(fn/2))
Wsfs/(fn/2)
[n,Wn]signal.buttord(Wp,Ws,Rp,Rs)
[b,a]signal.butter(n,Wn)
[H,F]signal.freqz(b,a,1000,8000)
plt.subplot(211)
plt.plot(H,20*np.log10(abs(F)))
plt.xlabel(frequency)
plt.ylabel(altitude)
plt.title(LowPass)
plt.grid(True)
phanp.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(H,pha)
plt.xlabel(frequency)
plt.ylabel(angle)
plt.grid(True)
这里有个地方注意一下Matlab和Python的signal.freqs/z两个函数的输出顺序是不同的Matlab的输出的H和W和Python输出的H的W两者刚好调换了位置。sheshe 2、高通滤波器
# 采样速率为10000H在设计一高通滤波器fp900Hzfs600HzRp3dBRs20dB
fn10000
fp900
fs600
Rp3
Rs20
Wpfp/(fn/2)
Wsfs/(fn/2)
[n,wn]signal.buttord(Ws,Wp,Rp,Rs)
[b,a]signal.butter(n,wn,high)
[H,F]signal.freqz(b,a,900,10000)
plt.subplot(211)
plt.plot(H,20*np.log10(abs(F)))
plt.xlabel(frequency)
plt.ylabel(altitude)
plt.title(HighPass)
plt.grid(True)
phanp.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(H,pha)
plt.xlabel(frequency)
plt.ylabel(angle)
plt.grid(True) 3、带通滤波器
fn10000
fpnp.array([600,1700])
fsnp.array([900,1200])
Rp4
Rs30
Wpfp/(fn/2)
Wsfs/(fn/2)
[n,wn]signal.buttord(Wp,Ws,Rp,Rs)
[b,a]signal.butter(n,wn,bandpass)
[H,F]signal.freqz(b,a,1000,10000)
plt.subplot(211)
plt.plot(20*np.log10(abs(F)))
plt.xlabel(frequency)
plt.ylabel(altitude)
plt.title(BandPass)
plt.grid(True)
phanp.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(pha)
plt.xlabel(frequency)
plt.ylabel(angle)
plt.grid(True) 4、带阻滤波器
fn10000
fpnp.array([600,1700])
fsnp.array([900,1200])
Rp4
Rs30
Wpfp/(fn/2)
Wsfs/(fn/2)
[n,wn]signal.buttord(Wp,Ws,Rp,Rs)
[b,a]signal.butter(n,wn,bandstop)#看到了吗低通、高通、带通、带阻的选择方式就是这样
[H,F]signal.freqz(b,a,1000,10000)
plt.subplot(211)
plt.plot(20*np.log10(abs(F)))
plt.xlabel(frequency)
plt.ylabel(altitude)
plt.title(BandPass)
plt.grid(True)
phanp.angle(F)*180/np.pi
plt.subplot(212)
plt.plot(pha)
plt.xlabel(frequency)
plt.ylabel(angle)
plt.grid(True) 2、切比雪夫I型滤波器 式中是有效通带截止频率是与通带波纹有关的参量越大波纹越大但其范围在(0,1),是N阶切比雪夫多项式 这里就不写Matlab的了直接写Python的
[z,p,k]signal.cheb1ap(N,rs)
n是阶数rs是通带的幅度误差返回值分别是滤波器的零点、极点、增益
Wp3*np.pi*4*np.power(12,3)
Ws3*np.pi*12*np.power(10,3)
rp1
rs30
wp1
wsWs/Wp
[N,wc]signal.cheb1ord(Wp,Ws,rp,rs,lowpass)
[z,p,k]signal.cheb1ap(N,rs)
[b,a]signal.zpk2tf(z,p,k)
wnp.linspace(0,np.pi,50,dtypefloat)
[h,w1]signal.freqs(b,a,w)
plt.plot(h*wc/wp,20*np.log10(abs(w1)))
plt.grid(True) nnp.linspace(0,4,200,dtypefloat)
Rp1
N11
N23
N35
N47
[z1,p1,k1]signal.cheb1ap(N1,Rp)
[b1,a1]signal.zpk2tf(z1,p1,k1)
[H1,w1]signal.freqs(b1,a1,n)
magh1np.power(np.abs(w1),2)
plt.subplot(2,2,1)
plt.plot(H1,magh1)
plt.grid(True)
[z2,p2,k2]signal.cheb1ap(N2,Rp)
[b2,a2]signal.zpk2tf(z2,p2,k2)
[H2,w2]signal.freqs(b2,a2,n)
magh2np.power(np.abs(w2),2)
plt.subplot(2,2,2)
plt.plot(H2,magh2)
plt.grid(True)
[z3,p3,k3]signal.cheb1ap(N3,Rp)
[b3,a3]signal.zpk2tf(z3,p3,k3)
[H3,w3]signal.freqs(b3,a3,n)
magh3np.power(np.abs(w3),2)
plt.subplot(2,2,3)
plt.plot(H3,magh3)
plt.grid(True)
[z4,p4,k4]signal.cheb1ap(N4,Rp)
[b4,a4]signal.zpk2tf(z4,p4,k4)
[H4,w4]signal.freqs(b4,a4,n)
magh4np.power(np.abs(w4),2)
plt.subplot(2,2,4)
plt.plot(H4,magh4)
plt.grid(True) 3、切比雪夫II型滤波器 [z,p,k]signal.cheb2ap(N,rs)
n是阶数rs是通带的波动返回值分别是滤波器的零点、极点、增益。
Wp3*np.pi*4*np.power(12,3)
Ws3*np.pi*12*np.power(10,3)
rp1
rs30
wp1
wsWs/Wp
[N,wc]signal.cheb2ord(wp,ws,rp,rs,s)
[z,p,k]signal.cheb2ap(N,rs)
[b,a]signal.zpk2tf(z,p,k)
wnp.linspace(0,np.pi,50,dtypefloat)
[h,w]signal.freqs(b,a,w)
plt.plot(h*wc/wp,20*np.log10(np.abs(w)))
plt.grid(True) nnp.linspace(0,4,200,dtypefloat)
Rp1
N11
N23
N35
N47
Rp20
[z1,p1,k1]signal.cheb2ap(N1,Rp)
[b1,a1]signal.zpk2tf(z1,p1,k1)
[H1,w1]signal.freqs(b1,a1,n)
magh1np.power(np.abs(w1),2)
plt.subplot(2,2,1)
plt.plot(H1,magh1)
plt.grid(True)
[z2,p2,k2]signal.cheb2ap(N2,Rp)
[b2,a2]signal.zpk2tf(z2,p2,k2)
[H2,w2]signal.freqs(b2,a2,n)
magh2np.power(np.abs(w2),2)
plt.subplot(2,2,2)
plt.plot(H2,magh2)
plt.grid(True)
[z3,p3,k3]signal.cheb2ap(N3,Rp)
[b3,a3]signal.zpk2tf(z3,p3,k3)
[H3,w3]signal.freqs(b3,a3,n)
magh3np.power(np.abs(w3),2)
plt.subplot(2,2,3)
plt.plot(H3,magh3)
plt.grid(True)
[z4,p4,k4]signal.cheb2ap(N4,Rp)
[b4,a4]signal.zpk2tf(z4,p4,k4)
[H4,w4]signal.freqs(b4,a4,n)
magh4np.power(np.abs(w4),2)
plt.subplot(2,2,4)
plt.plot(H4,magh4)
plt.grid(True) 4、椭圆滤波器考尔滤波器
这是一种带通和带阻等波纹的滤波器在阶数相同的的条件下有着最小的通和带阻波动其在带通和带阻的波动相同特点
1、是一种零极点型滤波器在有限频率范围内存在传输零点和极点
2、其通带和阻带都有着等波纹特性所以通带、阻带逼近特性良好
3、在同样的性能要求下比前两种滤波器所需要的阶数都低而且其过渡带比较窄。 其中是雅各比椭圆函数L是一个表示波纹性质的参量。
[N,wc]signal.ellipord(wp,ws,rp,rs)
其功能是求解滤波器的最小阶数Wp代表通带介质角频率W是代表阻带起始角频率Rp表示通带波纹dBRs表示阻带最小衰减dB
[z,p,k]signal.ellipap(N,rp,rs)
同样求解零点、极点、增益。
Wp3*np.pi*4*np.power(12,3)
Ws3*np.pi*12*np.power(10,3)
rp2
rs25
wp1
wsWs/Wp
[N,wc]signal.ellipord(wp,ws,rp,rs,s)
[z,p,k]signal.ellipap(N,rp,rs)
[b,a]signal.zpk2tf(z,p,k)
wnp.linspace(0,2*np.pi,67,dtypefloat)
[h,w]signal.freqs(b,a,w)
plt.plot(h,20*np.log10(np.abs(w)))
plt.grid(True)
plt.axis([0,6.5,-50,0])
plt.show() nnp.linspace(0,2,200,dtypefloat)
Rp1
Rs15
N12
N23
N35
N47
[z,p,k]signal.ellipap(N1,Rp,Rs)
[b,a]signal.zpk2tf(z,p,k)
[H,w]signal.freqs(b,a,n)
maghnp.power(np.abs(w),2)
plt.subplot(221)
plt.plot(H,magh)
plt.axis([0,4,0,1])
plt.grid(True)
[z1,p1,k1]signal.ellipap(N2,Rp,Rs)
[b1,a1]signal.zpk2tf(z1,p1,k1)
[H1,w1]signal.freqs(b1,a1,n)
magh1np.power(np.abs(w1),2)
plt.subplot(222)
plt.plot(H1,magh1)
plt.axis([0,4,0,1])
plt.grid(True)
[z2,p2,k2]signal.ellipap(N3,Rp,Rs)
[b2,a2]signal.zpk2tf(z2,p2,k2)
[H2,w2]signal.freqs(b2,a2,n)
magh2np.power(np.abs(w2),2)
plt.subplot(223)
plt.plot(H2,magh2)
plt.axis([0,4,0,1])
plt.grid(True)
[z3,p3,k3]signal.ellipap(N4,Rp,Rs)
[b3,a3]signal.zpk2tf(z3,p3,k3)
[H3,w3]signal.freqs(b3,a3,n)
magh3np.power(np.abs(w3),2)
plt.subplot(224)
plt.plot(H3,magh3)
plt.axis([0,4,0,1])
plt.grid(True) 5、低通到低通的频带变换
[b,a]signal.lp2lp(bp,ap,Wp)
wp模拟低通滤波器的通带截止频率
ap归一化模拟低通滤波器的分子
bp归一化模拟低通滤波器的分母
a频带变换后系统函数的分子
b频带变换后系统函数的分母
来看一个合适的切比雪夫I型滤波器以实现低通到低通的频带变换
Wp3*np.pi*5000
Ws3*np.pi*13000
rp2
rs25
wp1
wsWs/Wp
[n,wc]signal.cheb1ord(wp,ws,rp,rs,s)
[z,p,k]signal.cheb1ap(n,wc)
[bp,ap]signal.zpk2tf(z,p,k)
[b,a]signal.lp2lp(bp,ap,Wp)
wnp.linspace(0,3*np.pi*30000,250,dtypefloat)
[h,w]signal.freqs(b,a,w)
plt.plot(h/(2*np.pi),20*np.log10(np.abs(w)))
plt.grid(True) 好了今天大概就看了这么多后面的还多着呢明天再说。