机械故障诊断信号幅域分析- 时域统计特征 | 基于python代码实现,在CWRU和IMF轴承数据及上实战

欢迎关注我的公众号《故障诊断与python学习》
代码位置:https://github.com/HappyBoy-cmd/fault_diagnosis_signal_processing
参考资料:
书籍:机械故障诊断及典型案例解析(第2版,时献江)
学位论文:细纱机罗拉轴承故障诊断方法研究

1、摘要

信号的幅域分析也称统计特征分析,主要利用振动信号的幅值统计特征来进行分析和诊断。应用比较广泛的有均方根值、峰值指标、波形指标和峭度等指标。信号的幅域分析也属于时域分析,和相关分析等时域分析方法不同,幅域分析不考虑原始信号的时序,仅与信号的幅值大小及分布有关。幅域参数包括有量纲幅域参数和无量纲幅域参数两大类。本文将介绍有量纲幅域参数和无量纲幅域参数,及其在CWRU轴承和IMF(辛辛那提大学轴承数据)全寿命周期轴承实验数据上进行实战。

2、有量纲幅域参数计算公式及物理意义

幅值域参数可以通过三种方式计算。

第1种:随机信号的幅值域参数与幅值概率密度函数有密切关系,对于各态历经的平稳信号,可以由幅值概率密度函数计算如下统计参数

均值: μ x = ∫ − ∞ + ∞ x p ( x ) d x {\mu_{x}=\int_{-\infty}^{+\infty} x p(x) \mathrm{d} x} μx=+xp(x)dx

均方根值: x r m s = ∫ − ∞ + ∞ x 2 p ( x ) d x {x_{\mathrm{rms}}=\sqrt{\int_{-\infty}^{+\infty} x^{2} p(x) \mathrm{d} x}} xrms=+x2p(x)dx

方差: σ x 2 = ∫ − ∞ ∞ ( x − x ˉ ) 2 p ( x ) d x = x r m s 2 − x ˉ 2 {\sigma_{x}^{2}=\int_{-\infty}^{\infty}(x-\bar{x})^{2} p(x) \mathrm{d} x=x_{\mathrm{rms}}^{2}-\bar{x}^{2}} σx2=(xxˉ)2p(x)dx=xrms2xˉ2

绝对平均值: ∣ x ˉ ∣ = ∫ − ∞ + ∞ ∣ x ∣ p ( x ) d x {|\bar{x}|=\int_{-\infty}^{+\infty}|x| p(x) \mathrm{d} x} xˉ=+xp(x)dx

方根幅值: x r = [ ∫ − ∞ + ∞ ∣ x ∣ p ( x ) d x ] 2 {x_{\mathrm{r}}=\left[\int_{-\infty}^{+\infty} \sqrt{|x|} p(x) \mathrm{d} x\right]^{2}} xr=[+xp(x)dx]2

歪度: x = ∫ − ∞ + ∞ x 3 p ( x ) d x {x=\int_{-\infty}^{+\infty} x^{3} p(x) \mathrm{d} x} x=+x3p(x)dx

峭度: β = ∫ − ∞ + ∞ x 4 p ( x ) d x {\beta=\int_{-\infty}^{+\infty} x^{4} p(x) \mathrm{d} x} β=+x4p(x)dx

第2种:以上参数计算需要用到幅值概率密度函数,不易计算。实际上对于各态历经的平稳随机信号,可以直接利用单个样本进行计算,公式如下:

均值: μ x = lim ⁡ T → ∞ 1 T ∫ 0 T x ( t ) d t {\mu_{x}=\lim _{T \rightarrow \infty} \frac{1}{T} \int_{0}^{T} x(t) \mathrm{d} t} μx=limTT10Tx(t)dt

均方根值: x r m s = lim ⁡ T → ∞ 1 T ∫ 0 T x 2 ( t ) d t {x_{\mathrm{rms}}=\sqrt{\lim _{T \rightarrow \infty} \frac{1}{T} \int_{0}^{T} x^{2}(t) \mathrm{d} t}} xrms=limTT10Tx2(t)dt

