параметры пихтового фильтра нижних частот с использованием scipy

Я пытаюсь написать простой фильтр нижних частот, используя scipy, но мне нужна помощь в определении параметров.

У меня есть 3,5 миллиона записей в данных временных рядов, которые необходимо отфильтровать, и данные отбираются с частотой 1000 Гц.

Я использую signal.firwin и signal. lfilter из библиотеки scipy.

Параметры, которые я выбираю в приведенном ниже коде, вообще не фильтруют мои данные. Вместо этого приведенный ниже код просто создает что-то, что графически выглядит как те же точные данные, за исключением искажения временной фазы, которое сдвигает график вправо чуть менее чем на 1000 точек данных (1 секунду).

В другой программе выполняется запуск Пихтовый фильтр нижних частот с помощью команд графического пользовательского интерфейса производит выходные данные, которые имеют аналогичные средства для каждого 10-секундного сегмента (10000 точек данных), но имеют значительно более низкие стандартные отклонения, так что мы по существу теряем шум в этом конкретном файле данных и заменяем его на что-то, что сохраняет среднее значение, показывая более долгосрочные тенденции, не искаженные высокочастотным шумом. Другое программное обеспечение ' В диалоговом окне параметров есть флажок, который позволяет вам выбрать количество коэффициентов, чтобы оно «оптимизировалось на основе размера выборки и частоты выборки». (У меня 3,5 миллиона выборок, собранных на частоте 1000 Гц, но мне нужна функция, которая использует эти входные данные в качестве переменных.)

* Кто-нибудь может показать мне, как настроить приведенный ниже код так, чтобы он удалял все частоты выше 0,05 hz? * Я бы хотел видеть на графике плавные волны, а не просто временные искажения того же самого графика, которые я получаю из приведенного ниже кода.

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
6
задан MedicalMath 11 November 2010 в 08:14
поделиться