论文题目: Vibration and current dataset of three-phase permanent magnet synchronous motors with stator faults
机构: Department of Mechanical Engineering, Korea Advanced Institute of Science and Technology
该数据集是根据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]。此外,与驱动电流数据同步的振动数据可用于分析故障诊断中的振动-电流相关性。该数据集还可用于评估新开发的基于深度学习的故障诊断方法,特别是针对不同电机功率的情况。
振动数据使用加速度计(PCB352C34)测量,并通过NI9234模块采集,采集时长为120秒,采样频率为25.6 kHz。每个振动数据文件包含两列,分别为“时间戳”和“振幅”。振动振幅的单位为“重力常数(g)”(1g = 9.80665 m/s²)。振动数据文件包括PMSM在匝间短路和线圈间短路情况下的z方向振动数据。以下是电机运行状态和健康条件下的振动文件描述:
1.1000W_0_00_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的z方向的健康状态振动数据。
2.1000W_2_26_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.26%。
3.1000W_2_70_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的匝间短路故障振动数据,严重度为2.70%。
4.1000W_3_35_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为3.35%。
5.1000W_4_41_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的Z方向的匝间短路故障振动数据,严重度为4.41%。
6.1000W_6_48_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为6.48%。
7.1000W_12_17_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为12.17%。
8.1000W_21_69_vibration_interturn.tdms:此文件包括从功率为1.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为21.69%。
9.1000W_0_00_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的Z方向健康状态振动数据。
10.1000W_0_68_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为0.68%。
11.1000W_0_81_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为0.81%。
12.1000W_1_01_vibration_intercoil.tdms:文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为1.01%。
13 1000W_1_34_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为1.34%。
14.1000W_ 2_00_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为2.00%。
15.1000W_ 3_93_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为3.93%。
16.1000W_7_56_vibration_intercoil.tdms:此文件包括从功率为1.0kW的电机获取的z方向的线圈间短路故障振动数据,严重度为7.56%。
17.1500W_0_00_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向健康状态振动数据。
18.1500W_1_57_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为1.57%。
19.1500W_1_88_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为1.88%。
20.1500W_2_34_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.34%。
21.1500W_3_10_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为3.10%。
22.1500W_4_57_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为4.57%。
22.1500W_4_57_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为4.57%。
23.1500W_8_74_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为8.74%。
24.1500W_16_08_vibration_interturn.tdms:此文件包括从功率为1.5kW的电机获取的z方向的匝间短路故障振动数据,严重度为16.08%。
25.1500W_0_00_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的Z方向健康状态振动数据。
26.1500W_4_79_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为4.79%。
27.1500W_5_70_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的z方向的线圈间短路故障振动数据,严重度为5.70%。
28.1500W_7_02_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为7.02%。
29.1500W_9_15_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为9.15%。
30.1500W_13_12_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的z方向的线圈间短路故障振动数据,严重度为13.12%。
31.1500W_23_20_vibration_intercoil.tdms:此文件包括从功率为1.5kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为23.20%。
32.1500W_37_66_vibration_intercoil.tdms:此文件包括z方向的线圈间短路故障振动数据,严重度为37.66%,这些数据来自功率为1.5kW的电机。
33.3000W_0_00_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的健康状态振动数据。
34.3000W_1_78_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为1.78%。
35.3000W_2_13_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.13%。
36.3000W_2_65_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为2.65%。
37.3000W_3_50_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为3.50%。
38.3000W_5_16_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为5.16%。
39.3000W_9_81_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为9.81%。
40.3000W_17_86_vibration_interturn.tdms:此文件包括从功率为3.0kW的电机获取的z方向的匝间短路故障振动数据,严重度为17.86%。
41.3000W_0_00_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的Z方向健康的线圈间短路振动数据。
42.3000W_2_49_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为2.49%。
43.3000W_2_98_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的Z方向线圈间短路故障振动数据,严重度为2.98%。
44.3000W_3_69_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的z方向的线圈间短路故障振动数据,严重度为3.69%。
45.3000W_4_86_vibration_intercoil.tdms:文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为4.86%。
46.3000W_7_12_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为7.12%。
47.3000W_13_10_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为13.10%。
48.3000W_23_48_vibration_intercoil.tdms:此文件包括从功率为3.0kW的电机获取的Z方向的线圈间短路故障振动数据,严重度为23.48%。
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%。
为了测量不同功率的永磁同步电机(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 在不同功率(a)1.0kW、(b)1.5kW和(c)3.0kW的PMSM的U相上的人工故障
图3 短路故障方案的定子绕组,其中R旁路为旁路电阻,R为定子回路电阻
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', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
'axes.unicode_minus': False # 处理负号,即-号
}
rcParams.update(config)
为解决测试和测量中数据读取和分析时的种种问题,如没有描述性信息、格式不一致、存储混乱等,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(): # TdmsFile可以按组名索引来访问TDMS文件中的组,使用groups()方法直接访问所有组
group_name = group.name
print("group_name:", group_name)
for channel in group.channels(): # TdmsGroup 可以通过通道名称来索引来访问这个组中的一个通道,使用 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
with TdmsFile(file_path) as tdms_file:
channel = tdms_file['Log']['cDAQ1Mod2/ai0']
all_channel_data = channel[:]
df = pd.DataFrame(all_channel_data) # 将numpy数组中的数据转换成DataFrame并输出
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频率
fft_amp= 2*np.abs(fft_result)/len(t) # FFT幅值
# 绘制频域图
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: # 图片横坐标是否设置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) # 将numpy数组中的数据转换成DataFrame并输出
print(df)
part_channel_data = channel[:10000] # 取部分数据进行分析,这里取的是0到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(): # TdmsFile可以按组名索引来访问TDMS文件中的组,使用groups()方法直接访问所有组
group_name = group.name
print("group_name:", group_name)
for channel in group.channels(): # TdmsGroup 可以通过通道名称来索引来访问这个组中的一个通道,使用 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) # 将numpy数组中的数据转换成DataFrame并输出
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 = sqrt(xt^2 + ht^2)
at = at - np.mean(at) # 去直流分量
fft_amp = np.fft.fft(at) # 对解析信号at做fft变换获得幅值
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频率,此时包括正频率和负频率
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: # 图片横坐标是否设置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 = sqrt(xt^2 + ht^2)
at = at - np.mean(at) # 去直流分量
fft_amp = np.fft.fft(at) # 对解析信号at做fft变换获得幅值
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频率,此时包括正频率和负频率
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: # 图片横坐标是否设置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) # 将numpy数组中的数据转换成DataFrame并输出
print(df)
part_channel_data = channel[:10000] # 取部分数据进行分析,这里取的是1到100的数据
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、陈宇航、陈莹洁、王金
该文资料搜集自网络,仅用作学术分享,不做商业用途,若侵权,后台联系小编进行删除