= 基于 MEMS 和 CNN 的边缘计算振动检测节点
// 基于 MEMS 和 CNN 的振动筛工况检测设备
曹王仁博 <cao.wangrenbo@yandex.com>
2024.03.11
:toc: auto
:stem: latexmath

== 摘要

随着物联网 (IoT) 和工业 4.0 的快速发展，对实时监测和分析振动数据的需求不断增长。传统的振动监测系统通常依赖于中心服务器进行数据处理，这会带来延迟和数据传输成本高昂的问题。为了解决这些问题，本文提出了一种基于卷积神经网络 (CNN) 和微机电系统 (MEMS) 的边缘计算振动检测设备。该设备通过采用 MEMS 技术的加速度传感器和温湿度传感器，采集被测对象的相关振动数据和温度信息，并通过快速傅里叶变换获取振动信号的频域特征。将采集到的三轴加速度计的时域或频域数据通过卷积神经网络获得能检测被测对象工况的分类模型，并通过 cube-ai 工具将模型转化压缩并部署到基于微控制器的边缘计算振动检测节点上。该节点具有自动工况识别，基于工业现场总线和蓝牙数据回传的功能。通过该设备，能够实现简化的工况辨识，无需针对特定设备人工设定辨识特征，并可作为兼容的 Modbus 传感器或者 BLE 节点被动查询或主动上报相关数据。实现低成本、易部署的振动检测。

关键词：振动监测、边缘计算、CNN、MEMS

== Abstract

With the rapid development of the Internet of Things (IoT) and Industry 4.0, there is a growing need for real-time monitoring and analysis of vibration data. Traditional vibration monitoring systems typically rely on a central server for data processing, which introduces problems with latency and high data transmission costs. To address these issues, this paper proposes an edge computing vibration detection device based on convolutional neural networks (CNN) and microelectromechanical systems (MEMS). The device collects relevant vibration data and temperature information of the measured object through acceleration sensors and temperature and humidity sensors using MEMS technology, and obtains the frequency domain characteristics of the vibration signal through fast Fourier transform. Use the collected time domain or frequency domain data of the three-axis accelerometer through a convolutional neural network to obtain a classification model that can detect the working conditions of the measured object, and use the cube-ai tool to convert, compress and deploy the model to a microcontroller-based Edge computing vibration detection node. The node has automatic working condition recognition and is based on industrial fieldbus and Bluetooth data return functions. Through this device, simplified working condition identification can be achieved without the need to manually set identification characteristics for specific equipment, and it can be used as a compatible Modbus sensor or BLE node to passively query or actively report relevant data. Enable low-cost, easy-to-deploy vibration detection.

Keywords: vibration monitoring, edge computing, CNN, MEMS

== 绪论

=== 课题研究背景及其意义



=== 国内外研究现状

==== 振动传感器应用现状

==== 振动信号采集监测设备研究现状



==== 边缘计算技术研究现状

=== 当前存在的主要问题

=== 本论文主要研究内容

=== 论文结构

== 基于 MEMS 和 CNN 的边缘计算振动监测节点总体方案

=== 总体技术架构

基于 MEMS 和 CNN 的边缘计算振动监测节点的总体技术架构，主要包括感知层、处理层和传输层三个核心部分。

image::doc_attachments/2024-03-29T09-55-39-990Z.png[总体技术架构] 

==== 感知层

- 主要利用基于 MEMS 技术的加速度计和温湿度计实现被检测对象的振动和环境温湿度感知，实现对工况数据的初步收集。

=== 处理层

- 对感知层采集的到的数据进行预处理。通过滤波去除噪声，尖峰或者平滑数据波形等。根据情况对采样数据进行插值处理，以弥补传感器采样频率不足的缺陷。根据实际特征情况，选择识别频域或者时域信号（由于性能限制，无法同时部署两个推理模型）。

- 将待识别的信号序列送入推理模块中，通过推理得到各个工况的置信度，作为判断当前工况的判据之一。结合温湿度传感器的数据，给出对于当前被测对象工况的检测结果。

- 根据实际场景需求暂存检测结果和中间数据。

- 将需要上报的数据按格式打包，传输到传输层模块或者设备中。

=== 传输层

