你好家伙海洋学家,我只是想设计一个四阶低通巴特沃斯滤波器用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 ()