赞
踩
''' ============== 特征提取的类 ===================== 时域特征 :11类 频域特征 : 13类 总共提取特征 : 24类 参考文献 英文文献 016_C_(Q1 时域和频域共24种特征参数 ) Fault diagnosis of rotating machinery based on multiple ANFIS combination with GAs ''' import numpy as np import scipy.stats import matplotlib.pyplot as plt class Fea_Extra(): def __init__(self, Signal, Fs = 25600): self.signal = Signal self.Fs = Fs def Time_fea(self, signal_): """ 提取时域特征 11 类 """ N = len(signal_) y = signal_ t_mean_1 = np.mean(y) # 1_均值(平均幅值) t_std_2 = np.std(y, ddof=1) # 2_标准差 t_fgf_3 = ((np.mean(np.sqrt(np.abs(y)))))**2 # 3_方根幅值 t_rms_4 = np.sqrt((np.mean(y**2))) # 4_RMS均方根 t_pp_5 = 0.5*(np.max(y)-np.min(y)) # 5_峰峰值 (参考周宏锑师姐 博士毕业论文) #t_skew_6 = np.sum((t_mean_1)**3)/((N-1)*(t_std_3)**3) t_skew_6 = scipy.stats.skew(y) # 6_偏度 skewness #t_kur_7 = np.sum((y-t_mean_1)**4)/((N-1)*(t_std_3)**4) t_kur_7 = scipy.stats.kurtosis(y) # 7_峭度 Kurtosis t_cres_8 = np.max(np.abs(y))/t_rms_4 # 8_峰值因子 Crest Factor t_clear_9 = np.max(np.abs(y))/t_fgf_3 # 9_裕度因子 Clearance Factor t_shape_10 = (N * t_rms_4)/(np.sum(np.abs(y))) # 10_波形因子 Shape fator t_imp_11 = ( np.max(np.abs(y)))/(np.mean(np.abs(y))) # 11_脉冲指数 Impulse Fator t_fea = np.array([t_mean_1, t_std_2, t_fgf_3, t_rms_4, t_pp_5, t_skew_6, t_kur_7, t_cres_8, t_clear_9, t_shape_10, t_imp_11 ]) #print("t_fea:",t_fea.shape,'\n', t_fea) return t_fea def Fre_fea(self, signal_): """ 提取频域特征 13类 :param signal_: :return: """ L = len(signal_) PL = abs(np.fft.fft(signal_ / L))[: int(L / 2)] PL[0] = 0 f = np.fft.fftfreq(L, 1 / self.Fs)[: int(L / 2)] x = f y = PL K = len(y) # print("signal_.shape:",signal_.shape) # print("PL.shape:", PL.shape) # print("L:", L) # print("K:", K) # print("x:",x) # print("y:",y) f_12 = np.mean(y) f_13 = np.var(y) f_14 = (np.sum((y - f_12)**3))/(K * ((np.sqrt(f_13))**3)) f_15 = (np.sum((y - f_12)**4))/(K * ((f_13)**2)) f_16 = (np.sum(x * y))/(np.sum(y)) f_17 = np.sqrt((np.mean(((x- f_16)**2)*(y)))) f_18 = np.sqrt((np.sum((x**2)*y))/(np.sum(y))) f_19 = np.sqrt((np.sum((x**4)*y))/(np.sum((x**2)*y))) f_20 = (np.sum((x**2)*y))/(np.sqrt((np.sum(y))*(np.sum((x**4)*y)))) f_21 = f_17/f_16 f_22 = (np.sum(((x - f_16)**3)*y))/(K * (f_17**3)) f_23 = (np.sum(((x - f_16)**4)*y))/(K * (f_17**4)) #f_24 = (np.sum((np.sqrt(x - f_16))*y))/(K * np.sqrt(f_17)) # f_24的根号下出现负号,无法计算先去掉 #print("f_16:",f_16) #f_fea = np.array([f_12, f_13, f_14, f_15, f_16, f_17, f_18, f_19, f_20, f_21, f_22, f_23, f_24]) f_fea = np.array([f_12, f_13, f_14, f_15, f_16, f_17, f_18, f_19, f_20, f_21, f_22, f_23]) #print("f_fea:",f_fea.shape,'\n', f_fea) return f_fea def Both_Fea(self): """ :return: 时域、频域特征 array """ t_fea = self.Time_fea(self.signal) f_fea = self.Fre_fea(self.signal) fea = np.append(np.array(t_fea), np.array(f_fea)) #print("fea:", fea.shape, '\n', fea) return fea
题主本硕机械专业,自学转互联网 算法岗成功,获得阿里、字节、美团、华为等 15+ offer
后续会在公众号 「苏学算法」分享各类学习笔记、面试经验,感兴趣的可以关注一波
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。