[分享] 使用K-means算法进行异常侦测

PollyPeng   2026-1-16 13:37 楼主

使用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 实物图

image.png  

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 显示屏电路图

image.png  

1.3.2 3D 加速度计/陀螺仪(LSM6DS3TR)

3D 加速度计/陀螺仪(LSM6DS3TR)具有系统级封装,包含一个 3D 数字加速度计和一个 3D 数字 陀螺仪。在高性能模式下以 0.90 mA 的电流工作,并且具有始终开启的低功耗特性,可为用户提供 最佳的运动体验。详细的数据手册,请参考以下目录中的文档:

SensorDataSheet\LSM6DS3TR

在 AT32-EdgeAI-Sensor-EV Board 上电路图如下:

图 3. LSM6DS3TR 电路图

image.png  

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. 特征提取:

image.png  

2. 学习阶段(update rule):

image.png  

3. 检测阶段(distance metric):

image.png  

4. 判定阈值:

image.png  

3.2 OLED 显示界面

表 1. OLED 界面显示

image.png  

3.3 宏定义参数说明

表 2. 宏定义参数说明

image.png  

4 案例使用

本章节介绍如何使用本应用笔记所搭配的案例工程,步骤如下:

1) 打开目录 AN0287_SourceCode_V2.0.0\project\anomaly_detection\mdk_v5 下的 MDK5 项目文 件并编译,可以看到左侧包含了项目所需的全部代码文件:

图 4. MDK 项目

image.png  

2) 编译通过后,连接 AT_Link_EZ 进行下载,串口运行状态,如下图:

图 5. 串口打印结果

image.png  

3) 如果侦测到异常,OLED 显示屏也会实时显示出结果

图 6. OLED 输出结果

image.png  

4) 为了更接近于实际应用,也可以把,AT32-EdgeAI-Sensor-EV Board 安装到被侦测设备上,进 行实时学习与侦测,例如侦测风扇异常(如下图)

图 7. 侦测风扇异常

image.png  

5) 为了直观了解侦测效果,可以点击如下超链接,查看视频演示效果 使用 K-means 算法自学习实现异常侦测-AT32F403A

 

本帖最后由 PollyPeng 于 2026-1-19 09:51 编辑

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复