小编Med*_*ath的帖子

使用scipy的低通冷杉过滤器的参数

我正在尝试使用scipy编写一个简单的低通滤波器,但我需要帮助定义参数.

我在需要过滤的时间序列数据中有350万条记录,数据以1000赫兹进行采样.

我正在使用scipy库中的signal.firwin和signal.lfilter.

我在下面的代码中选择的参数根本不会过滤我的数据.相反,下面的代码只是产生一些图形上看起来像完全相同的数据的东西,除了时间相位失真,它将图形向右移动略少于1000个数据点(1秒).

在另一个软件程序中,通过图形用户界面命令运行低通冷杉滤波器产生的输出对于每10秒(10,000个数据点)段具有类似的方法,但是这具有显着降低的标准偏差,因此我们基本上失去了这个特定的噪声数据文件并将其替换为保留平均值的内容,同时显示未受更高频率噪声污染的长期趋势.另一个软件的参数对话框包含一个复选框,允许您选择系数的数量,以便"根据样本大小和采样频率进行优化".(我的是在1000赫兹收集的350万个样本,但我想要一个使用这些输入作为变量的函数.)

*任何人都可以告诉我如何调整下面的代码,以便它删除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 = …
Run Code Online (Sandbox Code Playgroud)

signal-processing numpy matplotlib scientific-computing scipy

6
推荐指数
2
解决办法
1万
查看次数