3
\ begingroup美元

你好家伙海洋学家,我只是想设计一个四阶低通巴特沃斯滤波器用15天截止时期,在python中,目的是过滤海底压力(OBP)时间序列每小时采样一次。这是我的代码:

熊猫作为pd导入导入numpy scipy np scipy导入。信号进口黄油、filtfilt sosfiltfilt M = len (OBP [' SPFO4 ']) #点数# OBP (“SPFO4”)是OBP时间序列。# = = =应用逐渐减少函数β= 2窗口= scipy.signal.windows.kaiser (M,β,信谊= True) OBP [' SPFO4 '] =窗口* OBP (“SPFO4”) # # # # # # # # # # #应用过滤器fs = 1 #采样frecuency(每小时采样)fc = 1/360 # 24(小时)* 15(天)= 360小时,#我正确的在这一步吗?fc_norm = fc / (fs / 2) #定义过滤器的顺序(4日订单)常用filter_order = 2 #我使用2,因为它是一个forward-backward过滤,#输入是mulplied由两个吗?#生成巴特沃斯滤波器系数b, a =黄油(filter_order、fc_norm btype =“低通”,模拟= False) OBP [' SPFO4 '] = filtfilt (b, a, OBP [' SPFO4 '])

我有记录自己建立一个代码正确的信号分析,因为我新。所以我担心的是,(1)如果我的代码写得很好,我需要的目的?(2)如你所知,我用signal.filtfilt(),但我已经看到其他选择:signal.sosfiltfilt ()。我很困惑,因为获得的两张图片看起来有点不同。为什么?

任何人都可以帮我理解前面的问题,取决于什么巴特沃斯滤波器中使用一定的顺序(从这篇文章我把订单:https://agupubs.onlinelibrary.wiley.com/doi/full/10.1029/2020JB020065第4页,第二段)?任何科学文章,解释这是感激。我附上图片。

这是获得使用signal.filtfilt ()

在这里输入图像描述

这是获得使用signal.sosfiltfilt ()

在这里输入图像描述

\ endgroup美元
2

1回答1

1
\ begingroup美元

我认为最好的办法是使用的过滤器scipy:https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.butter.html

从scipy导入信号

进口numpy np

b, a =信号。黄油(4,100,“低”,模拟= True)

\ endgroup美元

    你的答案

    通过点击“发布你的答案”,你同意我们服务条款并承认您已阅读并理解我们的隐私政策的行为准则

    不是你要找的答案?浏览其他问题标记问你自己的问题