使用K-means算法进行异常侦测
前言
本案例运行于 AT32F403A MCU 平台,利用 LSM6DS3TR-C 九轴传感器 采集振动数据(X轴加速 度),通过自学习模型建立“正常工作状态特征”,并在运行中检测异常振动行为。
系统主要功能:
※ 自学习 (Learning):采集正常状态下的传感器信号,并建立模型。
※ 实时检测 (Detection):在模型基础上,计算实时信号与正常模型的偏离程度。
※ 异常报警 (Anomaly Alert):当偏离程度超过阈值时,点亮LED并显示提示。
支持型号: AT32F403A 系列 、AT32F407 系列
1 资源准备
本章节主要介绍所需的硬件环境、软件环境和板载器件。
1.1 硬件环境
AT32-EdgeAI-Sensor-EV Board,这是一块基于 AT32F403A 集成多种传感器的开发板,包含以下器件:
※ 主控 MCU(AT32F403ACxT7)
※ AT_Link_EZ
※ 0.96’ OLED 显示屏
※ 3D 磁力计(LIS2MDL)
※ 3D 加速度计/陀螺仪(LSM6DS3TR)
图 1. AT32-EdgeAI-Sensor-EV Board 实物图
1.2 软件环境
本应用笔记所提供的应用代码,项目路径:
SourceCode\AN0287_SourceCode_V2.x.x\project
Note: 本应用笔记的项目基于 keil 5 而建立,若用户需要在其他编译环境上使用,请参考 AT32F403A_407_Firmware_Library_V2.x.x\project\at_start_f403a\templates 中各种编译环境(例如 IAR6/7,keil 4/5)进行简单修改即可。
1.3 板载器件介绍
1.3.1 0.96’ OLED 显示屏
支持 SPI 接口的单芯片 OLED 显示屏,具有 128*64 位的图形显示数据 RAM(GDDRAM)。详细的 规格书与芯片手册,请参考以下目录中的文档:
SensorDataSheet\0.96_OLED
在 AT32-EdgeAI-Sensor-EV Board 上电路图如下:
图 2. 0.96’ OLED 显示屏电路图
1.3.2 3D 加速度计/陀螺仪(LSM6DS3TR)
3D 加速度计/陀螺仪(LSM6DS3TR)具有系统级封装,包含一个 3D 数字加速度计和一个 3D 数字 陀螺仪。在高性能模式下以 0.90 mA 的电流工作,并且具有始终开启的低功耗特性,可为用户提供 最佳的运动体验。详细的数据手册,请参考以下目录中的文档:
SensorDataSheet\LSM6DS3TR
在 AT32-EdgeAI-Sensor-EV Board 上电路图如下:
图 3. LSM6DS3TR 电路图
2 系统工作流程
上电启动(Power On)
系统初始化传感器、OLED、串口等外设;
从 Flash 读取上一次保存的模型;
若模型存在 → 进入 检测模式(DETECT);
若未找到模型 → 自动进入 学习模式(LEARN)。
学习模式(Learning Mode)
系统采集 200 组(LEARN_WINDOWS = 200)正常状态数据;
提取 8 维特征(均值、方差、RMS、极值、偏度、峰度等);
自适应更新模型中心(centroid);
学习完成后计算: threshold = mean + K * std 其中 K 为宏定义 AUTO_THRESHOLD_K,可调节灵敏度;
OLED 显示切换为 “Mode: DETECT”。
检测模式(Detection Mode)
实时采样数据;
计算当前特征与模型中心的距离(score);
平滑处理(取最近 10 次均值);
若 score > threshold → 判断为 异常,LED 亮起;
否则显示 “Status: OK”。
按键操作(Button Behavior)
按下 USER_BUTTON 后:
系统等待 2 秒(确保振动稳定);
清空旧模型并重新开始学习过程。
3 代码说明
3.1 模型算法说明
模型采用简单的 在线聚类 + 欧氏距离检测算法:
1. 特征提取:
2. 学习阶段(update rule):
3. 检测阶段(distance metric):
4. 判定阈值:
3.2 OLED 显示界面
表 1. OLED 界面显示
3.3 宏定义参数说明
表 2. 宏定义参数说明
4 案例使用
本章节介绍如何使用本应用笔记所搭配的案例工程,步骤如下:
1) 打开目录 AN0287_SourceCode_V2.0.0\project\anomaly_detection\mdk_v5 下的 MDK5 项目文 件并编译,可以看到左侧包含了项目所需的全部代码文件:
图 4. MDK 项目
2) 编译通过后,连接 AT_Link_EZ 进行下载,串口运行状态,如下图:
图 5. 串口打印结果
3) 如果侦测到异常,OLED 显示屏也会实时显示出结果
图 6. OLED 输出结果
4) 为了更接近于实际应用,也可以把,AT32-EdgeAI-Sensor-EV Board 安装到被侦测设备上,进 行实时学习与侦测,例如侦测风扇异常(如下图)
图 7. 侦测风扇异常
5) 为了直观了解侦测效果,可以点击如下超链接,查看视频演示效果 使用 K-means 算法自学习实现异常侦测-AT32F403A
本帖最后由 PollyPeng 于 2026-1-19 09:51 编辑