Parameter für low-pass fir filter mit scipy

Ich versuche zu schreiben, einen einfachen low-pass-filter mit scipy, aber ich brauche Hilfe die Definition der Parameter.

Habe ich 3,5 Millionen Datensätze in die Zeitreihen-Daten, die gefiltert werden, und die Daten abgetastet bei 1000 hz.

Ich bin mit signal.firwin und signal.lfilter aus der scipy-Bibliothek.

Die Parameter wähle ich im code unten nicht filter meine Daten an alle. Stattdessen den code unten einfach produziert etwas, das grafisch aussieht wie die gleichen Daten, außer für eine Zeit, phase-distortion, verschiebt sich der graph nach rechts um etwas weniger als 1000 Datenpunkte (1 Sekunde).

In einem anderen software-Programm, das ausführen eines Tiefpass-fir-filter durch die grafische Benutzer-Schnittstelle Befehle, erzeugt eine Ausgabe, die ähnlich wie bedeutet, für jede 10 Sekunde (10,000 Datenpunkt) segment, aber das hat sich drastisch niedrigeren Standardabweichungen, so dass wir im wesentlichen zu verlieren, die Lärm in dieser bestimmten Daten-Datei und ersetzen Sie es mit etwas behält, dass der Mittelwert während mit längerfristigen trends, die sind nicht belastet durch die höheren Frequenz-Lärm. Die anderen software-Parameter das Dialogfeld enthält ein Kontrollkästchen, die Sie auswählen, die Anzahl der Koeffizienten, so dass es "optimiert, basierend auf sample-Größe und die sampling-Frequenz." (Meine sind 3,5 Millionen Proben, die bei 1000 hz, aber ich würde gerne eine Funktion, die verwendet diese Eingänge als Variablen.)

*Kann jemand mir zeigen, wie Sie den code unten, so dass es entfernt alle Frequenzen oberhalb von 0,05 hz?* Ich möchte sehen, wie glatte Wellen in der Grafik, anstatt nur die Zeit, die Verzerrung des gleichen Graphen, die bekomme ich aus dem code unten jetzt.

class FilterTheZ0():
    def __init__(self,ZSmoothedPylab):
        #------------------------------------------------------
        # Set the order and cutoff of the filter
        #------------------------------------------------------
        self.n = 1000
        self.ZSmoothedPylab=ZSmoothedPylab
        self.l = len(ZSmoothedPylab)
        self.x = arange(0,self.l)
        self.cutoffFreq = 0.05

        #------------------------------------------------------
        # Run the filter
        #------------------------------------------------------
        self.RunLowPassFIR_Filter(self.ZSmoothedPylab, self.n, self.l
                                       , self.x, self.cutoffFreq)

    def RunLowPassFIR_Filter(self,data, order, l, x, cutoffFreq):
        #------------------------------------------------------
        # Set a to be the denominator coefficient vector
        #------------------------------------------------------
        a = 1
        #----------------------------------------------------
        # Create the low pass FIR filter
        #----------------------------------------------------
        b = signal.firwin(self.n, cutoff = self.cutoffFreq, window = "hamming")

        #---------------------------------------------------
        # Run the same data set through each of the various
        # filters that were created above.
        #---------------------------------------------------
        response = signal.lfilter(b,a,data)
        responsePylab=p.array(response)

        #--------------------------------------------------
        # Plot the input and the various outputs that are
        # produced by running each of the various filters
        # on the same inputs.
        #--------------------------------------------------

        plot(x[10000:20000],data[10000:20000])
        plot(x[10000:20000],responsePylab[10000:20000])
        show()

        return

InformationsquelleAutor MedicalMath | 2010-11-11

Schreibe einen Kommentar