- Modbus 从设备将数据分类存储并分配寄存器地址，等待主机查询后回报。

- BLE 广播将检测结果和设备 MAC 地址广播，由巡检设备选择记录。

- BLE MESH 下将检测结果和相关数据推送到 BLE MESH 网关，由网关推送到云端。

=== 需求分析

边缘计算振动检测节点对于掌握设备运行状态和保障设备稳定安全运行具有重要意义。本设计中“基于 MEMS 和 CNN 的边缘计算振动检测节点”总体技术需求如下：

(1) 针对现阶段基于振动和温湿度的工况识别的采样需求、快速处理需求、低功耗和低成本需求，主要完成元器件选型。基于选定传感器、主控等主要元器件设计集采集，数据处理和边缘计算、数据暂存和交换一体的检测节点电路，并根据电路和结构要求设计电路板。

(2) 能够运行实现原始数据采集、数据处理和边缘计算、数据暂存和交换功能的程序。并能够实现稳定长久的运作和后期可维护的需求。

为了满足对于一般工业设备、家用和商用场景下振动检测的需求，结合边缘计算的运算能力要求以及部署和维护成本考量，得到本文边缘计算节点的设计基本性能指标如表所示。

.边缘计算节点性能指标
[%autowidth]
|===
| 性能 | 参数 
| 输入电压
| 6.5-24V
| 主控主频
| 168MHz
| 采样频率（加速度计）
| 1kHZ
| 采样精度（加速度计）
| 12bits - ±4G
| 采样频率（温湿度计）
| 50Hz
| 采样精度（温度计）
| 0.01℃
| 采样精度（湿度计）
| 0.024%RH
| 通信速率（Modbus）
| 115200bps
| 单板温度范围（理论极限值）
| -40-85℃
| 物料成本
| 50 元
|===


=== 总体方案

本文设计的基于 MEMS 和 CNN 的边缘计算振动检测节点主要由基于 MEMS 的传感器模块，基于 CNN 的数据处理模块、数据传输模块和电源模块四部分组成。根据边缘计算节点的基本性能指标要求，确定节点的硬件结构如图所示。

image::doc_attachments/2024-03-30T01-28-57-237Z.png[节点硬件结构框图] 

为了满足低功耗、低成本和平衡性能的要求，做出的硬件选型方案如下。

- 振动传感器选择了意法半导体的 LIS3DH 型三轴加速度传感器，该型传感器具有数字接口，不需要外置 AD 转换器和恒流源等复杂电路，可以方便地通过 SPI 或 I2C 接口读取转换后的采样数据，并且可以设置采样精度，采样速率和传感器量程，具有较强的环境适应能力，可应对具有不同振动特性的场景。

- 温湿度采用 AHT20 型温湿度传感器，作为辅助检测。该型传感器价格低廉，采样精度高和漂移较小，符合设计需要。

- 基于 CNN 的数据处理模块采用兆易创新的 GD32F405RGT6 型微处理器或者意法半导体的 STM32F405RGT6 型微控制器。该型控制器具有较高的主频和较大的随机存储器 (RAM) 和闪存 (flash)，能够存储和加载推理模型的权重数据，并且有内置的数字信号处理器 (DSP) 可以进行硬件快速傅里叶变换 (FFT)，满足对于采样数据进行预处理和推理的需求。

- 蓝牙芯片采用沁恒微电子的 CH582F 型处理器。该处理器集成 BLE 无线通信模块，可以实现自定义广播和蓝牙 MESH 功能，以及将主控数据解包处理等功能，满足无线数据回传的需求。

- RS-485 收发器采用常见的 SP3485 型收发器，配合主控 UART 外设实现基于 Modbus 协议的总线从设备功能，满足基于现场总线的数据回报功能需求。

- 电源模块采用常见的开关电源和低压差线性稳压器的组合方式，满足宽电压输入和高效率转换的需求，结合防反接，防过压保护和 ESD 防护电路，能够有效的满足稳定、安全、低成本的电源供应需求。

== 基于 MEMS 和 CNN 的边缘计算振动监测节点的硬件设计

=== LIS3DH 型加速度传感器单元及其电路设计

