本帖最后由 STM新闻官 于 2024-12-17 10:25 编辑
01 简介
基于监督学习的神经网络算法需要大量数据作为输入,模型完全由数据驱动,数据质量是算法模型有效的必要条件。如何高效的采集到数据,以及正确的标注及分析是极其重要的,如果第一步有问题,后续的所有工作都是徒劳。本文将介绍AFCI数据采集板,AFCI上位机数据采集工具,和简单分析数据质量的一些方法,以及需要注意的一些事项。
▲ 图1. AFCI硬件V1.0
02 数据采集与清洗
▲ 图2. 上位机主界面
单击①找到相应的串口号,并通过②选择合适的波特率,点击③打开串口。
注意:1. 如果连接设备是串口+USB虚拟串口,则需要选择正确的波特率才能正常通讯。2. 如果连接设备是USB虚拟串口(比如AFCI开发板),则波特率可以任意选择。
通过④设置标签,⑤设置采样率(最高400KHz),⑥设置采样时间,⑦选择通道(目前AFCI 开发板与上位机支持四个通道),选择⑧开始数据采集。
数据采集原则:
1. ④中设置的是文件标签,也可以理解为文件保存路径,上位机工具会根据保存的文件路径来给数据进行打标签。
2. 默认情况下,工具会判断路径中是否含有“Arc”和“Normal”关键字(大小写均可),“Arc”:表示该文件夹及其子目录下的数据全为有弧信号;“Normal”:表示该文件夹及其子目录下的数据全为无弧信号。注意不要同时包含“Arc”和“Normal”, 如果想自定义标签,请参考2.3数据标注一节。
3. “Normal”信号的采集:无弧信号采集相对比较简单,重点需要注意在不同的采集条件采集数据,让数据分布更广泛。为了确保无弧,所有接线连接部分必须保证充分接触,防止出现由于接触不良导致接头内部产生微小电弧,而肉眼无法看到的情况发生。拉弧机两端最好使用示波器检测,电压必须保持为0V,以确保拉弧机接头内部没有肉眼无法看到的电弧。
4. “Arc”信号的采集:为了确保采集到的数据全部为有弧信号,需要先打开拉弧机产生电弧,再点击⑧开始采集,待上位机采集完成,再断开拉弧机。
5. 由于拉弧与非常多的因素相关,所以数据采集时应当在各个不同条件下采集。目前已知能影响拉弧效果的因素包括且不限于:是否有关断器,是否有优化器,电流等级,逆变器通道,硬件采集电路,拉弧距离等等。在数据标注时,需要对这些情况进行相应的标注,方便以后分析。这里电流等级可以以2 - 3A为一个步长采集所有电流等级内的数据。
6. 采集时长或数据大小:没有明确规定的采集时长,建议每个电流等级总时长不低于30s。同一条件下也不建议太长,因为数据量太多可能导致内存不足,无法训练或训练时间过长。
7. 数据的分布和包含条件应该尽可能广,同质化的大量数据远远不及不同环境条件下的较少数据的数据质量高。
8. 测试环境应当尽可能和采集数据时环境保持一致。
其他信息:
1. 文件夹设置好后,采集数据时,会自动在上位机相同目录下生成数据文件。
2. 在File页面下,左键点击文件夹会将相应文件夹路径更新到④中,方便路径选择。
3. 采集到的数据文件格式为:[采集时间]_[采样率]_[通道]_[bit数].csv
4. 采集数据有错误(数据饱和)的文件格式为:BAD_Saturation_[时间]_[采样率]_[通道]_[bit 数].csv。小部分数据饱和可忽略,大量数据饱和,需要检查硬件。
5. 采集数据有错误(数据丢失)的文件格式为:BAD_Lost_[时间]_[采样率]_[通道]_[bit数].csv。
6. Log信息会自动保存在上位机同目录下,以当前时间作为文件名,以.log结尾。
7. 如果Log信息中,出现了丢包或其他错误信息,建议删掉采集保存下来的相关数据。
8. AFCI开发板的供电:AFCI开发板使用USB供电,可以连接笔记本,但是USB供电会引入工频噪声,在数据采集阶段和验证阶段,必须保证环境的一致性,所以在数据采集和验证阶段都需要使用统一的设备进行供电,不能切换电脑或电源。(建议使用同一台笔记本进行数据采集和验证,使用电池供电,不使用电源适配器。)
9. 一种数据文件夹的命名方式:图3. 一种文件夹命名方法,供参考。
▲ 图3. 一种文件夹命名方法,供参考 10. 数据采集log的举例说明:
▲ 图4. 数据采集Log 说明:
①:400KHz采样率下,数据有丢包。(可以在File页面下,找到该条数据,点击delete删除)
②:400KHz 正常的数据采集Log。
目前,STM32G4使用Full Speed的USB进行数据传输,仅在400KHz采样率下,发现小概率有丢包情况,其他情况未发现,STM32H7使用High Speed USB通讯,不会有类似问题,不过如果采用串口通讯仍然会有误码率较高的可能性。
▲ 图5. 数据标签设置 如果想要设置新的标签,比如不仅需要区分normal和arc,还需要添加noise数据,那么可以在上图标签栏,点击进行修改,以逗号‘,’作为间隔符。上位机工具,将检测文件路径中是否含有[标签]中的关键字,如果有则进行标记。注意标签间不要冲突。
如果对标签进行了修改,比如从之前的2类变成了3类,训练完成后,相应的固件代码部分也要进行修改。
▲ 图6. 绘图页面 说明: 1. 在绘图页面,点击采集到的数据①,会在右侧页面绘制出相应的波形图。 2. ②:时域图形,横坐标表示采样点数,纵坐标表示ADC值。③:频域图形,横坐标表示采样率,如果采样率为250KHz,则0.5表示125KHz,纵坐标表示幅值,使用dB进行显示。 3. 设置帧长⑤,拖动④可以看到不同帧长窗口中的时域和频域图形。 4. 在频域图中,可能会看到不连续有间断的情况,这是由于为了在绘图的时候加快绘图速度,使用了简便方法进行绘图导致的,不是数据问题。
▲ 图7. 上位机软件的时域和频域对比功能
说明:
1. 勾选①痕迹后,再选择其它数据文件,则可以对比不同数据的波形,上图7为有弧和无弧信号的对比。
2. 检查②时域图形:查看是否有异常点,是否有样本点超过最大幅值的情况,中心点是否在2048附近(12位ADC最大值为4095,中心点为2048),可以看出硬件是否有设计问题,比如放大倍数不正确,或者中心点不正确。还可以和示波器进行对照,查看采集到的数据是否和示波器上的一致,来检查硬件或固件是否正常。
3. 检查③频域图形:查看滤波器的滤波范围是否正确,限波点是否正确等。从上图7中可以看到拉弧数据在相对低频部分有比较明显的特征。
低质量的数据会严重影响模型的准确率,以下情况均会影响数据质量:
1. 固件Bug。
2. 噪声干扰。
3. 硬件问题。
AFCI 工具提供了一种方法帮助进行数据筛选:
▲ 图8. 数据清洗 1.选中一个文件,上图是标记为有弧的文件。
2.勾选①,点击②可以绘制该文件的所有帧,例如上图8中帧长为1024,工具会以1024 的长度对原始文件进行分帧,然后将每一帧图片绘制在图中。
3.从图8中可以看到,④这个信号就不是很好,可能是固件的问题,可能是干扰,则可以通过单击④位置的信号,将其移除。
4. 上图 8可以看到⑤位置的情况,某些帧抬升比较明显,某些帧抬升不是很明显。正常情况下,拉弧机拉弧后的频谱图也不是稳定在某一水平的,一般会上下波动,可以通过频谱仪看到类似现象。在实际处理中,我们可以将抬升不是很明显的信号去除掉,这样可以一定程度上避免误报。
通过简单处理后的图像如下图9:
▲ 图9. 清洗后进行保存 清洗完成后,请点击上图的①进行保存,保存成功后,会在②这个位置(原文件所在目录),新建一个带有前缀Cleaned_的文件,该文件就是清洗之后的数据,建议将所有数据都进行清洗,并将清洗后的数据放在一个新的目录里面,因为AFCI工具在创建数据集的时候不会检查是不是清洗过后的数据,而是遍历目录下所有的csv文件,进行数据集的创建。
03 数据预处理
采集好的数据文件格式为csv,数据预处理模块会根据一定的规则将这些csv文件重新整理成固定的格式,供后续模型训练使用。
▲ 图10. 预处理过程 说明:
1. 点击①,然后点击②处的添加按钮,将文件夹添加到列表中,支持多文件夹。
2. 上位机会遍历所有文件夹列表中的目录及子目录,查找所有csv结尾的文件。根据文件路径中是否出现[标签]中的关键字,将文件标记为不同的类别。
3. 在读取csv文件后,会根据配置中的内容进行分帧:a. 采样率:是否需要降采样(一般选择默认即可)b. 帧长:1024c. FFT:是否使能FFTd. 如果使能FFT,是否需要滤波,上图10中帧长为1024,进行FFT后数据长度为512,滤波带最小2最大258的设置意味着截取2~258中的256个元素用于训练,其余丢弃。e. 保存为csv文件:默认情况下保存为pkl文件格式,后续训练也是使用pkl文件格式,csv文件格式仅用于方便查看处理后的数据,方便和MCU FW端的数据流处理相匹配。
4. 点击③开始创建数据集,创建过程会自动跳过有BAD标记的文件,创建完成后在④Log中会显示正常信号和拉弧信号的个数,他们的数量大体相当即可,不可以相差太多,也不需要完全相等。
5. 在⑤处的目录下,会自动生成Dataset目录,[xxx]_X.pkl文件表示是分帧处理后的数据,[xxx]_Y.pkl 表示对应的数据标签。
6. 如果使能FFT,将生成mean.csv和scale.csv,注意需要将该数组替换固件代码common_table.h 中的mean和scale数组。
7. 该数据预处理过程表示了数据从ADC采集的原始数据到进入神经网络训练数据的过程,大致上描述为:ADC —》 分帧:1024 —》 FFT —》滤波:256 —》归一化处理—》NN。
8. 上述过程中有任何参数的修改,均需要和MCU固件保持一致,MCU中的数据流需要和PC端预处理过程中的数据流保持一致。
|