You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scipy对时间序列进行浮点因子下采样以对齐传感器数据

支持浮点下采样因子的信号对齐方案

针对你的需求,这里有两种可靠的方法,既能处理浮点下采样因子,又能应用抗混叠滤波保证结果准确性:

方法1:使用scipy.signal.resample_poly处理有理分数采样率转换

3.6可以转化为分数18/5,对应采样率从180Hz降到50Hz的比例是50/180 = 5/18。resample_poly函数支持通过分子(up)和分母(down)指定采样率转换比例,并且会自动应用抗混叠FIR滤波器,完美适配你的场景。

代码示例:

import numpy as np
from scipy.signal import resample_poly

# 模拟数据
sensorOneData = np.random.rand(50)
sensorTwoData = np.random.rand(180)

# 采样率转换:180Hz -> 50Hz,对应up=5,down=18
alignedSensorTwoData = resample_poly(sensorTwoData, up=5, down=18)

# 验证输出长度:应该和sensorOneData一致(50)
print(alignedSensorTwoData.shape[0])  # 输出50

方法2:分步插值+整数下采样

如果需要更灵活控制滤波过程,可以先将传感器2的数据上采样到原采样率和目标采样率的最小公倍数对应的采样率,再进行整数下采样:

  1. 180Hz和50Hz的最小公倍数是900Hz,先把180Hz的数据上采样5倍到900Hz;
  2. 再将900Hz的数据下采样18倍到50Hz,这里可以用decimate函数(支持整数因子,且自带抗混叠滤波)。

代码示例:

import numpy as np
from scipy.signal import decimate, resample

sensorOneData = np.random.rand(50)
sensorTwoData = np.random.rand(180)

# 步骤1:上采样到900Hz(180*5)
upsampled = resample(sensorTwoData, len(sensorTwoData)*5)
# 步骤2:下采样18倍到50Hz(900/18)
alignedSensorTwoData = decimate(upsampled, 18)

print(alignedSensorTwoData.shape[0])  # 输出50

两种方法都能保证抗混叠滤波的应用,输出和传感器1长度一致的对齐数据。相比resample,它们解决了无抗混叠滤波的问题;相比decimate,则支持了非整数的下采样因子需求。

内容的提问来源于stack exchange,提问作者RabbitBadger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 08:10:21