本设计主要应用场景为简单工业环境和家用或者商业场景，考虑到被测量对分辨率要求普遍不高，以及消费电子对成本控制的要求。选定 LIS3DH 型低功耗高性能三轴加速度传感器。

该传感器基于 MEMS 技术，具有 SPI/I2C 数字接口。可设置 ±2g/±4g/±8g/±16g 的量程和 1Hz 到 5.3kHz 的数据输出速率。

image::doc_attachments/2024-03-26T10-18-47-607Z.png[LIS3DH 电路原理图] 

为保证较高的通信速率，选用了 SPI 通信方式，需连接 SCK、MOSI、MISO、CS 四线。两中断引脚连接到主控 IO 上作为可拓展的 6D 识别或事件输出。

由于总线上仅挂载了一个传感器，所以不用考虑传感器掉电后拉挂总线电平的情况，可将 VDD_IO 和 VDD 同时连接到 3.3V 电源上。

=== AHT20 型温度传感器单元及其电路设计

本设计考虑的场景中，温度湿度值可能会作为评价工作情况的标准。所以选用了 AHT20 型温度传感器作为辅助的数据来源。

该传感器配有一个全新设计的 ASIC 专用芯片、一个经过改进的 MEMS 半导体电容式湿度传感元件和一个标准的片上温度传感元件，湿度分辨率可达到 0.024%RH(Typ.)，温度分辨率可达 0.01℃(Typ.)，具有 I2C 通信接口。

image::doc_attachments/2024-03-26T10-19-10-824Z.png[AHT20 电路原理图] 

根据该型传感器数据手册要求，在 VDD 上增加 RC 滤波电路，选取器件典型值 390Ω 和 10uF。

=== GD32F405RGT6 微控制器及其电路设计

设计要求能够运行裁剪后的卷积神经网络 (CNN)，对于处理器的存储和运算处理能力有一定要求。此外，还要求有一定的耐候性要求，以应对家用或者环境较为恶劣的工业场景。同时考虑作为消费级设备的成本问题，本文设计的振动检测设备的主控核心选用意法半导体的 STM32F405RGT6。另外考虑国产化要求，同时选用可 Pin to Pin 替代的 GD32F405RGT6 进行替换测试，该芯片对于本设计所需性能参数要优于 STM32F405RGT6。对于 STM32F405RGT6，其架构如图所示。

image:doc_attachments/2024-03-11T03-02-23-728Z.png[STM32F405RG 系统框图]

STM32F405RGT6 基于高性能 Arm® Cortex®-M4 32 位 RISC 内核，运行频率可达 168 MHz。Cortex-M4 内核具有浮点单元（FPU）单精度，支持所有 Arm 单精度数据处理指令和数据类型。它还实现了完整的 DSP 指令和内存保护单元 (MPU)，可增强应用程序安全性。

STM32F405RGT6 采用高速嵌入式存储器（1 Mbyte 闪存和 192 KB SRAM）、4 KB 备份 SRAM，以及广泛的增强型 I/O 和外设，连接到两个 APB 总线、3 条 AHB 总线和 1 个 32 位多 AHB 总线矩阵。提供三个 12 位 ADC、两个 DAC、一个低功耗 RTC、多个定时器以及标准和高级功能通讯接口。

工作温度范围为 –40 至 +105 °C

image:doc_attachments/2024-03-11T03-29-49-397Z.png[主控电路原理图]

主控部分的电路由电源、复位电路、启动选择电路、外部高速时钟、外部低速时钟组成。

其中电源部分结合本设计中不考虑器件低功耗运行的情况，使用一个 3.3V 为多个供电域直接供电，并外接退耦和滤波电容，降低开关噪声和电压跌落对主控造成的影响。

复位部分由于芯片内部有一个 40K 的上拉电阻，所以仅需外接一个 0.1uF 的陶瓷电容和一个按键，该电路在上电和按键按下时，可以将 NRST 引脚电平拉低到 
[stem]
++++
V_{IL(NRST)}=0.3V_{DD}\approx0.99V
++++ 
以下，并持续超过
[stem]
++++
T_{NRST} = 20us
++++
的时间

=== CH582F 微控制器及其电路设计

