【问题标题】:Savitzky golay filter errorSavitzky golay 过滤器错误
【发布时间】:2016-08-27 05:51:21
【问题描述】:


我正在尝试实现 savitzky_golay 过滤器,但我不断收到此错误:

firstvals = y[0] - np.abs( y[1:half_window+1][::-1] - y[0] )
TypeError: unsupported operand type(s) for -: 'list' and 'float'

这是代码,它是从库中复制过来的:

def savitzky_golay(y, window_size, order, deriv=0, rate=1):
    try:
        window_size = np.abs(np.int(window_size))
        order = np.abs(np.int(order))
    except ValueError, msg:
        raise ValueError("window_size and order have to be of type int")
    if window_size % 2 != 1 or window_size < 1:
        raise TypeError("window_size size must be a positive odd number")
    if window_size < order + 2:
        raise TypeError("window_size is too small for the polynomials order")
    order_range = range(order+1)
    half_window = (window_size -1) // 2
    # precompute coefficients
    b = np.mat([[k**i for i in order_range] for k in range(-half_window, half_window+1)])
    m = np.linalg.pinv(b).A[deriv] * rate**deriv * factorial(deriv)
    # pad the signal at the extremes with
    # values taken from the signal itself
    firstvals = y[0] - np.abs( y[1:half_window+1][::-1] - y[0] )
    lastvals = y[-1] + np.abs(y[-half_window-1:-1][::-1] - y[-1])
    y = np.concatenate((firstvals, y, lastvals))
    return np.convolve( m[::-1], y, mode='valid')    
def main():
    y=MoveAxeAndFFT(30,2)
    yth=savitzky_golay(y, 51, 3)


【问题讨论】:

    标签: list python-2.7 filter filtering signal-processing


    【解决方案1】:

    入口信号必须是一个数组,所以我改变了它:

    y1=np.array(y)
    yth=savitzky_golay(y1, 51, 3)
    

    而且它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2017-01-29
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多