python 经典数字滤波实例

作者:weixin_42528089 时间:2022-08-26 10:23:22 

数字滤波分为 IIR 滤波,和FIR 滤波。

FIR 滤波:


import scipy.signal as signal
import numpy as np
import pylab as pl
import matplotlib.pyplot as plt
import matplotlib
from scipy import signal
b = signal.firwin(80, 0.5, window=('kaiser', 8))
w, h = signal.freqz(b)

import matplotlib.pyplot as plt
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]')

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()

运行结果:

python 经典数字滤波实例

IIR 滤波器:


from scipy import signal
import matplotlib.pyplot as plt
import matplotlib.ticker
import numpy as np
# 蓝色的是频谱图,绿色的是相位图
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('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 = 8
ax1.yaxis.set_major_locator(matplotlib.ticker.LinearLocator(nticks))

plt.show()

运行结果:

python 经典数字滤波实例

IIR 滤波器中cheyb2 滤波器的运用


from  scipy import signal
import matplotlib.pyplot as plt
import numpy as np
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('Chebyshev Type II frequency response (rs=40)')
plt.xlabel('Frequency [radians / second]')
plt.ylabel('Amplitude [dB]')
plt.margins(0, 0.1)#  not sure
plt.grid(which='both', axis='both')

t = np.linspace(0, 1, 1000, False) # 1 second
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('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 经典数字滤波实例

python 经典数字滤波实例

来源:https://blog.csdn.net/weixin_42528089/article/details/102893808

标签:python,数字滤波
0
投稿

猜你喜欢

  • Python文件操作类操作实例详解

    2023-05-19 04:45:08
  • 详解Python连接oracle的问题记录与解决

    2021-04-07 09:38:41
  • 深入浅出Python中三个图像增强库的使用

    2021-12-08 08:33:55
  • 如何解决AJAX中跨域访问出现'没有权限'的错误

    2008-09-11 17:20:00
  • SQL Server 2008升级报表服务器数据库

    2008-11-18 12:36:00
  • Python抽象类的新写法

    2022-12-04 13:39:38
  • python使用pika库调用rabbitmq交换机模式详解

    2024-01-01 06:28:18
  • 在Python中实现字典反转案例

    2022-12-17 02:05:46
  • asp随机数 随机产生N位由数字和字母组成的密码

    2011-03-10 10:47:00
  • Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】 <font color=red>原创</font>

    2021-08-21 17:17:21
  • Python高级特性之闭包与装饰器实例详解

    2021-09-19 03:17:25
  • 如何解决“cint和clng的溢出出错”问题?

    2009-12-03 20:21:00
  • Python从零开始创建区块链

    2021-02-12 12:21:14
  • 使用python解析xml成对应的html示例分享

    2022-05-05 21:02:27
  • Python 图片转数组,二进制互转操作

    2023-10-07 17:46:04
  • 使用Python更换外网IP的方法

    2021-01-25 04:25:46
  • Python网络编程使用select实现socket全双工异步通信功能示例

    2023-04-10 21:06:59
  • 如何给windows设置定时任务并运行python脚本

    2023-09-18 13:40:19
  • OpenCV imread读取图片失败的问题及解决

    2021-10-20 06:44:00
  • MySQL常见错误提示及解决方法

    2008-02-23 10:08:00
  • asp之家 网络编程 m.aspxhome.com