方差: σ x 2 = lim ⁡ T → ∞ 1 T ∫ 0 T [ x ( t ) − x ˉ ] 2   d t = x r m s 2 − x ˉ 2 {\sigma_{x}^{2}=\lim _{T \rightarrow \infty} \frac{1}{T} \int_{0}^{T}[x(t)-\bar{x}]^{2} \mathrm{~d} t=x_{r m s}^{2}-\bar{x}^{2}} σx2=limTT10T[x(t)xˉ]2 dt=xrms2xˉ2

绝对平均值: ∣ x ˉ ∣ = lim ⁡ 1 T ∫ 0 T ∣ x ( t ) ∣ d t {|\bar{x}|=\lim \frac{1}{T} \int_{0}^{T}|x(t)| \mathrm{d} t} xˉ=limT10Tx(t)dt

方根幅值: x r = [ lim ⁡ T → ∞ 1 T ∫ 0 T ∣ x ( t ) ∣ d t ] 2 {x_{\mathrm{r}}=\left[\lim _{T \rightarrow \infty} \frac{1}{T} \int_{0}^{T} \sqrt{|x(t)|} \mathrm{d} t\right]^{2}} xr=[limTT10Tx(t)dt]2

歪度: x r = [ lim ⁡ T → ∞ 1 T ∫ 0 T ∣ x ( t ) ∣ d t ] 2 {x_{\mathrm{r}}=\left[\lim _{T \rightarrow \infty} \frac{1}{T} \int_{0}^{T} \sqrt{|x(t)|} \mathrm{d} t\right]^{2}} xr=[limTT10Tx(t)dt]2

峭度: β = lim ⁡ T → ∞ 1 T ∫ 0 T x 4 ( t ) d t {\beta=\lim _{T \rightarrow \infty} \frac{1}{T} \int_{0}^{T} x^{4}(t) \mathrm{d} t} β=limTT10Tx4(t)dt

其中:

  • 信号的均值 μ x {\mu_{x}} μx反映信号中的静态部分,多数情况下表示振动的平衡位置;

  • 均方根值反映信号的能量大小,相当于电学中的有效值,多用于评价振动等级或烈度;

  • 方差 σ x 2 {\sigma_{x}^{2}} σx2仅反映了信号x(t)中的动态部分,反映振动信号以平衡位置为中心的幅值变化程度,若信号 x ( t ) x(t) x(t)的均值 μ x {\mu_{x}} μx为零,则均方值(均方根值的平方)等于方差。

  • 歪度 α {\alpha} α表示信号的幅值概率密度函数 p ( x ) p(x) p(x)对纵坐标的不对称性, α {\alpha} α越大,越不对称(可参见后面的图3.4)。

  • 峭度 β \beta β表示正态分布曲线的性状,当 β \beta β较小时表示分布曲线瘦而高,成为正峭度;当 β \beta β较大时,分布曲线具有负峭度,此时正态分布曲线峰顶的高度低于正常正态分布曲线(可参见后面的图3.5)。



第3种:以上参数是理论上的统计真值,实际工程信号采样长度有限,一般采用下述的估计值。以后不提示统计真值和估计值的区别,实际计算过程均为有限长度的估计值,有时为了说明问题方便,也常常使用统计真值的理论公式。

对于时间序列信号 x 1 , x 2 , … , x N x_1,x_2,…,x_N x1x2xN,有量纲幅域参数估计值的计算公式如下:

----------有量纲幅值参数(12个)----------

均值: x ˉ = 1 N ∑ i = 1 N x i {\bar{x}=\frac{1}{N} \sum_{i=1}^{N} x_{i}} xˉ=N1i=1Nxi

方差: σ x 2 = 1 N − 1 ∑ i = 1 N ( x i − X ˉ ) 2 {\sigma_{x}^{2}=\frac{1}{N-1} \sum_{i=1}^{N}\left(x_{i}-\bar{X}\right)^{2}} σx2=N11i=1N(xiXˉ)2

均方根值(有效值): x r m s = 1 N ∑ i = 1 N x i 2 {x_{\mathrm{rms}}=\sqrt{\frac{1}{N} \sum_{i=1}^{N} x_{i}^{2}}} xrms=N1i=1Nxi2

