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

实时传感器数据归一化方案求助:无全局最值时的实现方法

实时传感器数据归一化可行方案

1. 动态维护最值

累计更新全局最值

维护两个变量实时记录已接收数据的最小/最大值,每收到新数据就更新,直接代入归一化公式:

current_min = float('inf')
current_max = -float('inf')

def normalize_cumulative(new_data):
    global current_min, current_max
    current_min = min(current_min, new_data)
    current_max = max(current_max, new_data)
    if current_max == current_min:
        return 0.0  # 避免除以0
    return (new_data - current_min) / (current_max - current_min)

缺点是如果后续出现超出历史范围的数据,之前归一化的结果无法回溯修正,适合对历史数据一致性要求不高的场景。

滑动窗口最值

只保留最近N个数据,计算窗口内的最值进行归一化,适配数据分布的近期变化:

from collections import deque

window = deque(maxlen=1000)  # 窗口大小可根据需求调整
def normalize_window(new_data):
    window.append(new_data)
    win_min = min(window)
    win_max = max(window)
    if win_max == win_min:
        return 0.0
    return (new_data - win_min) / (win_max - win_min)

2. 基于传感器标称量程归一化

如果传感器有明确的输出范围(比如官方标注0-5V对应0-100℃),直接用固定量程最值计算:

# 替换为传感器实际的量程边界
SENSOR_MIN = 0
SENSOR_MAX = 100

def normalize_fixed_range(new_data):
    if SENSOR_MAX == SENSOR_MIN:
        return 0.0
    return (new_data - SENSOR_MIN) / (SENSOR_MAX - SENSOR_MIN)

这个方案最稳定,完全不依赖历史数据,前提是你清楚传感器的输出边界。

3. 自适应Z-score归一化

如果不需要映射到[0,1]区间,而是关注数据相对分布,可以动态更新均值和方差,做Z-score归一化:

count = 0
mean = 0.0
m2 = 0.0  # 用于计算方差的中间变量

def normalize_zscore(new_data):
    global count, mean, m2
    count += 1
    delta = new_data - mean
    mean += delta / count
    delta2 = new_data - mean
    m2 += delta * delta2
    if count < 2:
        return 0.0
    variance = m2 / (count - 1)
    std_dev = variance ** 0.5
    if std_dev == 0:
        return 0.0
    return (new_data - mean) / std_dev

4. 指数加权滑动最值

给近期数据更高权重,平滑过渡数据范围的变化,避免单次极端值拉偏结果:

alpha = 0.1  # 权重系数,越接近1越偏向新数据
ewma_min = None
ewma_max = None

def normalize_ewm(new_data):
    global ewma_min, ewma_max
    if ewma_min is None:
        ewma_min = new_data
        ewma_max = new_data
    else:
        ewma_min = alpha * new_data + (1 - alpha) * ewma_min
        ewma_max = alpha * new_data + (1 - alpha) * ewma_max
    if ewma_max == ewma_min:
        return 0.0
    return (new_data - ewma_min) / (ewma_max - ewma_min)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:35:26