2. 时序数据基础

在进入 TinyML 自编码器异常检测的模型设计与部署之前,我们必须先建立对时序数据本身的系统认知。时间序列不仅是"按时间排列的数字列表",它承载着设备状态、环境变化与业务行为的连续轨迹。对于 TinyML 场景而言,传感器采集到的振动、温度、电流、压力等信号,本质上都是时间序列。理解其数学定义、构成特征与采集链路,直接决定了后续特征工程、模型输入构造以及异常判定阈值的合理性。本节将围绕时间序列的定义、三大核心特征(趋势、季节性、噪声)、常见数据类型与采集方式展开,为后续自编码器模型的输入设计打下坚实基础。

时间序列构成与采集链路全景图 时间序列定义 {x(t): t ∈ T} 有序、等间隔/非等间隔观测 三大特征 趋势 (Trend) 季节性 (Seasonality) 噪声 (Noise) 常见数据类型 连续型 / 离散型 / 事件型 单变量 / 多变量 平稳 / 非平稳 采集方式与链路 传感器感知 振动/温度/电流 信号调理 放大/滤波/隔离 ADC采样 采样率/分辨率 MCU存储/预处理 滑动窗口/归一化 模型 推理 TinyML 部署关键约束 采样率与功耗平衡 | 窗口长度与内存限制 | 数据质量与异常判定 实时性要求 | 标定漂移 | 通信带宽

上图展示了时间序列从定义到采集链路的完整视图。在 TinyML 异常检测场景中,我们通常关注的是嵌入式设备上传感器所产生的高频或中频数据流。这些数据经过信号调理、模数转换(ADC)后,以固定采样率进入微控制器(MCU)的存储与预处理模块,最终送入自编码器模型进行重建误差计算。理解这一链路中的每一个环节,是后续设计高效、鲁棒异常检测系统的前提。

2.1 时间序列的数学定义与本质属性

时间序列(Time Series)是一组按照时间先后顺序排列的观测值集合,记为 {x(t), t ∈ T},其中 T 为时间索引集合。在 TinyML 场景中,T 通常是离散等间隔的整数集合,例如 t = 0, 1, 2, ..., N-1,对应采样时刻。每个观测值 x(t) 可以是标量(单变量时序)或向量(多变量时序)。从数学角度看,时间序列可以被视为一个随机过程的一次实现,其内在的统计特性(均值、方差、自相关)可能随时间变化,也可能保持稳定。

时间序列的本质属性包括:有序性(观测值的顺序不可交换)、依赖性(相邻观测值之间存在统计相关)、动态性(系统状态随时间演化)。这些属性决定了我们不能将时序数据简单地视为独立同分布的样本集合,而必须采用能够捕捉时间依赖结构的模型。自编码器之所以适用于时序异常检测,正是因为它能够学习正常时序模式中的依赖关系,并在异常出现时产生较大的重建误差。

经验提醒:在 TinyML 项目中,时间序列的"有序性"往往被初学者忽略。例如,将传感器数据随机打乱后送入自编码器训练,模型将无法学习到任何有意义的时序模式,导致异常检测完全失效。务必保持数据的时间顺序,并按时间窗口切分训练集与测试集。

2.2 时间序列的三大核心特征

任何时间序列都可以分解为三个基本成分的叠加:趋势(Trend)、季节性(Seasonality)和噪声(Noise)。在 TinyML 异常检测中,准确识别这些成分有助于我们选择合适的预处理策略和模型输入形式。

2.2.1 趋势(Trend)

趋势是时间序列在较长时期内呈现的持续上升、下降或平稳的总体方向。它反映了系统的长期演变规律。例如,工业电机在持续运行过程中,轴承温度可能因磨损加剧而呈现缓慢上升趋势;环境监测中的气温序列则可能因季节更替呈现周期性趋势。在自编码器训练中,如果趋势成分过强,模型可能会将趋势本身视为"正常模式",从而对趋势的突变不敏感。因此,通常需要对原始序列进行差分或去趋势处理,使序列变得平稳。

2.2.2 季节性(Seasonality)

季节性是指时间序列在固定时间间隔内重复出现的周期性波动。这种周期可以是自然周期(如一天24小时、一年四季),也可以是设备运行周期(如机器每60秒完成一个工作循环)。季节性成分在工业设备监测中极为常见:例如,空压机的排气压力随活塞运动呈现周期性波动;风力发电机的输出功率随叶片旋转呈现周期性变化。对于自编码器模型,季节性意味着输入窗口长度应至少覆盖一个完整周期,否则模型无法学习到周期内的完整模式。

