计算滚动均方根

2024-06-03 14:32:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个振动信号,我想用均方根平滑信号,滚动窗口为21天。数据以分钟为单位,因此21天的滚动窗口意味着21*1440[21*24*60]。 有没有类似的方法:

    # Dummy approach
    df['Rolling_rms'] = df['signal'].rolling(21*1440).rms()

我正在尝试一种使用for循环的方法,这种方法太耗时了:

 # Function for calculating RMS
 def rms_calc(ser):
     return np.sqrt(np.mean(ser**2))

 for i in range(0,len(signal)):
 j = 21*1440+i
 print(rms_calc(df[signal][i:j]))

Tags: 数据方法dfforsignal信号np单位
2条回答

关于@mykola zotko的回答:

全文:

df['signal'].pow(2).rolling(21*24*60).mean().apply(np.sqrt, raw=True)

替代方法

如果您想在计算RMS(我认为在振动分析中很常见)之前将数据窗口归零,那么计算在数学上等同于计算滚动标准偏差。在这种情况下,您也可以只使用the ^{} method for the ^{} object

df['signal'].rolling(21*24*60).std(ddof=0)

您可以将方法apply与自定义函数一起使用:

df['signal'].pow(2).rolling(21*24*60).apply(lambda x: np.sqrt(x.mean()))

相关问题 更多 >