本期给大家介绍一个同步电机故障的振动和电流公开数据集。 论文链接 :通过点击最左下角的阅读 原文 进行在线阅读及下载。 论文基本信息 论文题目 : Vibration and current dataset of three-phase permanent magnet synchronous motors with stator faults
作者 : Wonho Jung, Sung-Hyun Yun, Yoon-Seop Lim, Sungjin Cheong, Yong-Hwa Park* 机构 : Department of Mechanical Engineering, Korea Advanced Institute of Science and Technology
目录 1 摘要 永磁同步电机(PMSM)广泛应用于工业领域,如家用电器、制造工艺、高速列车和电动汽车等。PMSM的意外故障直接关系到工程系统的重大损失。电机故障主要包括轴承故障(机械故障)和定子故障(电气故障)。 本文公开了三相PMSM在八种不同定子故障严重程度下的振动和驱动电流数据集,涵盖了三种不同功率的电机 。实验展示了三种功率分别为1.0 kW、1.5 kW和3.0 kW的PMSM在正常状态、线圈间短路故障和匝间短路故障下的运行情况。所有PMSM均在相同的扭矩负载条件和转速下运行。数据采集使用了一个基于集成电子压电(IEPE)的加速度计和三个电流互感器(CT),并通过美国国家仪器(NI)的数据采集(DAQ)板完成,符合国际标准化组织标准(ISO 10816-1:1995)。该数据集可用于验证新开发的最先进的PMSM定子故障诊断方法。 2 参数表
3 数据价值 该数据集是从三种不同功率 (分别为1.0 kW、1.5 kW和3.0 kW)的电机 中采集的。实验中设置了两种不同类型的故障 ,包括匝间短路 和线圈间短路 。数据集包含振动数据 和电流数据 :振动数据反映了 由于电机定子故障引起的扭矩 不平衡对轴承的冲击 ;电流数据 则反映了电机驱动功率的变化 。 该数据集是根据ISO标准(ISO 10816-1:1995)采集的。定子故障通过在线圈间电路和匝间电路中旁路电阻人工设置。三种不同功率的电机(1.0 kW、1.5 kW和3.0 kW)在相同的实验条件下进行测试,包括额定转速 (3000 RPM)、额定负载条件 (允许扭矩极限1.5 Nm的15%)、传感器位置以及采样率 (振动数据为25.6 kHz ,电流数据为100 kHz )。
考虑到故障诊断数据集的构建通常需要大量的努力和时间,该数据集可以为故障诊断研究领域提供有价值的数据支持[1]。因此,该数据集可用于分析不同电机功率下电机在不同严重程度的定子故障中的状态[2, 3]。此外,与驱动电流数据同步的振动数据可用于分析故障诊断中的振动-电流相关性。该数据集还可用于评估新开发的基于深度学习的故障诊断方法,特别是针对不同电机功率的情况。
4 背景 该数据集是为基于深度学习的电机故障诊断研究而建立的。与其他研究不同,在故障诊断研究领域获取数据非常困难,因为实际故障难以人为施加。因此,在深度学习算法的训练中存在许多困难。为了解决这一问题,我们根据电机功率模拟了定子故障,并根据故障严重程度获取了振动和驱动电流数据。该数据集基于机械工程知识,并按照ISO国际标准进行测量。该数据集可用于验证基于深度学习的故障诊断方法。 5 数据描述 收集的数据集包括从三种不同功率(1.0 kW、1.5 kW和3.0 kW)的永磁同步电机(PMSM)中获取的振动和电流数据。在每个电机中,共设置了16种定子故障 ,包括8种线圈间电路故障 和8种匝间电路故障 。电机在额定转速 (3000 RPM)和额定负载条件 (允许扭矩极限1.5 Nm的15%)下运行 。收集的数据集以 技术数据管理流(TDMS)文件格式存储 。TDMS文件格式可以轻松地与其他数据分析程序(如MATLAB [5]和Python [6])进行交互。 振动数据 使用加速度计(PCB352C34)测量,并通过NI9234模块采集,采集时长为120秒,采样频率为25.6 kHz 。每个振动数据文件包含两列 ,分别为“时间戳”和“振幅” 。振动振幅的单位为 “重力常数(g )”(1g = 9.80665 m/s²)。振动数据文件包括PMSM在匝间短路和线圈间短路情况下的z方向振动数据 。以下是电机运行状态和健康条件下的振动文件描述:
1.1000 W_ 0 _ 00 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的健康状态振动数据。
2.1000 W_ 2 _ 26 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.26%。
3.1000 W_ 2 _ 70 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的匝间短路故障振动数据,严重度为2.70%。
4.1000 W_ 3 _ 35 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为3.35%。
5.1000 W_ 4 _ 41 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向的匝间短路故障振动数据,严重度为4.41%。
6.1000 W_ 6 _ 48 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为6.48%。
7.1000 W_ 12 _ 17 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为12.17%。
8.1000 W_ 21 _ 69 _vibration_interturn.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为21.69%。
9.1000 W_ 0 _ 00 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向健康状态振动数据。
10.1000 W_ 0 _ 68 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为0.68%。
11.1000 W_ 0 _ 81 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为0.81%。
12.1000 W_ 1 _ 01 _vibration_intercoil.tdms: 文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为1.01%。
13 1000 W_ 1 _ 34 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为1.34%。
14.1000 W_ 2 _ 00 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为2.00%。
15.1000 W_ 3 _ 93 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为3.93%。
16.1000 W_ 7 _ 56 _vibration_intercoil.tdms: 此文件包括从功率为1.0kW的电机获取的z方向的线圈间短路故障振动数据,严重度为7.56%。
17.1500 W_0_ 00 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向健康状态振动数据。
18.1500 W_ 1 _ 57 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为1.57%。
19.1500 W_ 1 _ 88 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为1.88%。
20.1500 W_ 2 _ 34 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.34%。
21.1500 W_ 3 _ 10 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为3.10%。
22.1500 W_ 4 _ 57 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为4.57%。
22.1500 W_ 4 _ 57 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为4.57%。
23.1500 W_ 8 _ 74 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为8.74%。
24.1500 W_ 16 _ 08 _vibration_interturn.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为16.08%。
25.1500 W_ 0 _ 00 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的Z方向健康状态振动数据。
26.1500 W_ 4 _ 79 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为4.79%。
27.1500 W_ 5 _ 70 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的线圈间短路故障振动数据,严重度为5.70%。
28.1500 W_ 7 _ 02 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为7.02%。
29.1500 W_ 9 _ 15 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为9.15%。
30.1500 W_ 13 _ 12 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的z方向的线圈间短路故障振动数据,严重度为13.12%。
31.1500 W_ 23 _ 20 _vibration_intercoil.tdms: 此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为23.20%。
32.1500 W_ 37 _ 66 _vibration_intercoil.tdms: 此文件包括z方向的线圈间短路故障振动数据,严重度为37.66%,这些数据来自功率为1.5kW的电机。
33.3000 W_ 0 _ 00 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的健康状态振动数据。
34.3000 W_ 1 _ 78 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为1.78%。
35.3000 W_ 2 _ 13 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.13%。
36.3000 W_ 2 _ 65 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.65%。
37.3000 W_ 3 _ 50 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为3.50%。
38.3000 W_ 5 _ 16 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为5.16%。
39.3000 W_ 9 _ 81 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为9.81%。
40.3000 W_ 17_86 _vibration_interturn.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为17.86%。
41.3000 W_ 0 _ 00 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的Z方向健康的线圈间短路振动数据。
42.3000 W_ 2 _ 49 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为2.49%。
43.3000 W_ 2 _ 98 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为2.98%。
44.3000 W_ 3 _ 69 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的z方向的线圈间短路故障振动数据,严重度为3.69%。
45.3000 W_ 4 _ 86 _vibration_intercoil.tdms: 文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为4.86%。
46.3000 W_ 7 _ 12 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为7.12%。
47.3000 W_ 13 _ 10 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为13.10%。
48.3000 W_ 23 _ 48 _vibration_intercoil.tdms: 此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为23.48%。
电流数据 是使用名为Hioki CT6700的三个电流互感器(CT)传感器测量的,并通过NI9775模块 采集了120秒 , 采样频率为100 kHz 。每个驱动电流数据文件 包含四列 ,分别是 “时间戳”、“U相”、“V相”和“W相” 。电流的单位是“安培(A)”。根据电机的运行和健康状况,电流文件的描述如下: 1.1000W_0_00_current_interturn.tdms:该文件包含 从功率为1.0 kW的电机采集到的三相健康状态下的匝间短路电流数据。
2.1000W_2_26_current_interturn.tdms: 这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为2.26%。
3.1000W_2_70_current_interturn.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为2.70%。
4.1000W_ 3_35_current_interturn.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为3.35%。
5.1000W_ 4_41_current_interturn.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为4.41%。
6.1000W_6_48_current_interturn.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为6.48%。
7.1000W_12_17_current_interturn.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为12.17%。
8.1000W_21_69_current_interturn.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为21.69%。
9.1000W_0_00_current_intercoil .tdms: 这个文件包含了从功率为1.0 kW的电机中采集到的三相健康状态下电流数据。
10.1000W_0_68_current_intercoil .tdms: 这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为0.68%。
11.1000W_0_81_current_intercoil .tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为0.81%。
12.1000W_1_01_current_intercoil .tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为1.01%。
13.1000W_1_34_current_intercoil .tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为1.34%。
14.1000W_2_00_current_intercoil.tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为2.00%。
15.1000W_3_93_current_intercoil .tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为3.93%。
16.1000W_7_56_current_intercoil .tdms:这个文件包含了从功率为1.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为7.56%。
17.1500W_0_00_current_interturn.tdms:该文件包含从功率为1.5 kW的电机采集得的三相正常状态电流数据。
18.1500W_1_57_current_interturn.tdms: 这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为1.57%。
19.1500W_1_88_current_interturn.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为1.88%。
20.1500W_ 2_34_current_interturn.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为2.34%。
21.1500W_3_10_current_interturn.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为3.10%。
22.1500W_4_57_current_interturn.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为4.57%。
23.1500W_8_74_current_interturn.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为8 .74%。
24.1500W_16_08_current_interturn.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为16.08%。
25.1500W_0_00_current_intercoil.tdms: 这个文件包含了从功率为1.5 kW的电机中采集到的三相健康状态下电流数据。
26.1500W_4_79_current_intercoil.tdms: 这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为4.79%。
27.1500W_5_70_current_intercoil.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为5.70%。
28.1500W_7_02_current_intercoil.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为7.02%。
29.1500W_9_15_current_intercoil.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为9.15%。
30.1500W_13_12_current_intercoil.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为13.12%。
31.1500W_23_20_current_intercoil.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为23.20%。
32.1500W_37_66_current_intercoil.tdms:这个文件包含了从功率为1.5 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为37.66%。
33.3000W_0_00_current_interturn.tdms:该文件包含从功率为3.0 kW的电机获得的三相正常状态电流数据。
34.3000W_1_78_current_interturn.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为1.78%。
35.3000W_2_13_current_interturn.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为2.13%。
36.3000W_2_65 _current_interturn.tdms: 这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为2.65%。
37.3000W_3_50 _current_interturn.tdms: 这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为3.50%。
38.3000W_5_16 _current_interturn.tdms: 这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为5.16%。
39.3000W_9_81_current_interturn.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为9.81%。
40.3000W_17_86_current_interturn.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相匝间短路故障电流数据,其故障严重程度为17.86%。
41.3000W_0_00_current_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的三相健康状态电流变化数据。
42.3000W_2_49_current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为2 .49 %。
43.3000W_2_98_current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为2 .98 %。
44.3000W_3_69_current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为3 .69 %。
45.3000W_4_86_current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为4 .86 %。
46.3000W_7_12 _current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为7 .12 %。
47.3000W_13_10_current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为13 .10 %。
48.3000W_23_48_current_intercoil.tdms:这个文件包含了从功率为3.0 kW的电机中采集到的三相绕组间短路故障电流数据,其故障严重程度为23 .48 %。
6 实验设计、材料与方法 为了测量不同功率的永磁同步电机(PMSM)在健康状态和故障状态下的振动和电流数据,搭建了一个PMSM测试平台,如图1所示。该测试平台包括一个由制动器制成的负载控制器、PMSM和传感器。由Valid Magnetics Ltd.生产的磁粉制动器(型号AHB-10A)能够对PMSM施加高达10 Nm的转矩负载。为了防止负载控制器和PMSM之间连接出现不对中故障, 使用了柔性联轴器和线性导轨。实验中使用的PMSM参数总结 在表1中。这三台PMSM均为三相四极电机,并且具有相同的制造商、相同的转速运行条件(3000转/分钟)以及 1.5 Nm的允许转矩极限的15%,但功率不同(分别为1.0 kW、1.5 kW和3.0 kW)。
图1 PMSM实验台描述
表2 PMSM参数
电动机的定子故障模式可以分为两类:第一类是定子电阻增加(类似开路故障) ;第二类是定子电阻减小(类似短路故障) 。在开路故障中,定子线圈的一部分损坏,增加了定子电阻,导致给定输入电压下驱动电流按电阻变化的比例减小。因此,通过读取电流的整体减少,可以相对容易地检测到这种类型的故障。另一方面,大多数难以检测的故障来自第二类故障模式即定子线圈的一部分损坏导致匝间(称为匝间短路故障)或线圈间(本文中称为线圈间短路故障)形成类似短路的电路。这些短路故障引入了驱动电流的旁路路径,根据基尔霍夫定律,通过定子线圈的正常电流会减少。结果,电机经历电磁场的减弱,进而导致感应扭矩的降低。考虑到这些类型的短路故障,我们通过控制短路中的旁路电阻,引入了匝间短路故障和线圈间短路故障,具体如下。
旁路电阻值越小,流经旁路电阻的驱动电流就越大,而根据基尔霍夫定律,流经电机定子的驱动电流则越小。在这种情况下,电机故障的严重程度被视为较高。因此,通过在电机绕组中添加使用旁路电阻连接匝间(或线圈间)的短路,来代表性地模拟故障,如图2所示。匝间短路故障被人工设置在永磁同步电机(PMSM)U相的第一匝和第二匝之间,而线圈间短路故障则被人工设置在连续U相的最后匝和第一匝之间,以获取故障数据,如图3所示。匝间短路故障和线圈间短路故障的严重程度通过公式(1)计算 。随着旁路电路中电流量的增加,流经电机定子的驱动电流量相应减少 ,因此,故障比率 (FR)被定义为旁路电路中的电流量与正常电路中的电流量之比 。数据集的整体描述总结在表2中。
图2 在不同功率(a)1.0kW、(b)1.5kW和(c)3.0kW的PMSM的U相上的人工故障
图3 短路故障方案的定子绕组,其中R旁路为旁路电阻,R为定子回路电阻
7 数据读取与频谱分析 import numpy as np
import pandas as pd
from scipy.io import loadmat
import matplotlib.pyplot as plt
from matplotlib import rcParams
from nptdms import TdmsFile
config = {
"font.family" : 'serif' ,
"font.size" : 15 ,
"font.serif" : ['SimHei' ],
"mathtext.fontset" : 'stix' ,
'axes.unicode_minus' : False
}
rcParams.update(config)
7.2 电流数据分析
文件是以tdms格式进行存储。下面对tdms格式数据进行简单介绍: 为解决测试和测量中数据读取和分析时的种种问题,如没有描述性信息、格式不一致、存储混乱等,NI定义了一个技术数据管理(Technical Data Management,TDM)解决方案。TDMS文件格式由三个层次组成:文件、组、通道 。文件层可包含任意数量的组 ,而每个组又可包含任意数量的通道 。通过通道分组,用户可以选择如何组织数据以便使其更易于理解。例如,用户可以在一个文件中为自己的原始数据设置一个组,再为自己的分析数据设置另一个组。或者,也可以按传感器类型和位置将数据分成多个组。
在下图中,文件example events.tdms包含两个组,每组包含两个通道。
file_path = r'E:/03-公开数据集/三相永磁同步电动机定子故障的振动和电流数据集/数据/1.0kW/current/1000W_0_00_current_intercoil.tdms'
with TdmsFile.open(file_path) as tdms_file:
for group in tdms_file.groups():
group_name = group.name
print("group_name:" , group_name)
for channel in group.channels():
channel_name = channel.name
print("channel_name:" , channel_name)
group_name : Test Information
group_name : Log
channel_name : cDAQ1Mod2/ai0
channel_name : cDAQ1Mod2/ai2
channel_name : cDAQ1Mod2/ai3
可知有三组,对应为U、V、W相的数据。读取U相的数据,采样频率100kHz,采集120s,所以样本长度为12000000。 with TdmsFile(file_path) as tdms_file:
channel = tdms_file['Log' ]['cDAQ1Mod2/ai0' ]
all_channel_data = channel[:]
df = pd.DataFrame(all_channel_data)
print(df)
下面进行频谱分析 :
def plt_time_domain (arr, fs=1600 , ylabel='Amp(mg)' , title='原始数据时域图' , img_save_path=None, x_vline=None, y_hline=None) :
"""
:fun: 绘制时域图模板
:param arr: 输入一维数组数据
:param fs: 采样频率
:param ylabel: y轴标签
:param title: 图标题
:return: None
"""
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif' ] = ['SimHei' ]
plt.rcParams['axes.unicode_minus' ] = False
font = {'family' : 'Times New Roman' , 'size' : '20' , 'color' : '0.5' , 'weight' : 'bold' }
plt.figure(figsize=(12 ,4 ))
length = len(arr)
t = np.linspace(0 , length/fs, length)
plt.plot(t, arr, c='g' )
plt.xlabel('t(s)' )
plt.ylabel(ylabel)
plt.title(title)
if x_vline:
plt.vlines(x=x_vline, ymin=np.min(arr), ymax=np.max(arr), linestyle='--' , colors='r' )
if y_hline:
plt.hlines(y=y_hline, xmin=np.min(t), xmax=np.max(t), linestyle=':' , colors='y' )
if img_save_path:
plt.savefig(img_save_path, dpi=500 , bbox_inches = 'tight' )
plt.show()
def plt_fft_img(arr, fs, ylabel='Amp(mg)' , title='频域图' , img_save_path=None, vline=None, hline=None, xlim=None):
"" "
:fun: 绘制频域图模板
:param arr: 输入一维时域数组数据
:param fs: 采样频率
:param ylabel: y轴标签
:param title: 图标题
:return: None
" ""
length = len(arr)
t = np.linspace(0 , length /fs, length )
fft_result = np.fft.fft(arr)
fft_freq= np.fft.fftfreq(len(arr) , d=t[1 ]-t[0 ])
fft_amp= 2 *np.abs(fft_result)/len(t)
plt.figure(figsize=(12 ,4 ))
plt.title(title)
plt.plot(fft_freq[0: int(len(t)/2)] , fft_amp[0 : int (len(t)/2 )], label='Frequency Spectrum' , color='b' )
plt.xlabel('频率 (Hz)' )
plt.ylabel('幅值' )
plt.legend()
if vline:
plt.vlines(x =vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--' , colors='r' )
if hline:
plt.hlines(y =hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':' , colors='y' )
if img_save_path:
plt.savefig(img_save_path, dpi=500 , bbox_inches = 'tight' )
if xlim:
plt.xlim(0 , xlim)
plt.tight_layout()
plt.show()
return fft_freq, fft_amp
for channel_name in ['cDAQ1Mod2/ai0' , 'cDAQ1Mod2/ai2' , 'cDAQ1Mod2/ai3' ]:
with TdmsFile(file_path) as tdms_file:
channel = tdms_file['Log' ][channel_name]
all_channel_data = channel[:]
df = pd.DataFrame(all_channel_data)
print(df)
part_channel_data = channel[:10000 ]
plt_time_domain(part_channel_data, fs=100000 )
plt_fft_img(part_channel_data, fs=100000 )
file_path = r'E:/03-公开数据集/三相永磁同步电动机定子故障的振动和电流数据集/数据/1.0kW/vibration/1000W_0_00_vibration_intercoil.tdms'
with TdmsFile.open(file_path) as tdms_file:
for group in tdms_file.groups():
group_name = group.name
print("group_name:" , group_name)
for channel in group.channels():
channel_name = channel.name
print("channel_name:" , channel_name)
group_name : Test Information
group_name : Log
channel_name : cDAQ1Mod1/ai3
可知有1组,对应为z向的数据。读取z向的数据,采样频率256kHz,采集120s,所以样本长度为3072000。
with TdmsFile(file_path) as tdms_file:
channel = tdms_file['Log' ]['cDAQ1Mod1/ai3' ]
all_channel_data = channel[:]
df = pd.DataFrame(all_channel_data)
print(df)
下面进行FFT和包络谱分析:
def plt_envelope_spectrum (data, fs, ylabel='Amp(mg)' , title='包络谱图' , img_save_path=None, vline=None, hline=None, xlim=None) :
'''
fun: 绘制包络谱图
param data: 输入数据,1维array
param fs: 采样频率
param xlim: 图片横坐标xlim,default = None
param vline: 图片垂直线,default = None
'''
from scipy import fftpack
xt = data
ht = fftpack.hilbert(xt)
at = np.sqrt(xt**2 +ht**2 )
at = at - np.mean(at)
fft_amp = np.fft.fft(at)
fft_amp = np.abs(fft_amp)
fft_amp = fft_amp/len(fft_amp)*2
fft_amp = fft_amp[0 : int(len(fft_amp)/2 )]
fft_freq = np.fft.fftfreq(len(at), d=1 / fs)
fft_freq = fft_freq[0 :int(len(fft_freq)/2 )]
plt.figure(figsize=(12 ,4 ))
plt.title(title)
plt.plot(fft_freq, fft_amp, color='b' )
plt.xlabel('频率 (Hz)' )
plt.ylabel('幅值' )
if vline:
plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--' , colors='r' )
if hline:
plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':' , colors='y' )
if img_save_path:
plt.savefig(img_save_path, dpi=500 , bbox_inches = 'tight' )
if xlim:
plt.xlim(0 , xlim)
plt.tight_layout()
plt.show()def plt_envelope_spectrum (data, fs, ylabel='Amp(mg)' , title='包络谱图' , img_save_path=None, vline=None, hline=None, xlim=None) :
'''
fun: 绘制包络谱图
param data: 输入数据,1维array
param fs: 采样频率
param xlim: 图片横坐标xlim,default = None
param vline: 图片垂直线,default = None
'''
from scipy import fftpack
xt = data
ht = fftpack.hilbert(xt)
at = np.sqrt(xt**2 +ht**2 )
at = at - np.mean(at)
fft_amp = np.fft.fft(at)
fft_amp = np.abs(fft_amp)
fft_amp = fft_amp/len(fft_amp)*2
fft_amp = fft_amp[0 : int(len(fft_amp)/2 )]
fft_freq = np.fft.fftfreq(len(at), d=1 / fs)
fft_freq = fft_freq[0 :int(len(fft_freq)/2 )]
plt.figure(figsize=(12 ,4 ))
plt.title(title)
plt.plot(fft_freq, fft_amp, color='b' )
plt.xlabel('频率 (Hz)' )
plt.ylabel('幅值' )
if vline:
plt.vlines(x=vline, ymin=np.min(fft_amp), ymax=np.max(fft_amp), linestyle='--' , colors='r' )
if hline:
plt.hlines(y=hline, xmin=np.min(fft_freq), xmax=np.max(fft_freq), linestyle=':' , colors='y' )
if img_save_path:
plt.savefig(img_save_path, dpi=500 , bbox_inches = 'tight' )
if xlim:
plt.xlim(0 , xlim)
plt.tight_layout()
plt.show()
for channel_name in ['cDAQ1Mod1/ai3' ]:
with TdmsFile(file_path) as tdms_file:
channel = tdms_file['Log' ][channel_name]
all_channel_data = channel[:]
df = pd.DataFrame(all_channel_data)
print(df)
part_channel_data = channel[:10000 ]
plt_time_domain(part_channel_data, fs=256000 )
plt_fft_img(part_channel_data, fs=256000 )
plt_envelope_spectrum(part_channel_data, fs=256000 )
可知振动信号存在基频为500Hz的信号。
编辑:李正平
校核:陈凯歌、赵栓栓、曹希铭、赵学功、白亮、任超、海洋、Tina、陈宇航、 陈莹洁、王金
该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除