✨ 长期致力于故障诊断、容错控制、舞台机械、多电机同步、自抗扰控制、多尺度形态学、复杂网络研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)基于改进线性扩张状态观测器的转速估计与故障检测方法IL-ESO:
针对标准线性扩张状态观测器在转速全范围估计时低频段噪声放大明显的问题,提出带频率加权因子的改进型IL-ESO。在观测器的增益参数配置中引入一阶低通滤波器的转折频率自适应调整机制,根据电机当前转速的倒数动态改变观测带宽。在舞台四电机同步半实物平台上进行实测,当电机转速从300rpm突增至1500rpm时,IL-ESO的转速估计均方根误差为2.3rpm,比传统LESO降低了41%。将IL-ESO估计转速与编码器实测转速的残差输入序贯概率比检验模块,设定似然比阈值上下界分别为20和0.05,成功检测了偏置故障和卡死故障,检测延迟从120ms缩短至47ms。
(2)基于可靠因子平滑重构的传感器故障容错切换机制RF-SRC:
针对直接切换估计转速引起的抖震和系统不稳定问题,构建以SPRT似然比指数为核心的故障诊断可靠性量化评价因子。该因子采用滑动窗口内的残差序列累积和与理论最大似然比的比值,取值范围0到1。当可靠因子低于0.3时判定故障确诊,高于0.8时判定无故障。在确诊到恢复期间,设计二阶平滑重构策略,将实测转速与估计转速按照可靠因子的三次方加权融合。在舞台提升电机传感器间隙性故障模拟中,切换过程中的转矩波动峰值由原来的8.2Nm下降到3.1Nm,且未出现明显的转速超调。该方法将容错动作的误触发率从14%降低到2.5%。
(3)多尺度形态学与解析冗余融合的故障隔离方法MS-ARR:
针对复杂网络环境下传感器信号受强干扰导致形态学故障检测误报率高的问题,提出多尺度结构元素自适应匹配与解析冗余校验相融合的方法MS-ARR。首先采用扁平形和三角形两种结构元素分别在三个尺度(长度5,11,17)上对转速信号进行形态学开闭滤波,提取故障特征向量。然后利用舞台系统中转速传感器与位移传感器的解析冗余关系,构造数值积分微分器验证滤波结果的合理性。当形态学检测到跳变但解析冗余一致性系数高于0.85时,判定为噪声干扰而非真实故障。在实际舞台故障数据测试中,MS-ARR将虚警率控制在1.2%,故障检测准确率达到97.6%,优于单一形态学方法的89.3%。
import numpy as np from scipy.signal import butter, filtfilt class IL_ESO: def __init__(self, omega0=20, b0=1.5, wc_min=5, wc_max=50): self.omega0 = omega0 self.b0 = b0 self.wc_min = wc_min self.wc_max = wc_max self.z1 = 0.0 self.z2 = 0.0 self.Ts = 0.001 def update(self, y, u, current_speed): wc = np.clip(current_speed / 100 * 30, self.wc_min, self.wc_max) beta01 = 2 * self.omega0 beta02 = self.omega0 ** 2 e = self.z1 - y self.z1 += self.Ts * (self.z2 - beta01 * e + self.b0 * u) self.z2 += self.Ts * (-beta02 * e) return self.z1 def reliability_factor_SPRT(residuals, log_lambda, threshold_low=0.3, threshold_high=0.8): window = 20 if len(residuals) < window: return 0.5 recent = residuals[-window:] cum_lambda = np.sum([np.log(l) for l in recent if l > 0]) max_lambda = window * np.log(5) raw_factor = np.clip(cum_lambda / max_lambda, 0, 1) if raw_factor < threshold_low: factor = raw_factor ** 2 elif raw_factor > threshold_high: factor = 1 - (1 - raw_factor) ** 2 else: factor = raw_factor return factor def MS_ARR_morphology_filter(signal, scale=11): from scipy.ndimage import grey_erosion, grey_dilation struct_flat = np.ones(scale) eroded = grey_erosion(signal, footprint=struct_flat) opened = grey_dilation(eroded, footprint=struct_flat) struct_triangle = np.arange(1, scale+1) / scale eroded_tri = grey_erosion(signal, footprint=struct_triangle) opened_tri = grey_dilation(eroded_tri, footprint=struct_triangle) fused = 0.6 * opened + 0.4 * opened_tri residual = np.abs(signal - fused) return residual, fused def analytical_redundancy_check(speed_signal, pos_signal, dt=0.001): vel_from_pos = np.diff(pos_signal) / dt vel_from_pos = np.append(vel_from_pos[0], vel_from_pos) consistency = 1 - np.mean(np.abs(speed_signal - vel_from_pos) / (np.abs(speed_signal) + 1e-3)) return consistency