2.2.3 噪声(Noise)

噪声是去除趋势和季节性后剩余的随机波动部分,通常由测量误差、电磁干扰、机械振动等不可控因素引起。在理想情况下,噪声应服从均值为零的随机分布。然而,实际传感器数据中的噪声往往具有异方差性(方差随时间变化)或自相关性(噪声项之间存在相关)。在自编码器异常检测中,噪声水平直接影响重建误差的基线。如果噪声过大,正常样本的重建误差也会偏高,导致异常阈值难以设定。

特征成分 数学表示 TinyML 场景示例 对自编码器的影响 预处理策略
趋势 T(t) = α + βt 电池电压随放电时间缓慢下降 模型可能将趋势视为正常,掩盖异常突变 一阶差分、高通滤波、线性去趋势
季节性 S(t) = S(t + P) 电机振动随转轴旋转周期变化 窗口长度需覆盖至少一个周期 周期差分、STL分解、窗口对齐
噪声 ε(t) ~ N(0, σ²) ADC量化误差、电磁干扰 提高重建误差基线,影响阈值设定 滑动平均、中值滤波、小波去噪

2.3 常见时序数据类型与采集方式

在 TinyML 异常检测项目中,我们面对的时序数据类型多种多样。根据数据的物理来源和数学特性,可以将其分为以下几类:

2.3.1 按数据连续性分类

  • 连续型时序数据:观测值在某个实数区间内连续取值,如温度(25.3°C)、电压(3.28V)、振动加速度(0.45g)。这类数据通常由模拟传感器经 ADC 采样获得,是自编码器模型最常见的输入形式。
  • 离散型时序数据:观测值只能取有限个离散值,如设备状态码(0=正常,1=警告,2=故障)、计数数据(每分钟产品数量)。离散型数据需要经过适当的编码(如 one-hot 或嵌入)后才能输入自编码器。
  • 事件型时序数据:记录特定事件发生的时刻与属性,如报警事件日志、网络数据包到达记录。这类数据通常需要转换为固定频率的计数序列或时间戳序列后才能用于模型训练。

2.3.2 按变量维度分类

  • 单变量时间序列:每个时刻只有一个观测值,如单一温度传感器读数。自编码器输入为长度为 W 的一维向量。
  • 多变量时间序列:每个时刻有多个观测值,如同时采集振动、温度、电流三个通道。自编码器输入为 W×C 的二维矩阵(W 为窗口长度,C 为通道数)。多变量时序能够提供更丰富的状态信息,但同时也增加了模型参数量和计算复杂度。

2.3.3 按平稳性分类

  • 平稳时间序列:统计特性(均值、方差)不随时间变化。这类序列最适合自编码器直接建模。
  • 非平稳时间序列:统计特性随时间变化,如存在趋势或季节性。需要先进行差分或分解处理,使其平稳化后再输入模型。

2.3.4 采集方式与工程链路

在 TinyML 设备上,时序数据的采集通常遵循以下工程链路:

  1. 传感器感知:选择适合被测物理量的传感器(如 MEMS 加速度计、热电偶、霍尔电流传感器),并确定安装位置与方向。传感器的量程、灵敏度、频率响应直接影响数据质量。
  2. 信号调理:对传感器输出的微弱模拟信号进行放大、滤波、电平偏移等处理,使其适配 ADC 的输入范围。例如,振动传感器输出可能仅有 ±2V,需要经过电荷放大器或仪表放大器调理至 0-3.3V。
  3. ADC 采样:以固定采样率(如 1kHz)将模拟信号转换为数字量。采样率的选择需遵循奈奎斯特定理,即至少为信号最高频率成分的 2 倍。对于振动监测,若关注 1kHz 以内的频率成分,采样率应不低于 2kHz。
  4. MCU 存储与预处理:采样数据以 DMA 方式直接存入内存环形缓冲区,避免 CPU 中断频繁。预处理包括滑动窗口切分、归一化(如 Z-score)、缺失值填充等。
  5. 模型推理:将预处理后的窗口数据送入自编码器模型,计算重建误差并与阈值比较,输出异常判定结果。