均方值: x r m s 2 = 1 N ∑ i = 1 N x i 2 {x_{\mathrm{rms} 2}=\frac{1}{N} \sum_{i=1}^{N} x_{i}^{2}} xrms2=N1i=1Nxi2

均对平均幅值: ∣ x ˉ ∣ = 1 N ∑ i = 1 N ∣ x i ∣ {|\bar{x}|=\frac{1}{N} \sum_{i=1}^{N}\left|x_{i}\right|} xˉ=N1i=1Nxi

方根幅值: x r = [ 1 N ∑ i = 1 N ∣ x i ∣ ] 2 {x_{\mathrm{r}}=\left[\frac{1}{N} \sum_{i=1}^{N} \sqrt{\left|x_{i}\right|}\right]^{2}} xr=[N1i=1Nxi]2

最大值: x max ⁡ = max ⁡ { x i } {x_{\max }=\max \left\{x_{i}\right\}} xmax=max{xi}

最小值: x min ⁡ = min ⁡ { x i } {x_{\min }=\min \left\{x_{i}\right\}} xmin=min{xi}

峰值: x p = max ⁡ { ∣ x max ⁡ ∣ , ∣ x min ⁡ ∣ } {x_{\mathrm{p}}=\max \left\{\left|x_{\max }\right|,\left|x_{\min }\right|\right\}} xp=max{xmax,xmin}

峰峰值: x p − p = max ⁡ { x i } − min ⁡ { x i } {x_{\mathrm{p}-\mathrm{p}}=\max \left\{x_{i}\right\}-\min \left\{x_{i}\right\}} xpp=max{xi}min{xi}

歪(偏)度: α = 1 N ∑ i = 1 N x i 3 {\alpha=\frac{1}{N} \sum_{i=1}^{N} x_{i}^{3}} α=N1i=1Nxi3

峭度: β = 1 N ∑ i = 1 N x i 4 {\beta=\frac{1}{N} \sum_{i=1}^{N} x_{i}^{4}} β=N1i=1Nxi4

3、无量纲幅域参数计算公式及物理意义

有量纲幅域参数的大小与信号(振动)绝对幅值有关,也就是和振动产生的工作条件有关,不同工作条件下的有量纲幅域参数不可比、为此构造了无量纲幅域参数。对于时间序列信号,无量纲幅域参数的计算公式如下:

波形指标: S f = x r m s ∣ x ˉ ∣ {S_{\mathrm{f}}=\frac{x_{\mathrm{rms}}}{|\bar{x}|}} Sf=xˉxrms

峰值指标: C f = x max ⁡ x r m s {C_{f}=\frac{x_{\max }}{x_{\mathrm{rms}}}} Cf=xrmsxmax

脉冲指标: I f = x max ⁡ ∣ x ˉ ∣ {I_{\mathrm{f}}=\frac{x_{\max }}{|\bar{x}|}} If=xˉxmax

裕度指标: C L f = x max ⁡ x r {C L_{\mathrm{f}}=\frac{x_{\max }}{x_{\mathrm{r}}}} CLf=xrxmax

峭度指标: K r = β x r m s 4 {K_{\mathrm{r}}=\frac{\beta}{x_{\mathrm{rms}}^{4}}} Kr=xrms4β

偏度指标: P = α X m s 3 {P=\frac{\alpha}{X_{\mathrm{ms}}^{3}}} P=Xms3α

其中,

  • 裕度指标 C L f CL_f CLf是无量纲的歪度指标,表示信号的幅值概率密度函数 p ( x ) p(x) p(x)对纵坐标的不对称性。如果 C L f CL_{f} CLf越大,越不对称,且不对称有正(右偏移)负(左偏移)之分,如图3.4所示。旋转机械等设备的振动信号由于存在某一方向的摩擦或碰撞,或者某一方向的支撑刚度较弱,会造成振动波形的不对称,使裕度指标增大
  • 峭度指标 K r K_r Kr对大幅值最为敏感,当大幅值出现的概率增加时, K r K_r Kr值会迅速增加,这对探测信号中含有脉冲的故障特别有效。峭度指标 K r Kr Kr的物理意义如图3.5所示。 K r = 3 K_r=3 Kr=3时定义分布曲线具有正常峰度(即零峭度);当 K r > 3 K_r>3 Kr>3时,分布曲线具有正峭度,此时正态分布曲线峰顶的高度高于正常正态分布曲线,故称为正峭度。当 K r < 3 K_r<3 Kr<3时,分布曲线具有负峭度,此时正态分布曲线峰顶的高度低于正常正态分布曲线,故称为负峭度