考虑到本设计的场景不仅有传统的工业环境，还可能存在家庭或者商业环境。在家庭和商业中，供电问题比较容易解决，但是通信条件不同于工业中广泛部署有各种现场总线，而且需要考虑美观性，较多的线缆连接会增加布线和维护难度。考虑到这些因素，再结合家庭中比较常见的物联网解决方案，拟采用蓝牙广播或者蓝牙 mesh 的方式作为传感器节点接入。

CH582F 是一款国产的集成 BLE 无线通讯的 RISC-V MCU 微控制器。片上集成 2Mbps 低功耗蓝牙 BLE 通讯模块、2 个全速 USB 主机和设备控制器及收发器、2 个 SPI、4 个串口、14 路 ADC、触摸按键检测模块、RTC 等丰富的外设资源。

在本设计中，CH582F 主要负责和 GD32F405RGT6 主控通过 I2C 接口和专有协议通信，并将数据通过 BLE 广播 或者 作为 MESH 节点的方式传出。

image::doc_attachments/2024-03-27T03-35-37-029Z.png[CH582F 原理图]

由于 CH582F 集成蓝牙射频输出，所以其电路需着重考虑射频部分匹配的问题以及干扰和抗干扰的问题。

本设计中由于设计到蓝牙功能，其对时钟精度要求较高，内部高速时钟受温度影响漂移较大，所以设计了 32MHz 的外部高速时钟。采用无源晶振，按照官方评估板设计，不增加调整电容。

CH582F 内置有电源管理单元 PMU，可以启用内部 DC-DC 以降低运行时内部功耗，故设计了与之匹配的功率电感。

天线设计方面，由于受电路板面积大小限制，以及为了在安装外壳后仍能保证较好的辐射效率以及更好的发射增益，没有使用常规的板上 PCB 天线，而是预留了一代 IPEX 天线座，这样可以按照实际需求选用不同种类的天线，也不用特别关注天线的匹配问题。

=== RS-485 通信接口设计

image::doc_attachments/2024-03-26T09-20-09-142Z.png[RS-485 收发器原理图] 

本设计考虑到设备在工业场景下工作的可能，并考虑到方便接入现有的现场控制总线，所以采用了工业上常用的 RS-485 总线接口。为了简化主控操作，在考虑到通常工业总线通信波特率较低的情况下，设计使用了自动换向电路，不需要主控在操作前对收发器进行读写状态转换。本设计中 RS-485 收发器选用 SP3485 芯片。该芯片内部框图如图所示、

image::doc_attachments/2024-03-26T09-23-22-414Z.png[SP3485 内部框图] 

在主控工作在写状态时，当 TXD 电平下降，NPN 管关闭，此时收发器 2、3 脚经 4.7K 电阻上拉到 3.3V，达到失能接收，使能发送的效果。而当主控工作在读状态时，TXD 上无电平变化，其上拉到 3.3V。此时 NPN 管开启，将收发器 2、3 脚和 GND 导通，达到使能接收，失能发送的效果。

但是由于三极管截止和饱和状态切换速度较慢，输入信号的边沿变化也趋于平缓。所以使用自动换向电路时，设备要求工作在较低的通信速率上。考虑到兼容性，设计通信波特率为 115200 或 9600。

=== 电源设计

image:doc_attachments/2024-03-11T13-29-59-494Z.png[电源电路原理图]

本文设计的设备采用工业上常见的 12-24V 直流电源供电，需要给主控、温度和加速度传感器、485 通信模块等供电。

由于主控和传感器供电电压较小，而输入电压较大，所以设计为两级降压方式。先使用开关电源芯片将电压降至 5V，再使用 LDO 芯片将电压降至 3.3V。这样的设计提高了电源效率，同时降低了输入主控和传感器的开关噪声。

image:doc_attachments/2024-03-12T04-30-03-730Z.png[供电结构] 

==== SGM6132 设计计算

SGM6132 为一款标称 3A，28.5V，1.4MHz 的异步开关电源转换芯片，典型应用电路如图所示。

image:doc_attachments/2024-03-12T08-54-01-296Z.png[SGM6132 典型应用电路]

根据本文应用需求，主要设计的计算有电感 L、反馈分压电阻 R1 R2、续流二极管 D1。

===== 反馈电阻 R1 R2 设计