风险提示:采样率并非越高越好。过高的采样率会带来巨大的数据量和功耗开销,在电池供电的 TinyML 设备上尤其不可取。例如,一个 3 轴加速度计以 3.2kHz 采样、16 位分辨率,每秒产生约 19.2KB 数据,连续运行 1 小时将产生约 69MB 数据,远超 MCU 内部存储容量。实际部署中应根据信号带宽和异常检测需求,合理选择采样率,并考虑使用片上数据降维(如仅存储 FFT 频谱峰值)或事件触发采样(仅在信号变化超过阈值时记录数据)来降低数据量。

2.4 案例拆解:工业电机轴承振动数据的采集与特征识别

为帮助理解上述概念,我们以一个典型的工业电机轴承振动监测场景为例,完整展示从传感器选型到数据特征识别的过程。

背景与目标:某工厂的离心泵电机(额定功率 15kW,转速 2900rpm)需要部署 TinyML 异常检测系统,目标是提前识别轴承早期故障(如内圈点蚀、外圈裂纹)。电机轴承的故障特征频率通常在 50Hz-500Hz 范围内,且故障初期信号能量微弱,容易被正常振动噪声淹没。

初始现象与约束:电机正常运行时,轴承振动加速度幅值约为 0.2g-0.5g(g 为重力加速度)。工厂要求检测系统在故障发生前至少 7 天发出预警,且设备端功耗预算不超过 50mW,MCU 内存不超过 256KB。

关键参数与采集配置:

  • 传感器:选用 IEPE 型压电加速度计,灵敏度 100mV/g,频率响应 0.5Hz-10kHz,量程 ±50g。
  • 采样率:根据轴承故障特征频率最高 500Hz,取 5 倍裕量,设定采样率为 2.56kHz。
  • ADC:16 位分辨率,输入范围 ±3.3V,实际有效分辨率约 14 位(考虑噪声)。
  • 窗口长度:电机转速 2900rpm 对应旋转周期约 20.7ms,取 4 个完整旋转周期作为窗口,即窗口长度 W = 2.56kHz × 0.083s ≈ 212 个采样点,向上取整为 256 点。

分析判断过程:采集到的原始振动信号如图 2 所示(此处以文字描述代替图示)。首先对信号进行快速傅里叶变换(FFT),发现频谱中存在明显的 48.3Hz 基频成分(对应电机转频 2900/60 ≈ 48.3Hz)及其谐波。进一步观察,在 145Hz 附近存在一个幅值较小的边带峰,经计算与轴承外圈故障特征频率(BPFO ≈ 4.8 × 转频 ≈ 232Hz)不符,但与内圈故障特征频率(BPFI ≈ 7.2 × 转频 ≈ 348Hz)的 1/2 分频接近。结合时域波形中存在的周期性冲击脉冲,初步判断轴承可能存在早期内圈点蚀。

实际操作步骤:

  1. 将原始振动信号进行带通滤波(10Hz-1kHz),去除低频漂移和高频噪声。
  2. 对滤波后的信号进行包络分析(Hilbert 变换),提取包络谱。
  3. 在包络谱中确认 348Hz 处存在明显峰值,且伴随 48.3Hz 的边带,确认内圈故障特征。
  4. 将原始振动信号按 256 点窗口切分,计算每个窗口的均方根值(RMS)和峰值因子(Crest Factor),作为后续自编码器输入的辅助特征。

结果对比与代价:通过上述分析,系统在轴承故障发生前 9 天成功预警。对比事后拆检结果,轴承内圈确实存在直径约 2mm 的点蚀坑。若采用传统定期维护策略(每 3 个月更换一次轴承),该故障可能导致非计划停机,损失约 8 万元/小时。而 TinyML 监测系统的硬件成本约 300 元/套,功耗实测 42mW,满足预算约束。

复盘经验:本案例中,时间序列的趋势成分(轴承磨损导致的振动缓慢上升)与季节性成分(旋转周期引起的振动波动)同时存在。自编码器模型在训练时,需要将窗口数据归一化到 [0,1] 区间,并确保训练数据覆盖电机在不同负载(如 50%、75%、100% 额定负载)下的正常振动模式,否则模型会将负载变化误判为异常。

核心要点总结:时间序列的三大特征(趋势、季节性、噪声)在 TinyML 异常检测中具有不同的处理策略。趋势需要通过差分或滤波去除,季节性要求窗口长度覆盖完整周期,噪声则决定了重建误差的基线水平。采集方式上,采样率、ADC 分辨率、窗口长度三者相互制约,需根据信号带宽、内存容量和功耗预算综合权衡。理解这些基础概念,是后续设计自编码器输入格式、选择损失函数和设定异常阈值的前提。