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

时间序列测量归一化:触摸事件时间轴归一化实操方法咨询

如何实现触摸事件时间轴的归一化?

图3展示了触摸事件过程中压力的变化情况,呈现的是所有用户所有按键触摸的平均值。为解决触摸事件按压时长不同的问题,在对压力值取平均前已对时间轴进行了归一化处理。

好问题!你对“缩放到固定时长”的理解方向是对的,但更准确的是,时间轴归一化的核心是把不同时长的触摸事件,都映射到一个统一的「相对时间区间」(通常是[0,1])——这样不管原始触摸是2秒还是5秒,每个数据点都能对应到相同的“触摸进度”位置,方便后续跨事件取平均或者对比。

结合你给出的例子(3.34秒时长、1000个时间戳+测量值),具体实现可以分成3个步骤:

1. 把时间戳转换成相对偏移量

首先,你需要把原始的绝对时间戳,转换成相对于触摸开始时刻的时间偏移。假设你的第一个时间戳是触摸开始的时刻(记为t_start),那么每个时间点的偏移量计算为:
delta_t_i = t_i - t_start
在你的例子里,假设原始时间戳是从0到3.34秒均匀分布的,那delta_t数组就是直接从0到3.34的1000个数值。

2. 计算归一化的相对时间

接下来,把每个时间偏移量除以整个触摸事件的总时长T_total(也就是你的3.34秒),得到每个点的相对时间:
norm_t_i = delta_t_i / T_total
这样处理后,所有的norm_t_i都会落在[0, 1]区间里——0代表触摸刚按下的瞬间,1代表触摸松开的时刻,中间的数值对应触摸过程中的进度比例。

3. 插值到统一的采样点(可选但关键)

因为你要和其他不同时长、不同采样数量的触摸事件取平均,通常需要把归一化后的时间映射到固定数量的采样点(比如统一用1000个点,或者更精简的500个)。这一步需要用插值来对齐数据:

  • 先定义目标的相对时间序列,比如要生成1000个均匀分布的点:target_norm_ts = [0, 1/999, 2/999, ..., 1]
  • 然后用原始的norm_t_i和对应的压力值,通过插值(最常用的是线性插值)得到每个目标采样点对应的压力值。

给你一段Python的示例代码,直接对应你的场景:

import numpy as np

# 模拟你的原始数据:1000个时间戳(0到3.34秒)和随机压力值
original_timestamps = np.linspace(0, 3.34, 1000)
original_pressures = np.random.rand(1000)  # 替换成你的实际压力测量值

# 步骤1:计算时间偏移(这里原始时间已经从0开始,直接用即可)
delta_t = original_timestamps
total_duration = delta_t[-1]  # 总时长3.34秒

# 步骤2:生成归一化相对时间
normalized_timestamps = delta_t / total_duration

# 步骤3:插值到统一的1000个采样点(如果和其他数据采样数不同,可调整第二个参数)
target_timestamps = np.linspace(0, 1, 1000)
normalized_pressures = np.interp(target_timestamps, normalized_timestamps, original_pressures)

# normalized_pressures就是你要的归一化后压力数据,对应[0,1]的相对时间轴

为什么要这么做?

经过这样的处理,不管某个用户的触摸是快是慢,所有触摸事件的压力数据都被对齐到了相同的“触摸进度”上。之后你就可以把不同用户、不同触摸事件的归一化压力值,按对应的相对时间位置直接取平均,得到像图3里那样的“所有用户所有按键触摸的平均值”——完全不用担心因按压时长不同导致的数据错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:03:39