python实现滑动窗口滤波

最近想实现这么一个功能,另输出与过去时段的x相关

y=a*x+a^2*x+a^3*x.........a^n*3

按正常来说这是用到一个队列来实现,但这个在求y的时候需要将队列里面的值取出来相加,但是队列get之后数值就删除了,python里并没有队列求和的函数,因此在这里用到numpy数组来操作,通过数组移位后相乘来实现这个功能:

其中size就是n的大小,channel是通道数,比如用的是机器人,想做xyz三个方向的滤波,就让channel=3,ganma就是上面公式的a

import numpy as np
from scipy.ndimage.interpolation import shift
class Filter:
    def __init__(self,size,ganma,channel):
        self.size=size
        self.channel=channel
        #self.ganma=ganma
        self.filterdata=np.zeros(size*channel).reshape(channel,size)#新的数据排在最前面
        self.ganma=[np.power(ganma,i) for i in range(size)]
        print("init...")
        print("filterdata=",self.filterdata)
        print("ganma=",self.ganma)

    def Clear(self):
        self.filterdata=np.zeros(self.size*self.channel).reshape(self.channel,self.size)

    def Add(self,data):
        #data=[x,y,z,..]
        self.filterdata = np.roll(self.filterdata, 1, axis=1)#移位
        self.filterdata[:,0]=0#清零
        self.filterdata[:,0]=self.filterdata[:,0]+data#加入新值
        print("ADD:",self.filterdata)
        None

    def GetResult(self):
        result=np.zeros(self.channel)
        result = np.dot(self.filterdata,self.ganma)
        print("GetResult=",result)
        return result#返回array[x,y,z..]

F=Filter(size=3,ganma=0.5,channel=2)
F.Add([1,2])
F.GetResult()
F.Add([3,4])
F.GetResult()
F.Add([5,6])
F.GetResult()
F.Add([7,8])

你可能感兴趣的:(机器人仿真,python,numpy)