对于反馈电阻 R1 R2，有

[stem]
++++
V_{FB} = V_{OUT}\frac{R2}{R1+R2}
++++

其中，根据数据手册得

[stem]
++++
V_{FB} = 0.8V
++++

又有要求

[stem]
++++
R2 < 100k\Omega
++++

故选择

[stem]
++++
R2 = 10k\Omega  
R1 = 52.3k\Omega
++++

计算得

[stem]
++++
V_{OUT} = 0.8\times\frac{R1+R2}{R2} = 0.8\times\frac{10+52.3}{10} = 4.984V
++++

该输出电压满足后级 LDO 的最小压降。

===== 电感 L 设计

[stem]
++++
L = \frac{V_{OUT}}{f_{OSC}\times{\Delta}I_L}\times(1-\frac{V_{OUT}}{V_{IN}})
++++

其中
时钟频率 stem:[f_{OSC} = 1.4MHz]  

输入电压 stem:[V_{IN} = 24V]  

峰峰电流值 stem:[{\Delta}I_L = 30\% \times I_L]  

最大峰值电流 stem:[I_L = I_{LOAD} + \frac{V_{OUT}}{2 \times f_{OSC} \times L} \times (1 - \frac{V_{OUT}}{V_{IN}})]  

设计负载电流 1.7A

所以有

[stem]
++++
I_L = 2.000A 
++++

代入得

[stem]
++++
L = 4.712 \times 10^{-6} H = 4.712 uH
++++

就近取标准功率电感值

[stem]
++++
L = 4.7uH
++++

===== 续流二极管 D1 设计

为了减小二极管正向导通损失和恢复时间，续流二极管类型选择肖特基二极管。要求其最大反向电压大于最大输入电压，最大过流能力大于最大负载电流。
按照该需求选择 D1 型号为 SS34。

==== XC6206 设计

XC6206 为一款标称最大输出电流 200mA 最大输入电压 6.0V 的 CMOS 稳压器，典型应用电路如图所示。

image::doc_attachments/2024-03-26T08-58-51-017Z.png[XC6206 典型应用电路]

设计上选用 1uF 的低 ESR 陶瓷电容，尽可能的靠经放置在芯片的输入和输出引脚附近。

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点 PCB 设计

为了保证设计对于振动、温度变化等环境的耐受性以及生产时的一致性，整体电路采用印刷电路板（PCB）制作。PCB 的器件布局，功率、信号线的布置对于产品性能有着不可忽视的影响，因此需要对 PCB 进行合理设计。

==== 电源电路布局布线

电源方面，本设计中设备功耗较低，实测运行时功率在 0.5W 以下，负载电流较小。

对于 SGM6132，功率方面较大电流网络 SW 和 VIN 使用较大面积铺铜。但由于 SW 对其他网络存在高频干扰，所以布局时要尽量将电感和续流二极管靠近 SW 引脚附近，并在许可情况下减少该网络铺铜面积和长度。反馈电阻也应靠近 FB 引脚放置，以减少线上电阻带来的损耗。

对于用电器件，滤波和退耦电容应尽量贴近器件供电引脚放置，并且要求路径先通过电容，以保证效果。

==== 通信接口布局布线

本设计中使用的通信接口，除 RS-485 以外都不是差分信号，通信速率都较低且都为串行通信方式，一般情况下不需要考虑线路阻抗和等长需求。对于 RS-485 信号，可以将其作为差分对布线。

==== 射频电路布线

本设计中存在蓝牙射频电路，为了保证射频部分信号损失小，在传输线上要求 stem:[50\varOmega] 特征阻抗。

本设计中 PCB 工艺选择 FR4 板材，层厚 1.6mm，介电常数典型值为 4.25。通过调整线宽匹配阻抗，根据参考设计，选取传输线宽 28.1mil，与 GND 间距 6mil。传输线布置中要求走线转弯半径大于三倍线宽。

布局完成后的顶层视图如图所示。

image::doc_attachments/2024-04-06T06-05-09-730Z.png[PCB 顶层视图]

布局完成后的底层视图如图所示。

image::doc_attachments/2024-04-06T06-05-45-990Z.png[PCB 底层视图] 

