第三章 数据采集与预处理:从传感器到可用数据

大家好,我是老张。在储能系统里摸爬滚打了十来年,我越来越觉得一句话是真理:垃圾数据进,垃圾结果出。你算法再牛,模型再花哨,数据源头要是脏了,后面全是白费功夫。

这一章,咱们就聊聊数据采集与预处理。说白了,就是怎么把物理世界里的电压、电流、温度这些信号,变成算法能吃的干净数据。我踩过的坑不少,今天一并倒给你们。

3.1 传感器选型:别在源头省钱

传感器选型,我个人的习惯是「三看」:看精度、看量程、看响应时间。

  • 精度:BMS(电池管理系统)里,电压传感器精度一般要求±1mV以内。温度传感器呢,±0.5℃是底线。我见过有人为了省钱用±5℃的,结果SOC(荷电状态)估算偏差大到离谱。
  • 量程:别只看额定值。电池在过充或过放时,电压会超出正常范围。我建议留出20%的余量。比如单体电池最高4.2V,你选个5V量程的传感器,心里踏实。
  • 响应时间:这个容易被忽略。采样频率高,传感器跟不上,数据就是错的。比如你要做毫秒级的电流采样,传感器响应时间必须小于1ms。
我的经验: 选传感器时,多花20%的钱,能省掉后面80%的数据清洗时间。别问我怎么知道的,都是泪。

3.2 采样频率设计:不是越快越好

采样频率怎么定?很多人觉得越高越好。其实不然。

根据奈奎斯特定理,采样频率至少是信号最高频率的2倍。但储能系统里,信号变化没那么快。温度信号,几秒采一次就够了。电流信号,尤其是负载突变时,可能需要10ms甚至1ms的采样间隔。

我一般这样设计:

  • 电压/电流:10Hz ~ 100Hz(看应用场景)
  • 温度:0.1Hz ~ 1Hz(热惯性大,没必要高频)
  • SOC/SOH:1Hz 左右(状态估计,更新太快没意义)

举个例子,我做储能电站的并网控制时,电流采样用了50Hz。为什么?因为电网是50Hz的,我需要看到每个周期的波形。但温度采样我只用了0.2Hz,5秒一次,足够了。

注意: 采样频率过高,数据量爆炸,存储和计算压力都大。过低呢,又会丢失关键信息。找到平衡点,才是高手。

3.3 异常值检测与清洗:把坏数据揪出来

数据采回来了,第一件事就是检查有没有异常值。我常用的方法有几种:

3.3.1 基于统计的方法

最简单的是「3σ原则」。假设数据服从正态分布,超出均值±3倍标准差的值,就认为是异常。

import numpy as np

def detect_outliers_3sigma(data):
    mean = np.mean(data)
    std = np.std(data)
    threshold = 3 * std
    outliers = np.where(np.abs(data - mean) > threshold)
    return outliers

但这个方法有个坑:如果数据本身有多个异常值,均值和标准差会被污染。我建议先用中位数和MAD(中位数绝对偏差)代替。

3.3.2 基于物理约束的方法

这个更实用。比如锂电池电压,正常范围是2.5V~4.2V。超出这个范围的,直接判为异常。温度也是,-20℃~60℃是常见范围。

我在项目中遇到过,传感器漂移导致电压读数突然跳到5V。用物理约束一卡,秒杀。

3.3.3 基于变化率的方法

电池电压不会瞬间跳变。如果相邻两个采样点的电压差超过某个阈值(比如0.5V),那大概率是异常。

def detect_by_rate(data, max_rate=0.5):
    diff = np.abs(np.diff(data))
    outliers = np.where(diff > max_rate)[0] + 1
    return outliers
核心思路: 异常值检测没有银弹。我通常是「组合拳」:先用物理约束粗筛,再用统计方法细查,最后用变化率补漏。

3.4 缺失值插补方法:别让数据断档

数据采集过程中,丢包、传感器故障、通信中断,都会导致缺失值。怎么补?

3.4.1 前向填充(Forward Fill)

用上一个有效值填充。简单粗暴,适合变化缓慢的信号,比如温度。

import pandas as pd

df['temperature'].fillna(method='ffill', inplace=True)

3.4.2 线性插值

用缺失值前后两个点的连线,估算中间值。适合电压、电流这种近似线性的信号。

df['voltage'].interpolate(method='linear', inplace=True)

3.4.3 多项式插值

如果信号变化复杂,线性插值不够用,可以用二阶或三阶多项式拟合。但要注意,阶数太高容易过拟合,反而引入噪声。

3.4.4 基于模型的插补

这是高级玩法。用机器学习模型(比如KNN、随机森林)预测缺失值。我一般在缺失率超过10%时才用,因为计算量大。

避坑指南: 我曾经在SOC估算中,用线性插值补了连续5分钟的电流缺失值。结果SOC误差直接飙到8%。后来改用模型插补,误差降到2%以内。所以,缺失率越高,插补方法要越谨慎

3.5 知识体系总览

下面这张图,是我自己总结的数据采集与预处理全流程。你照着这个框架走,基本不会出大问题。

数据采集与预处理全流程 传感器选型 精度·量程·响应时间 采样频率设计 奈奎斯特定理·场景适配 数据采集 原始数据流 异常值检测与清洗 3σ原则·物理约束·变化率 组合拳:粗筛→细查→补漏 缺失值插补方法 前向填充·线性插值·多项式插值·模型插补 缺失率越高,方法越谨慎 ✅ 可用数据

嗯,这张图把整个流程串起来了。从传感器选型开始,到采样频率设计,再到异常值检测和缺失值插补,最后得到干净可用的数据。每一步都环环相扣,缺一不可。

3.6 小结

数据采集与预处理,看着基础,但真要做好,需要经验积累。我见过太多人在这上面栽跟头。记住三点:

  • 传感器选型别省钱,源头干净,后面省心。
  • 采样频率要合理,不是越高越好,够用就行。
  • 异常值和缺失值,用组合拳处理,别指望一招鲜。

好了,这一章就到这里。数据准备好了,下一章咱们就可以开始真正的算法设计了。


公众号:蓝海资料掘金营,微信deep3321