python 经典数字滤波实例
Python  /  管理员 发布于 7年前   160
数字滤波分为 IIR 滤波,和FIR 滤波。
FIR 滤波:
import scipy.signal as signalimport numpy as npimport pylab as plimport matplotlib.pyplot as pltimport matplotlibfrom scipy import signalb = signal.firwin(80, 0.5, window=('kaiser', 8))w, h = signal.freqz(b) import matplotlib.pyplot as pltfig, ax1 = plt.subplots()ax1.set_title('Digital filter frequency response') 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 滤波器:
from scipy import signalimport matplotlib.pyplot as pltimport matplotlib.tickerimport numpy as np# 蓝色的是频谱图,绿色的是相位图wp = 0.2ws = 0.3gpass = 1gstop = 40system = signal.iirdesign(wp, ws, gpass, gstop)w, h = signal.freqz(*system)fig, ax1 = plt.subplots()ax1.set_title('Digital filter frequency response')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 = 8ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks)) plt.show()
运行结果:
IIR 滤波器中cheyb2 滤波器的运用
from scipy import signalimport matplotlib.pyplot as pltimport numpy as npb, 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('Chebyshev Type II frequency response (rs=40)')plt.xlabel('Frequency [radians / second]')plt.ylabel('Amplitude [dB]')plt.margins(0, 0.1)# not sureplt.grid(which='both', axis='both') t = np.linspace(0, 1, 1000, False) # 1 secondsig = 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('10 Hz and 20 Hz sinusoids')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('After 17 Hz high-pass filter')ax2.axis([0, 1, -2, 2])ax2.set_xlabel('Time [seconds]') plt.show()
以上这篇python 经典数字滤波实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号