图3.4 裕度指标CLf 的物理意义

图3.5 峭度指标Kr的物理意义

图3.6 滚动轴承振动幅值概率密度分布图

图3.6 为滚动轴承的振动幅值概率密度分布图。

  • 实线为正常时,幅值概率密度函数近似为正态分布;
  • 虚线为发生剥落时,此时幅值概率密度函数呈现头部窄、底部宽的形式, K r K_r Kr值较大表明信号中冲击成分幅值增大(底部宽),但是能量不大(值小),即系统处于剥落故障开始发生的时刻。

另外,必须着重指出,信号的均值 x ˉ {\bar{x}} xˉ反映信号中的静态部分,一般对诊断不起作用,但对计算上述参数有很大影响。所以,一般在计算时应先从数据中去除均值,保留对诊断有用的动态部分,这一过程称为零均值化处理(也叫去直流分量),其计算方法如下:

  • 假设原始时间序列信号 x 1 , x 2 , ⋯   , x N {x_{1}, x_{2}, \cdots, x_{\mathrm{N}}} x1,x2,,xN,其均值 x ˉ = 1 N ∑ i = 1 N x i {\bar{x}=\frac{1}{N} \sum_{i=1}^{N} x_{i}} xˉ=N1i=1Nxi,则均值化后的新时间序列计算式为: x i ′ = x i − x ˉ , i = 1 , 2 , ⋯   , N {x_{i}^{\prime}=x_{i}-\bar{x}, \quad i=1,2, \cdots, N} xi=xixˉ,i=1,2,,N

表3.2 为齿轮振动信号的无量纲幅域诊断参数。新齿轮经过运行产生了疲劳剥落故障,振动信号中有明显的冲击脉冲,各幅域参数中除了波形参数外,均有明显上升。

  • 峭度指标、裕度指标和脉冲指标对冲击脉冲型故障比较敏感。
  • 当早期发生故障时,大幅值的脉冲还不是很多,均方根值变化不大,上述参数已有增加。
  • 当故障逐步发展时,它们上升较快;但上升到一定程度后,由于分母上的有效值增大,这些指标反而会逐步下降。
  • 这表明这些参数对早期故障有较高敏感性,但稳定性不很好。
  • 均方根值则相反,虽然对早期故障不敏感.但稳定性好,随着故障发展单调上升。

图3.8为某滚动轴承振动信号的峭度指标有效值随轴承疲劳试验时间的变化过程,可见.两个指标的变化符合上述规律。因此,要想取得较好的故障监测效果.一般可以采取以下措施

  • 同时用峭度指标与有效值进行故障监测令以兼顾敏感性与稳定性。
  • 连续监测可发现峭度指标的变化趋势,当指标值上升到顶点开始下降时,就要密切注意是否有故障发生。
图3.8 峭度指标和有效值随轴承疲劳试验时间的变化过程

4、模拟数据代码实战

4.1 导入包

import scipy.io as scio
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal, fftpack, stats
from matplotlib import rcParams
config = {
 "font.family": 'serif', # 衬线字体
 "font.size": 10, # 相当于小四大小
 "font.serif": ['SimSun'], # 宋体
 "mathtext.fontset": 'stix', # matplotlib渲染数学字体时使用的字体,和Times New Roman差别不大
 'axes.unicode_minus': False # 处理负号,即-号
}
rcParams.update(config)

4.2 生成模拟正弦数据

fs = 1000
f = 10
n = np.arange(5120)
t = n/fs
x = 3 * np.sin(2 * np.pi * n * f/fs) + np.random.uniform(0,1, len(n)) #正弦信号3*sin(2*pi*10*t)+噪声信号
# x = np.random.uniform(-1,1, len(n))
plt.figure(figsize=(12,2))
plt.plot(t, x)

4.3 绘制幅值概率密度函数

