python 经典数字滤波实例
数字滤波分为IIR滤波,和FIR滤波。
FIR滤波:
importscipy.signalassignal
importnumpyasnp
importpylabaspl
importmatplotlib.pyplotasplt
importmatplotlib
fromscipyimportsignal
b=signal.firwin(80,0.5,window=('kaiser',8))
w,h=signal.freqz(b)
importmatplotlib.pyplotasplt
fig,ax1=plt.subplots()
ax1.set_title('Digitalfilterfrequencyresponse')
ax1.plot(w,20*np.log10(abs(h)),'b')
ax1.set_ylabel('Amplitude[dB]',color='b')
ax1.set_xlabel('Frequency[rad/sample]')
ax2=ax1.twinx()
angles=np.unwrap(np.angle(h))
ax2.plot(w,angles,'g')
ax2.set_ylabel('Angle(radians)',color='g')
ax2.grid()
ax2.axis('tight')
plt.show()
运行结果:
IIR滤波器:
fromscipyimportsignal
importmatplotlib.pyplotasplt
importmatplotlib.ticker
importnumpyasnp
#蓝色的是频谱图,绿色的是相位图
wp=0.2
ws=0.3
gpass=1
gstop=40
system=signal.iirdesign(wp,ws,gpass,gstop)
w,h=signal.freqz(*system)
fig,ax1=plt.subplots()
ax1.set_title('Digitalfilterfrequencyresponse')
ax1.plot(w,20*np.log10(abs(h)),'b')
ax1.set_ylabel('Amplitude[dB]',color='b')
ax1.set_xlabel('Frequency[rad/sample]')
ax1.grid()
ax1.set_ylim([-110,10])
nticks=8
ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))
plt.show()
运行结果:
IIR滤波器中cheyb2滤波器的运用
fromscipyimportsignal
importmatplotlib.pyplotasplt
importnumpyasnp
b,a=signal.cheby2(4,40,100,'low',analog=True)
w,h=signal.freqs(b,a)
plt.semilogx(w,20*np.log10(abs(h)))#用于绘制折线图,两个函数的x轴、y轴分别是指数型的。
#plt.plot(w,20*np.log10(abs(h)))
plt.title('ChebyshevTypeIIfrequencyresponse(rs=40)')
plt.xlabel('Frequency[radians/second]')
plt.ylabel('Amplitude[dB]')
plt.margins(0,0.1)#notsure
plt.grid(which='both',axis='both')
t=np.linspace(0,1,1000,False)#1second
sig=np.sin(2*np.pi*10*t)+np.sin(2*np.pi*20*t)
fig,(ax1,ax2)=plt.subplots(2,1,sharex=True)
ax1.plot(t,sig)
ax1.set_title('10Hzand20Hzsinusoids')
ax1.axis([0,1,-2,2])
sos=signal.cheby2(12,20,17,'hp',fs=1000,output='sos')
filtered=signal.sosfilt(sos,sig)
ax2.plot(t,filtered)
ax2.set_title('After17Hzhigh-passfilter')
ax2.axis([0,1,-2,2])
ax2.set_xlabel('Time[seconds]')
plt.show()
以上这篇python经典数字滤波实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。