输入平滑会引入延迟,与跟手性冲突
别名: 输入滤波 · 跟手性 · 滑动平均 · low-pass filtering input
概念解释
要压住生理性震颤在光标或笔迹上留下的抖动,一个直接办法是对原始输入信号做平滑(smoothing)——比如滑动平均、低通滤波——但这类处理必然会引入延迟,让界面反馈滞后于用户实际手部位置,损害跟手性(directness / 输入到反馈的即时对应感)。抖动和延迟因此成为一对此消彼长的权衡,不存在一种平滑方式能同时把两者都降到最低。
机制
任何平滑算法本质上都是把当前输出值建立在一段时间窗口内的多个历史采样点之上,用「多点平均」换取「单点噪声被稀释」。窗口越长,越多的震颤被平均掉,但输出反映的也越是若干帧之前的位置而非当下位置,延迟随窗口线性增长;窗口越短,延迟越小,但平均掉的震颤样本点也越少,抖动残留越明显。二者不可能同时最优,因为它们其实是同一个参数(窗口长度)的两个方向的后果,调整这个参数只能在抖动残留量和延迟量之间移动工作点,而不能让两者一起变小。
怎么研究
评估平滑算法通常同时测量两个指标:残留抖动幅度(平滑后轨迹相对真实意图轨迹的偏差)和感知延迟(输入到反馈之间的时间差,可用高速摄像或时间戳比对客观测量,也可用主观量表评估「跟手感」);不同滤波器(简单滑动平均、指数加权、卡尔曼滤波)在同一延迟预算下能压住的抖动量不同,是比较各类算法优劣的常见维度。
方法论注意点:主观「跟手性」评分对延迟很敏感,即便是几十毫秒级的差异也可能被用户明确感知到,评估平滑方案时不能只看抖动是否降低,必须把延迟增量单独测出来一起报告。
边界
这个权衡只在需要连续实时反馈、且抖动幅度处于生理性震颤这个量级的场景下成立;对于离散事件判定(比如判断是否发生了一次点击)而不是连续轨迹展示,平滑的代价更小,因为此时延迟几十毫秒通常不影响判定结果。抖动幅度远超生理性震颤量级的病理性震颤,单靠这类通用平滑手段的补偿效果也有限。
怎么落地
- 对以生理性震颤为主要噪声源的常规场景,优先用容差半径或死区处理小幅抖动,只在死区处理仍不够时才叠加轻量平滑,避免一上来就用较长窗口的滤波器换取延迟。
- 需要高跟手性的连续操作(拖拽、绘画笔迹)应把平滑窗口控制在能被感知到的延迟阈值之内,宁可留一点残余抖动,也不要让用户明显感到「手指移动了,光标还没跟上」。
- 验证办法:分别测出不同窗口长度下的残留抖动幅度与感知延迟,绘制两者的权衡曲线,在曲线上选一个延迟不超过可接受阈值、抖动也已明显下降的工作点,而不是单独优化其中一个指标。