def interval_num_count(data, low, high):
 '''
 fun: 统计一维数据data落入某一个区间[low, high]内的数量
 param low: 区间下限
 param high: 区间上限
 return count_num: 落入某一个区间[low, high]内的数量
 '''
 count_num = 0
 for i in range(len(data)):
 if data[i]>low and data[i]
def plt_amp_prob_density_fun(data, n):
 '''
 fun: 绘制幅值概率密度函数
 param data: 输入数据,1维array
 param n: 分割成段数的数量
 return: 绘制幅值概率密度函数
 '''
 xt = data
 max_value = np.abs( xt[np.argmax( np.abs(xt) )] ) #
 count_num = []
 x = []
 for i in range(n):
 interval = max_value*2/n # 区间长度为interval_len
 low = -max_value + i*interval # 区间下限
 high = -max_value + (i+1)*interval # 区间上限
 count = interval_num_count(data=xt, low=low, high=high) # 统计落入该区间的幅值个数
 count_num.append(count)
 x.append( (high+low)/2 )
 count_num = count_num/np.sum(count_num)
 plt.bar(np.arange(len(count_num)), height=count_num) # 绘制柱状图
 plt.show()
plt_amp_prob_density_fun(data=x, n=100)

4.4 计算时域特征

def get_time_domain_features(data):
 x = data
 #------有量纲指标------#
 X_mean = np.mean(x) # 1.平均值
 X_std = np.std(x) # 2.方差
 x = x - X_mean # 零均值化(去直流分量)
 X_rms2 = np.sum(x**2)/len(x) # 3.均方值
 X_rms = np.sqrt(X_rms2) # 4.均方根值(有效值)
 X_max = np.max(x) # 5.最大值
 X_min = np.min(x) # 6.最小值
 X_p = max(abs(X_max), abs(X_min)) # 7.峰值
 X_pp = X_max - X_min # 8.峰峰值
 X_avg = np.mean(np.abs(x)) # 9.平均绝对幅值
 X_r = np.mean( np.sqrt(np.abs(x)) )**2 # 10.方根幅值
 X_alpha = np.mean( np.power(x, 3) ) # 11.偏度(歪度)
 X_beta = np.mean( np.power(x, 4) ) # 12.峭度
 #-------无量纲指标-------#
 X_wf = X_rms/X_avg # 13.波形指标
 X_cf = X_pp/X_rms # 14.峰值指标
 X_if = X_pp/X_avg # 15.脉冲指标
 X_clf = X_pp / X_r # 16 裕度指标
 X_pf = X_alpha / X_rms ** 3 # 17.偏度指标
 X_kf = X_beta/X_rms ** 4 # 18.峭度指标
 
 time_domain_features_list = [X_mean, X_std, X_rms2, X_rms, X_max, X_min, X_p, X_pp, X_avg, X_r, X_alpha, X_beta, X_wf, X_cf, X_if, X_clf, X_pf, X_kf]
 time_domain_names_list = ['平均值', '方差', '均方值', '均方根值', '最大值', '最小值', '峰值', '峰峰值', '平均绝对幅值', 
 '方根幅值', '偏度', '峭度', '波形指标', '峰值指标', '脉冲指标', '裕度指标', '偏度指标', '峭度指标']
 for i in range(len(time_domain_names_list)):
 print(time_domain_names_list[i],':',time_domain_features_list[i])
 return time_domain_features_list, time_domain_names_list
time_domain_features_list, time_domain_names_list = get_time_domain_features(data=x)
time_domain_features_list, time_domain_names_list = get_time_domain_features(data=x)
time_domain_features_list, time_domain_names_list = get_time_domain_features(data=x)
平均值 : 0.506101294634079
方差 : 2.1422782642540135
均方值 : 4.589356161495189
均方根值 : 2.1422782642540135
最大值 : 3.4797421092734804
最小值 : -3.4874981121547806
峰值 : 3.4874981121547806
峰峰值 : 6.967240221428261
平均绝对幅值 : 1.920591101461503
方根幅值 : 1.752480189593869
偏度 : -0.07538076391033736
峭度 : 32.72574911884685
波形指标 : 1.1154265281265827
峰值指标 : 3.2522573456881902
脉冲指标 : 3.627654119675153
裕度指标 : 3.9756456379931424
偏度指标 : -0.007667131112382436
峭度指标 : 1.5537676354880396