实际制作完成后的实验样机如图所示。

// 待插入图片

== 基于 MEMS 和 CNN 的边缘计算振动监测节点的程序开发

为了实现本设计的设计需求，程序开发主要分为三个部分。分别是基于 GD/STM32F405 的主控程序、基于 CH582F 的蓝牙主控程序、以及简单的上位机数据采集和标注程序。三部分的功能和关系如下图所示。

image::doc_attachments/2024-04-06T03-32-14-767Z.png[] 

由于采用了卷积神经网络 (CNN) 作为工况识别的方式，考虑到控制板运算性能有限，不适合进行模型训练。所以部署该设备需要分两部分完成，即先采集传感器数据并送至上位机处理，在上位机中将数据格式化，并按照对应工况进行数据标注。标注完成后，使用基于 Keras 框架的 卷积神经网络 (CNN) 进行训练，生成权重数据。由于生成的权重数据体积较大，并且主控设备没有直接对应的推理框架，所以需要使用 Cube-AI 工具进行模型的压缩和转换，以部署到边缘计算主控上。对于边缘计算主控，无论是数据采集阶段，还是推理运行阶段，都需要有对应传感器的设备层驱动、数据预处理过程以及通信模块。当处于推理运行阶段时，下位机主控采集并预处理的数据除了在调试模式中继续发往上位机，还会裁切成对应大小和维度的片段送入 CNN 推理模块中，并获得不同工况的置信度输出。主控将数据暂存并按照格式打包，发送给蓝牙主控和供 Modbus 模块调用，以便实现数据的有线/无线被动查询、无线主动上报功能。对于蓝牙主控，需要实现能解析从主控发送的数据包的板内通信模块，以及蓝牙协议栈。对于数据采集上位机，需要实现和下位机串口通、数据解包和格式化、数据加标签等功能。

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点主控程序开发

==== 程序整体架构

根据本设计的功能需求，主控主要任务可分解为信号采集层、基于 FFT 的数据预处理层、基于 Cube-AI 的推理层，以及向网关上报数据的数据交换层。

// 补个分层图

==== 信号采集子程序

===== LIS3DH 加速度传感器驱动层设计

LIS3DH 加速度传感器具有 SPI 和 I2C 接口，由于需求的采集频率较高，对于数据传输速率需求也较高，所以选择使用 SPI 作为和传感器的通信方式。

接口设计上，由于使用抽象程度较高的 hal 库，所以可以直接使用 SPI 外设的初始化和字节发送以及读取接口，无需自行实现。根据本设计需求，LIS3DH 传感器驱动层主要需实现设备初始化、参数配置、加速度数据读取、数据转换等接口。

当 LIS3DH 上电后，需要对其进行初始化和参数配置操作。首先发送指令读取 `whoamI` 寄存器，该寄存器是器件 ID 寄存器，该寄存器值恒为 0x33。通过读取该寄存器值，能够判断是否存在总线或者器件故障，避免继续后续操作产生误动作。当确认正确后，将对应场景所需要的配置写入，本设计中对控制寄存器写操作，设置开启数据更新。设置数据更新速率为 1kHZ，加速度传感器量程为 stem:[\pm4g]，并设置输出分辨率为 12bit。

设备集成 32 级 16 位先入先出缓冲区 (fifo)，可以在将采集到的数据先存入，等待主控读取。也可以直接查询读取，通过查询 `STATUS_REG` 寄存器，当存在新数据可用或者溢出事件时，读取数据数据寄存器值即可。本设计中由于在数据采集中没有其他阻塞操作，所以采用在主循环中直接查询的方式拉取数据。

当获取到数据后，需要根据设置的分辨率和量程将获取的数据转换成以 `mg` 为单位的加速度值。

===== AHT20 温湿度传感器驱动层设计

AHT20 温湿度传感器具有 I2C 接口，由于温湿度仅作为辅助判断工况的数据，且一般变化率不大，所以不用考虑较高的采样速率。

接口设计上，同样采用 hal 库，所以可直接使用 I2C 外设的初始化和字节发送/读取接口，无需自行实现。根据本设计需求，AHT20 传感器驱动层主要需实现设备初始化、参数配置、温湿度数据读取、数据转换等接口。

