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

如何检测传感器数据上升趋势并处理数值溢出问题

带回绕的传感器时序数据上升趋势检测

传感器数据达到最大值(如255)后会回绕归零,常规趋势检测会误判这种回绕为下降,我们可以通过数据转换消除回绕影响,再用常规方法判断上升趋势。

核心思路

当相邻两个数据的差值为负且绝对值超过溢出阈值的一半(255/2≈127)时,判定为发生了回绕,给后续数据加上溢出阈值+1(即256)的偏移量,将回绕后的数值转换为连续递增的虚拟值,再基于转换后的数据检测趋势。

实现步骤

1. 预处理数据,消除回绕影响

遍历原始时序数据,维护一个偏移量:

  • 初始偏移量为0
  • 若当前值与前一个原始值的差为负,且差值的绝对值 > 溢出阈值/2,说明发生回绕,偏移量 += 溢出阈值+1
  • 当前值的虚拟值 = 原始值 + 偏移量

2. 检测上升趋势

对转换后的虚拟值序列,可通过两种简单方法判断:

  • 统计相邻虚拟值的差值为正的比例(若比例接近1,说明整体上升)
  • 用线性回归计算斜率(斜率为正则呈上升趋势)

代码实现(Python)

def process_overflow_data(raw_data, overflow_threshold=255):
    offset = 0
    processed = []
    prev_raw = raw_data[0]
    processed.append(prev_raw + offset)
    
    for curr_raw in raw_data[1:]:
        diff = curr_raw - prev_raw
        if diff < 0 and abs(diff) > overflow_threshold / 2:
            offset += overflow_threshold + 1
        processed.append(curr_raw + offset)
        prev_raw = curr_raw
    return processed

def is_upward_trend(processed_data):
    # 统计正差值比例,比例超过0.8则判定为上升趋势(可按需调整阈值)
    positive_diff_count = 0
    total = len(processed_data) - 1
    for i in range(total):
        if processed_data[i+1] > processed_data[i]:
            positive_diff_count += 1
    return positive_diff_count / total > 0.8

# 测试示例数据
data1 = [191, 198, 204, 217, 230, 241, 255, 17, 32, 67, 90, 117]
processed1 = process_overflow_data(data1)
print(f"示例1处理后数据: {processed1}")
print(f"示例1是否上升趋势: {is_upward_trend(processed1)}")

data2 = [113, 182, 201, 9, 74, 91, 148, 182, 231, 41, 72, 100]
processed2 = process_overflow_data(data2)
print(f"示例2处理后数据: {processed2}")
print(f"示例2是否上升趋势: {is_upward_trend(processed2)}")

结果说明

  • 示例1处理后数据:[191, 198, 204, 217, 230, 241, 255, 273, 288, 323, 346, 373],所有相邻差值均为正,判定为上升趋势。
  • 示例2处理后数据:[113, 182, 201, 265, 330, 347, 404, 438, 487, 553, 584, 612],所有相邻差值均为正,判定为上升趋势。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 04:35:28