5、CWRU数据实战

5.1 内圈故障

定义CWRU数据读取函数

def data_acquision(FilePath):
 """
 fun: 从cwru mat文件读取加速度数据
 param file_path: mat文件绝对路径
 return accl_data: 加速度数据,array类型
 """
 data = scio.loadmat(file_path) # 加载mat数据
 data_key_list = list(data.keys()) # mat文件为字典类型,获取字典所有的键并转换为list类型
 accl_key = data_key_list[3] # 获取'X108_DE_time'
 accl_data = data[accl_key].flatten() # 获取'X108_DE_time'所对应的值,即为振动加速度信号,并将二维数组展成一维数组
 return accl_data

使用CWRU轴承数据进行分析,选取了4个mat文件,包括内圈故障、外圈故障、滚动体故障和正常状态。
文件名解释(以“1730_12k_0.007-InnerRace”为例):
1730:转速,单位rpm
12k:采样频率,Hz
0.007:故障大小,单位inch,1inch=25.4mm
InnerRace:代表为内圈故障

绘制内圈故障的时域图和幅值概率密度函数

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第6篇-时频域指标/1730_12k_0.007-InnerRace.mat'
data = data_acquision(FilePath=file_path)
print(data)
plt.figure(figsize=(12,2))
plt.plot(data)
plt.show()
plt_amp_prob_density_fun(data=data, n=100)
>>>输出结果
[ 0.22269856 0.09323776 -0.14651649 ... -0.36125573 0.31138814
 0.17055689]


计算内圈故障的各幅域特征参数大小

get_time_domain_features(data=data)
>>>输出结果
平均值 : 0.004718397126522763
方差 : 0.3135712339852505
均方值 : 0.09832691878303272
均方根值 : 0.3135712339852505
最大值 : 1.6667390879034174
最小值 : -1.5402176785636486
峰值 : 1.6667390879034174
峰峰值 : 3.2069567664670657
平均绝对幅值 : 0.22413171955956412
方根幅值 : 0.1788814956202537
偏度 : -0.00040761964834175015
峭度 : 0.05115487013606729
波形指标 : 1.3990488923274307
峰值指标 : 10.227203323816086
脉冲指标 : 14.308357481792312
裕度指标 : 17.92782845060225
偏度指标 : -0.01322045690393005
峭度指标 : 5.291053175312336

可发现其峭度指标大于3,幅值概率密度函数偏瘦尖。

5.2 正常状态

绘制正常状态的时域图和幅值概率密度函数图

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第6篇-时频域指标/1730_48k_Normal.mat'
data = data_acquision(FilePath=file_path)
print(data)
plt.figure(figsize=(12,2))
plt.plot(data)
plt.show()
plt_amp_prob_density_fun(data=data, n=100)
>>>输出结果
[ 0.01460308 0.05444862 0.10764554 ... -0.02357354 0.00521538
 0.04777292]



计算正常的各幅域特征参数大小

get_time_domain_features(data=data)
>>>输出结果
平均值 : 0.01245851422293584
方差 : 0.06469520385023537
均方值 : 0.004185469401223511
均方根值 : 0.06469520385023537
最大值 : 0.2712584088539872
最小值 : -0.3189145142229358
峰值 : 0.3189145142229358
峰峰值 : 0.590172923076923
平均绝对幅值 : 0.05170725167996645
方根幅值 : 0.04384435047720211
偏度 : -3.4532433523248354e-05
峭度 : 5.180413666679372e-05
波形指标 : 1.2511824115243202
峰值指标 : 9.12235974158347
脉冲指标 : 11.41373606026678
裕度指标 : 13.460637839390442
偏度指标 : -0.1275295794513686
峭度指标 : 2.9571686803135426

可发现其峭度指标在3左右,幅值概率密度函数与正态分布差不多。

5.3 外圈故障