当 AHT20 设备上电后，需等待 100ms，然后发送对应状态字，并确认回报数据是否有效。

AHT20 没有自动测量的配置，需要主控发送指令触发测量过程。主控发送对应的命令，并等待 80ms。主控可尝试发送读指令至从机，读取的第一个字节为状态位，当状态位表示就绪时，可以继续读取六个字节，即温度和湿度的测量值。如果需要校验，可以再接受完数据段后发送一个 ACK 应答，从机会继续发送一个字节的校验位 (CRC-8)。

当接收完数据后，将数据转换成以 ℃ 和 %RH 为单位的数值，便于理解。

==== 基于 FFT 的数据预处理

不同的工况可能存在不同的振动特性。对于振动筛等设备，如果为了检测偏载或者重载，可能由于激振源工作状态比较恒定，其表现出来的特征主要是加速度幅值上的变化，可能时域上的特征更适合作为判断条件。而对于某些在不同状况下可能出现不同频率分量或者卓越频率的漂移的工况，采用频域特征进行判断则更为合适。

本设计中采用快速傅里叶变换的方式，将时域数据变换到频域上。

离散傅里叶变换 (DFT) 的运算公式为：

[stem]
++++
X[k]=\sum_{n=0}^{N-1}x[n]W_{N}^{nk}, 0 \leq k \leq N-1
++++

其中，

[stem]
++++
W_{N}^{nk} = e^{-j\frac{2{\pi}k}{N}n}
++++

将离散傅里叶变换公式拆分成奇偶项，则前 N/2 个点可以表示为：

[stem]
++++
X[k] = \sum_{r=0}^{\frac{N}{2}-1}X[2r]W_{N}^{2rk}+\sum_{r=0}^{\frac{N}{2}-1}X[2r+1]W_{N}{(2r+1)k}
=\sum_{r=0}^{\frac{N}{2}-1}X[2r]W_{\frac{N}{2}}^{rk}+W_{N}^{k}\sum_{r=0}^{\frac{N}{2}-1}X[2r+1]W_{\frac{N}{2}}^{rk}
=A[k]+W_{N}^{k}B[k],k=0,1,\ldots,\frac{N}{2}-1
++++

同理，后 N/2 个点可以表示为：

[stem]
++++
X[k+N/2]=A[k]-W_{N}^{k}B[k],k=0,1,\ldots,\frac{N}{2}-1
++++

由此可知，后 N/2 个点的值完全可以通过计算前 N/2 个点的中间过程值确定，对 A[K] 与 B[K] 继续进行奇偶分解，直至变成两个点的 DFT，这样就可以避免很多的重复计算，实现了快速离散傅里叶变换 (FFT) 的过程。
//Reference: 基于 FPGA 的多普勒信号快速傅里叶变换系统研究

由于采用的主控带有数字信号处理模块 (DSP)，所以程序中不需要自行实现。采集到足够点数的时域数据后传入处理函数即可。

==== 基于 Keras 的 CNN 训练过程

//选用 2D-CNN 的原因
===== 神经网络类型的选取

本设计针对的设备振动模型，主要特征为同一工况下振动波形比较稳定，呈现较强的周期性。在功能需求上看，主要需要完成的是三轴加速度计数据到各类工况的置信度的映射，属于较为典型的时间序列分类模型，典型应用为人类活动识别 (HAR)。

传统上，这类时间序列分类任务主要依靠信号处理领域的方法来处理数据，这种方式需要具有该领域较强的专业知识，并且严重依赖于启发式的特征提取（例如传统上电机利用振动数据进行故障辨识的方式）。传统方法只能提取浅层特征，从而导致无人监督和增量任务的性能下降，导致模型的准确性和泛化能力较差。

//Reference: J. Wang, Y. Chen, S. Hao, X. Peng 和 L. Hu, 《Deep learning for sensor-based activity recognition: A survey》, Pattern Recognition Letters, 卷 119, 页 3–11, 3 月 2019, doi: 10.1016/j.patrec.2018.02.010.

