2017-07-17 6 views
0

Ich versuche, meinen funktionierenden Butterworth-Tiefpassfilter 2. Ordnung in Python erster Ordnung umzuwandeln, aber es gibt mir sehr große Zahlen. Hier ist mein zweiter Ordnung Butterworth:2. Ordnung Butterworth in 1. Ordnung umwandeln

import math 
import numpy as np 

def bw_2nd(x=100, y, fc=200, fs=1000): 
    filtered_y = np.zeros(len(x)) 

    omega_c = math.tan(np.pi*fc/fs) 
    k1 = np.sqrt(2)*omega_c 
    k2 = omega_c**2 
    a0 = k2/(1+k1+k2) 
    a1 = 2*a0 
    a2 = a0 
    k3 = 2*a0/k2 
    b1 = -(-2*a0+k3) 
    b2 = -(1-2*a0-k3) 

    filtered_y[0] = y[0] 
    filtered_y[1] = y[1] 

    for i in range(2, len(x)): 
     filtered_y[i] = np.int(a0*y[i]+a1*y[i-1]+a2*y[i-2]-(b1*filtered_y[i-1]+b2*filtered_y[i-2])) 

    return filtered_y 

Hier ist meine nicht arbeit 1. Ordnung Butterworth:

def bw_1st(x=100, y, fc=200, fs=1000): 
    filtered_y = np.zeros(len(x)) 

    omega_c = math.tan(np.pi*fc/fs) 
    k1 = np.sqrt(2)*omega_c 
    k2 = omega_c**2 
    a0 = k2/(1+k1+k2) 
    a1 = 2*a0 
    a2 = a0 
    k3 = 2*a0/k2 
    b1 = -(-2*a0+k3) 

    filtered_y[0] = y[0] 

    for i in range(1, len(x)): 
     filtered_y[i] = np.int(a0*y[i]+a1*y[i-1]-(b1*filtered_y[i-1])) 

    return filtered_y 

... Ich entfernte alle [i-2] s, die ein Feed- waren Vorwärts und ein Feedback. Ich dachte, es würde funktionieren, aber es nicht. Können Sie mir sagen, wie ich das beheben kann? Vielen Dank.

+0

Haben Sie eine Referenz zu dieser Implementierung? –

+0

Ja: [link] (http://biomech.byu.edu/portals/83/docs/exsc663/part01/filtering_considerations.pdf) – IanHacker

+1

Beide sollten in Ordnung sein, wenn Sie die 'np.int (...) entfernen '. Ich bekomme keine Probleme beim Anrufen (nachdem ich das entfernt habe). –

Antwort

0

Beides sollte in Ordnung sein, wenn Sie die np.int(...) entfernen. Ich bekomme keine Probleme beim Anrufen (nachdem ich das entfernt habe).