绘制外圈故障的时域图和幅值概率密度函数图

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第6篇-时频域指标/1730_12k_0.007-OuterRace3.mat'
data = data_acquision(FilePath=file_path)
print(data)
plt.figure(figsize=(12,2))
plt.plot(data)
plt.show()
plt_amp_prob_density_fun(data=data, n=100)
>>>输出结果
[ 0.10436457 0.62537525 0.12304461 ... 0.88689581 0.84588094
 -0.5636499 ]



计算外圈故障的各幅域特征参数大小

get_time_domain_features(data=data)
>>>输出结果
平均值 : 0.006673843393593249
方差 : 0.7975703939021197
均方值 : 0.6361185332291823
均方根值 : 0.7975703939021197
最大值 : 3.612380847225169
最小值 : -3.322787017046288
峰值 : 3.612380847225169
峰峰值 : 6.935167864271457
平均绝对幅值 : 0.6080145950947324
方根幅值 : 0.5062975339786826
偏度 : 0.04229527425007543
峭度 : 1.6551101479225734
波形指标 : 1.3117619220601988
峰值指标 : 8.695367728409641
脉冲指标 : 11.406252284438855
裕度指标 : 13.697810869771013
偏度指标 : 0.08336519532029546
峭度指标 : 4.090258951031924

可发现其峭度指标大于3,幅值概率密度函数顶部出现凹坑。

5.4 滚动体故障

绘制滚动体故障的时域图和幅值概率密度函数图

file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第6篇-时频域指标/1730_12k_0.014-Ball.mat'
data = data_acquision(FilePath=file_path)
print(data)
plt.figure(figsize=(12,2))
plt.plot(data)
plt.show()
plt_amp_prob_density_fun(data=data, n=100)
>>>输出结果
[ 0.1054204 -0.10736962 -0.16340974 ... -0.5821675 0.07488259
 0.56202555]



计算滚动体故障的各幅域特征参数大小

get_time_domain_features(data=data)
>>>输出结果
平均值 : 0.004535467952873973
方差 : 0.13361739428910718
均方值 : 0.017853608056610733
均方根值 : 0.13361739428910718
最大值 : 1.9846451308495212
最小值 : -1.7174139110666464
峰值 : 1.9846451308495212
峰峰值 : 3.7020590419161676
平均绝对幅值 : 0.09177927629408723
方根幅值 : 0.07371838887961654
偏度 : 0.0003906736827228592
峭度 : 0.004736237523606714
波形指标 : 1.4558558280734157
峰值指标 : 27.70641548289771
脉冲指标 : 40.33654645580015
裕度指标 : 50.21893584735956
偏度指标 : 0.16376653561183255
峭度指标 : 14.858722825401527

可发现其峭度指标远远大于3,幅值概率密度函数偏也十分瘦尖。

6、IMF加速寿命实验轴承数据


IMF是一个轴承全寿命周期数据,即在试验台上从正常跑到坏。IMF数据是每隔10分钟采集一次。
文件名是采集时间

如“2004.02.12.10.32”为2004年2月12日10:32采集。
本次数据选取的是一个最终跑出外圈故障的数据。

6.1 单个数据尝试

定义IMF数据读取函数

def IMF_data_acquision(FilePath, n):
 """
 fun: 从IMF文件读取加速度数据
 param file_path: mat文件绝对路径
 return accl_data: 加速度数据,array类型
 """
 data = np.loadtxt(fname=file_path)
 accl_data = data[:, n]
 return accl_data
file_path = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第6篇-时频域指标/IMF_2nd_test_OF1/2004.02.12.10.32.39'
data = IMF_data_acquision(FilePath=file_path, n=0)

绘制时域图和幅值概率密度函数图、计算时域特征参数

print(data)
plt.figure(figsize=(12,2))
plt.plot(data)
plt.show()
plt_amp_prob_density_fun(data=data, n=100)
time_domain_features_list, time_domain_names_list = get_time_domain_features(data=data)
>>>输出结果
[-0.049 -0.042 0.015 ... -0.012 -0.012 0.02 ]


