2016-05-02 7 views
0


Ich versuche, einen savitzky_golay Filter zu implementieren, aber ich erhalte immer diese Fehlermeldung:
Savitzky Golay-Filter Fehler

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

Dies ist der Code, das eine exakte Kopie Vergangenheit aus der Bibliothek:

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) 


Antwort

0

Der Eintrag Signal hat ein Array sein, damit ich es geändert:

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

Und es funktioniert.