python 滤波

参考文献:https://baijiahao.baidu.com/s?id=1612731984727714937&wfr=spider&for=pc

https://docs.scipy.org/doc/scipy-0.19.0/reference/signal.html

使用pyqtgraph库实现数据可视化之逐点刷新波形图

加上滤波

import pyqtgraph as pg
import numpy as np
import array
from scipy import signal

b, a = signal.butter(3, 0.05)
zi = signal.lfilter_zi(b, a)
dss = zi

app = pg.mkQApp()
data = array.array('d')
data2 = array.array('d')
data3 = array.array('d')
# print(data)
N = 200
win = pg.GraphicsWindow()
win.setWindowTitle(u'pyqtgraph逐点画波形图')
win.resize(500,300)

p = win.addPlot()
p.showGrid(x=True,y=True)
p.setRange(xRange=[0,N-1],yRange=[-1.2,1.2],padding=0)
p.setLabels(left='y / V',bottom='x / point',title='y = sin(x)')

curve = p.plot(pen='y')

# q = win.addPlot()
filter_curve = p.plot(pen='y')

filter_curve_2 = p.plot(pen='y')
idx = 0
def plotData():
    global idx
    global dss
    global data3
    tmp =signal_xHz(1, 1,50, idx )# np.sin(np.pi / 50 * idx)
#     print('dss',dss,'tmp',tmp)
    z, dss = signal.lfilter(b, a, tmp, zi=dss)
    if len(data)<N:
        data.append(tmp)      
        data2.append(z)
    else:
        data2[:-1] = data2[1:]
        data2[-1] = z
        data[:-1] = data[1:]
        data[-1] = tmp
        data3 = signal.filtfilt(b, a, data)
    curve.setData(data)
    filter_curve.setData(data2)
    filter_curve_2.setData(data3)
    idx += 1
def signal_xHz(A, fi,sample, num ):
    return A * np.sin(np.pi * 2 * fi * num / sample )+ np.random.randn(1) * 0.08

timer = pg.QtCore.QTimer()
timer.timeout.connect(plotData)
timer.start(30)
app.exec_()

 

filtfilt要多于12个点才能滤波,所以直接200个点后,才使用filtfilt滤波。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值