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

Sensor Data采样频率不匹配场景下电压上采样插值需求咨询

实现方案

你提到的pandas resample方法是针对DatetimeIndex、TimedeltaIndex这类时间索引设计的,主要用于处理常规的时间频率转换(比如周转日、小时转分钟),你当前使用的是数值型的时间戳,不需要转换为时间格式,用重索引+插值的方案更简单高效,以下是两种可直接运行的实现方式:

方法1:Pandas实现(符合你要的pandas操作习惯)

import pandas as pd
import numpy as np

# 原始电压数据
volt_time = np.array([0.07, 0.14, 0.21, 0.28, 0.35, 0.42, 0.49, 0.56, 0.63, 0.7, 0.77, 0.84])
volt_value = np.linspace(2.2, 5.5, 12)

# 目标16个时间点(和压力传感器对齐的序列)
target_time = np.array([0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8])

# 构造索引为时间的电压序列
volt_series = pd.Series(volt_value, index=volt_time)

# 重索引扩展到目标时间点后做插值,线性插值是传感器数据最常用的插值方式
upsampled_volt = volt_series.reindex(volt_series.index.union(target_time))\
                            .interpolate(method='linear')\
                            .reindex(target_time)

print(upsampled_volt)

如果需要更换插值方式,直接修改interpolate的method参数即可,可选参数包括quadratic(二次插值)、spline(样条插值)等。

方法2:Scipy轻量插值实现(不需要依赖pandas索引操作)

如果不需要用到pandas的其他数据处理能力,直接用scipy的一维插值工具更简洁:

from scipy.interpolate import interp1d
import numpy as np

# 原始数据和目标时间点定义和上面一致
volt_time = np.array([0.07, 0.14, 0.21, 0.28, 0.35, 0.42, 0.49, 0.56, 0.63, 0.7, 0.77, 0.84])
volt_value = np.linspace(2.2, 5.5, 12)
target_time = np.array([0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8])

# 生成插值函数,fill_value参数用于处理边界点超出原始时间范围的外插需求
f = interp1d(volt_time, volt_value, kind='linear', fill_value="extrapolate")
upsampled_volt = f(target_time)

print(upsampled_volt)

注意事项

  • 你提供的目标时间第一个点0.05早于电压数据最早时间0.07,需要做边界外插,如果不需要外插可以把目标时间范围限制在原始电压的时间范围内,或者自定义边界填充值
  • 普通传感器场景下线性插值的精度已经足够,对平滑度要求高的场景可以选择更高阶的插值方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 19:09:02