当前使用深度学习方法实现时间序列分类的方法中，主要提出了基于循环神经网络 (RNN)、长短期记忆网络 (LSTM)、卷积神经网络 (CNN) 的独立、组合或者变体形式搭建的网络结构。就各网络特征而言，循环神经网络和长短期记忆网络适合识别具有自然顺序的短期活动，而卷积神经网络能够提取数据中的深层特征，更适合具有稳定特征的长期活动。对于本设计而言，考虑到部署设备的计算能力和运行空间有线，仅采用顺序结构的卷积神经网络 (CNN) 进行验证测试。

对于进行时间序列分类的卷积神经网络而言，普遍上使用一维卷积神经网络 (1D-CNN)。在同等构型上，一维卷积神经网络的计算复杂度明显低于传统的二位卷积神经网络，并且具有更少的参数，更容易训练和部署推理。所以目前应用上，大多将一维的处理后的时间序列使用一维卷积神经网络处理，如果存在多个输入值（如采用三轴加速度计作为数据源），会将其并行的作为多个通道输入。在卷积过程中，多个通道相互独立，输入卷积层的通道个数也等于卷积层输出的通道个数。

而在一些研究中提出将多个输入值堆叠成信号图像并送入二维卷积神经网络中 (2D-CNN),在信号图像中，每个信号序列都有机会与其他序列相邻，这使得 CNN 能够提取相邻信号之间的隐藏相关性。该方法应用于人类活动识别 (HAR) 中，提出了一种使用陀螺仪、总加速度和线性加速度信号作为输入的 DCNN。footnote:[W. Jiang 和 Z. Yin, 《Human Activity Recognition Using Wearable Sensors by Deep Convolutional Neural Networks》, 收入 Proceedings of the 23rd ACM international conference on Multimedia, 收入 MM’15. New York, NY, USA: Association for Computing Machinery, 10 月 2015, 页 1307–1310. doi: 10.1145/2733373.2806333.] 

在另一些研究中，直接将单轴的原始数据分成相等的长度，并拼合成一幅图像送入卷积神经网络中，该研究认为该方式进行分类效果应好于使用原始的一维信号作为输入。footnote:[W. Zhang, G. Peng 和 C. Li, 《Bearings Fault Diagnosis Based on Convolutional Neural Networks with 2-D Representation of Vibration Signals as Input》, MATEC Web Conf., 卷 95, 页 13001, 2017, doi: 10.1051/matecconf/20179513001.]

// 插图片

考虑到本设计中相邻时间的三轴加速度数据之间的特征可能有助于对于设备工况进行分类任务，故选二维卷积神经网络。本设计中仅有三轴加速度数据，输入网络的张量大小为：stem:[float32[?,W,3,1]]。其中 W 为采样窗口宽度，图像高度为 3，输入通道数为 1。




//训练数据准备
===== 训练数据的采集和标注
本设计中送入 CNN 进行识别的数据主要是由 LIS3DH 加速度传感器获取的 x、y、z 三轴的加速度数据。准备训练数据的主要过程如下。

* 从下位机接收上传的含有三轴加速度数据的数据包。将数据包解包，并转换成 ASCII 编码以供训练和阅读。将三轴加速度数据逐条储存在文本文件中，以逗号分隔，每个时间点一行。该过程中需要令被测设备保持一种工况，数据以数据流的形式上传并保存。上传的数据需要保证采样时间间隔相等，且在时间上连续。三轴加速度数据在时间上对齐。

* 采集到足够多的数据之后，需要对数据进行标注。由于采集过程中令被测设备保持同一类型的工况，因此每次采集的数据为同一类。

===== 训练数据的准备

//加窗滑动采样，选择窗口大小和重叠

//归一化

//划分

//骨干网络设计

//超参数设计，学习率、损失函数

//导出 h5fd

==== 基于 Cube-AI 的推理模型转化和部署

==== 基于 Modbus 总线协议的程序设计

==== 设备间数据交换程序设计

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点蓝牙设备程序开发

==== 设备间数据交换程序设计

==== BLE 广播模式程序设计

==== BLE MESH 模式程序设计 (optional)

== 基于 MEMS 和 CNN 的边缘计算振动监测节点有效性验证（及工程集成应用）

=== 验证场景

=== 基于 MEMS 和 CNN 的边缘计算振动监测节点工况识别准确性验证

== 总结与展望

=== 总结

=== 展望