>>>输出结果
平均值 : -0.010195996093750001
方差 : 0.07347493104305192
均方值 : 0.005398565491781235
均方根值 : 0.07347493104305192
最大值 : 0.46419599609375
最小值 : -0.37580400390625
峰值 : 0.46419599609375
峰峰值 : 0.8400000000000001
平均绝对幅值 : 0.057688910923004155
方根幅值 : 0.04853102183425118
偏度 : 3.331677118397008e-05
峭度 : 0.00010575850683660837
波形指标 : 1.2736404599684148
峰值指标 : 11.432470749891692
脉冲指标 : 14.5608573044675
裕度指标 : 17.308516661134114
偏度指标 : 0.08399343541253229
峭度指标 : 3.628762642644256

6.2 整个寿命周期数据分析

遍历读取全寿命周期数据。并获取每次采集数据的时域特征参数大小。

base_dir = r'E:/研究生/pytorch/CSDN代码/fault_diagnosis_signal_processing/第6篇-时频域指标/IMF_2nd_test_OF1'
file_name_list = os.listdir(base_dir)
all_time_domain_features_list = []
for file_name in file_name_list:
 file_path = os.path.join(base_dir, file_name)
 data = IMF_data_acquision(FilePath=file_path, n=0)
 time_domain_features_list, time_domain_names_list = get_time_domain_features(data=data)
 all_time_domain_features_list.append(time_domain_features_list)
>>>输出结果
平均值 : -0.010195996093750001
方差 : 0.07347493104305192
均方值 : 0.005398565491781235
均方根值 : 0.07347493104305192
最大值 : 0.46419599609375
最小值 : -0.37580400390625
峰值 : 0.46419599609375
峰峰值 : 0.8400000000000001
...
峰值指标 : 7.003117715378994
脉冲指标 : 7.147508219574274
裕度指标 : 7.207950142678743
偏度指标 : 0.31703227680043844
峭度指标 : 1.3902259645328505

将list转为array

all_time_domain_features_arr = np.array(all_time_domain_features_list)
all_time_domain_features_arr
>>>结果输出
array([[-1.01959961e-02, 7.34749310e-02, 5.39856549e-03, ...,
 1.73085167e+01, 8.39934354e-02, 3.62876264e+00],
 [-2.58500977e-03, 7.53381213e-02, 5.67583252e-03, ...,
 1.52497399e+01, 5.21419073e-02, 3.64829108e+00],
 [-2.48398437e-03, 7.61892928e-02, 5.80480834e-03, ...,
 1.77537992e+01, 3.28079981e-02, 3.51347531e+00],
 ...,
 [-1.70307617e-03, 4.83832398e-01, 2.34093789e-01, ...,
 2.50246000e+01, -3.77095385e-01, 7.89175523e+00],
 [ 1.85683594e-03, 9.87327986e-04, 9.74816551e-07, ...,
 1.46340168e+01, 5.79698251e-01, 6.63751264e+00],
 [-1.16196289e-03, 9.99554810e-04, 9.99109819e-07, ...,
 7.20795014e+00, 3.17032277e-01, 1.39022596e+00]])

绘制整个周期的每个时域特征参数大小变化

for i in range(len(time_domain_features_list)):
 plt.figure(figsize=(12,3))
 plt.plot(all_time_domain_features_arr[:,i])
 plt.title(time_domain_names_list[i])
 plt.show()


















可发现:

  • 有些时域特征参数在前期正常状态时波动较小,如方差、最大值、平均绝对幅值。有些时域特征参数在前期正常状态时波动较大,如峰值指标、脉冲指标、裕度指标。
  • 有些特征对故障早期比较敏感,如波形指标、方差、均方值、最大值、峰值、平均绝对幅值等。有些特征对故障早期不敏感,如峭度、平均值、偏度。
  • 有些特征是在故障状态时值变小,如最小值、偏度。
  • 有些特征在故时是呈一直变大趋势,如方差、均方根值、平均绝对幅值。有些特征是先上升后下降,如波形指标、峰值指标、裕度指标、偏度指标。

7、总结

  • 时域指标能用于监测轴承健康状态。
  • 故障轴承的峭度指标大于3。
  • 不同的时域特征其对轴承故障程度敏感度不同,最好用多个特征进行同时监测。
作者:故障诊断与python学习原文地址:https://blog.csdn.net/m0_47410750/article/details/126943701

%s 个评论

要回复文章请先登录注册