Python:将传感器数据的采样率降至固定采样率

2024-06-10 22:21:35 发布

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

我有来自加速度计、陀螺仪、磁强计等传感器的数据,可以用可变采样率读取。我想减少采样到一个固定的采样率(30Hz)。以下是加速度计数据的示例:

                          Sensor         X         Y          Z Mode Position
Timestamp                                                                  
2013-02-12 05:51:58.265      A  0.561632  4.035009  11.055410  Car    Chest
2013-02-12 05:51:58.267      A  1.404679  3.881728   9.484278  Car    Chest
2013-02-12 05:51:58.268      A  1.174158  3.919450   9.981843  Car    Chest
2013-02-12 05:51:58.269      A  0.561632  2.923720  11.093731  Car    Chest
2013-02-12 05:51:58.284      A  1.519640  3.038681  10.174043  Car    Chest
2013-02-12 05:51:58.286      A  2.480342  2.861599   8.639883  Car    Chest
2013-02-12 05:51:58.288      A  1.814826  2.550546   9.535022  Car    Chest
2013-02-12 05:51:58.289      A  2.040557  2.078129  10.788665  Car    Chest
2013-02-12 05:51:58.290      A  2.498754  2.400708  10.625804  Car    Chest
2013-02-12 05:51:58.292      A  2.208208  4.653673   9.372011  Car    Chest
2013-02-12 05:51:58.310      A  2.909051  4.384083   8.916957  Car    Chest
2013-02-12 05:51:58.320      A  2.189347  3.823349   8.916657  Car    Chest
2013-02-12 05:51:58.340      A  1.487607  3.529510   9.110355  Car    Chest
2013-02-12 05:51:58.360      A  1.665736  3.792813   9.294322  Car    Chest
2013-02-12 05:51:58.396      A  1.856140  4.493655   8.671767  Car    Chest
2013-02-12 05:51:58.402      A  0.986748  4.073030   9.238488  Car    Chest
2013-02-12 05:51:58.426      A  1.353036  4.342619   9.574390  Car    Chest
2013-02-12 05:51:58.440      A  2.628983  4.539909   9.556427  Car    Chest
2013-02-12 05:51:58.470      A  2.980901  4.269272   9.765094  Car    Chest
2013-02-12 05:51:58.494      A  2.846331  3.756588  10.500813  Car    Chest

为了找出原始采样率,我尝试了:

pd.infer_freq(df.index)

但它返回None,可能是因为时间戳索引不是“常量”。因此,我尝试了:

df[['X', 'Y', 'Z']].resample('1S').count().head(20)
Out[97]: 
                      X   Y   Z
Timestamp                      
2013-02-12 05:51:58  43  43  43
2013-02-12 05:51:59  49  49  49
2013-02-12 05:52:00  49  49  49
2013-02-12 05:52:01  50  50  50
2013-02-12 05:52:02  49  49  49
2013-02-12 05:52:03  50  50  50
2013-02-12 05:52:04  50  50  50
2013-02-12 05:52:05  51  51  51
2013-02-12 05:52:06  49  49  49
2013-02-12 05:52:07  50  50  50
2013-02-12 05:52:08  50  50  50
2013-02-12 05:52:09  50  50  50
2013-02-12 05:52:10  50  50  50
2013-02-12 05:52:11  50  50  50
2013-02-12 05:52:12  50  50  50
2013-02-12 05:52:13  49  49  49
2013-02-12 05:52:14  48  48  48
2013-02-12 05:52:15  48  48  48
2013-02-12 05:52:16  46  46  46
2013-02-12 05:52:17  47  47  47

是这样吗?最后,这里是最后一个问题:如何将采样降低到固定的采样率(30Hz)? 它可以是:

freq = 30
ms = int(1/freq * 1000.0)
acc_df[['X', 'Y', 'Z']].resample(f'{ms}L').mean().head(20)
Out[101]: 
                                X         Y          Z
Timestamp                                             
2013-02-12 05:51:58.251  0.925525  3.689977  10.403815
2013-02-12 05:51:58.284  2.210197  3.138203   9.721769
2013-02-12 05:51:58.317  1.838477  3.676430   9.013506
2013-02-12 05:51:58.350  1.665736  3.792813   9.294322
2013-02-12 05:51:58.383  1.421444  4.283342   8.955127
2013-02-12 05:51:58.416  1.991010  4.441264   9.565409
2013-02-12 05:51:58.449  2.980901  4.269272   9.765094
2013-02-12 05:51:58.482  2.867362  3.984789  10.556423
2013-02-12 05:51:58.515  3.096760  5.097275  11.056608
2013-02-12 05:51:58.548       NaN       NaN        NaN
2013-02-12 05:51:58.581  2.998265  3.413352  12.136313
2013-02-12 05:51:58.614  2.888768  2.568434  12.271406
2013-02-12 05:51:58.647  2.061812  2.882406  10.878478
2013-02-12 05:51:58.680       NaN       NaN        NaN
2013-02-12 05:51:58.713       NaN       NaN        NaN
2013-02-12 05:51:58.746  1.299747  1.917063  11.613151
2013-02-12 05:51:58.779  0.625948  0.113414   9.400651
2013-02-12 05:51:58.812  0.518933  2.943180   6.333779
2013-02-12 05:51:58.845  1.275872  1.974245   6.052140
2013-02-12 05:51:58.878  3.206257  2.782788   5.986052

提前谢谢你


Tags: 数据示例df传感器nanoutcarhead