本节摘要:振动信号里埋着设备的病历,寿命数据里写着产品的体质。本节前半讲频域视角:傅里叶变换如何把"波形难题"变成"频谱问题",演示去噪与轴承特征频率诊断;后半讲可靠性分析:威布尔分布拟合寿命数据、形状参数读失效模式、可靠度与分位寿命预测。
阅读完本节,你应当能够:
风场齿轮箱的振动加速度信号里,健康齿轮的啮合频率、轴承损伤的冲击、工况噪声混在一起。时域波形看一团乱麻,频域视角把它拆开:傅里叶变换把信号表示成不同频率正弦波的叠加,每个频率的幅度就是频谱的一根谱线。不同来源的能量聚在不同频率上,谱图就成了"分科室的化验单"。
import numpy as np rng = np.random.default_rng(99) fs = 4096 # 采样率 Hz t = np.arange(fs * 2) / fs # 两秒数据 # 构造信号:啮合频率 200Hz + 轴承外圈故障特征 58Hz + 强噪声 signal = (1.0*np.sin(2*np.pi*200*t) + 0.35*np.sin(2*np.pi*58*t) + 0.8*np.sin(2*np.pi*730*t)) # 730Hz 干扰分量 noisy = signal + 2.0*rng.standard_normal(len(t)) spectrum = np.abs(np.fft.rfft(noisy)) / len(t) freqs = np.fft.rfftfreq(len(t), 1/fs) # 频谱峰定位:找局部能量最集中的几个频率 top = freqs[np.argsort(spectrum)[-6:]][::-1] print("能量最强的频率 Hz:", np.round(np.sort(top), 1)) # 频域去噪:只保留三个目标频带附近的分量 mask = (np.abs(freqs - 58) < 4) | (np.abs(freqs - 200) < 4) | (np.abs(freqs - 730) < 4) filtered = np.fft.irfft(np.fft.rfft(noisy) * mask, n=len(t)) snr_before = 10*np.log10(np.var(signal)/np.var(noisy - signal)) snr_after = 10*np.log10(np.var(signal)/np.var(filtered - signal)) print(f"去噪前信噪比 {snr_before:.1f} dB -> 去噪后 {snr_after:.1f} dB")
频谱前三强恰好落在 58、200、730 赫兹——频域把混叠的时域信息解耦了。去噪就是"频谱上做手术":目标频带保留、其余置零,反变换回时域,信噪比提升十几个分贝。前提是信号频率结构已知或可从谱图读出;频率未知或漂移时,短时傅里叶或小波(时频联合分析)接棒。
轴承诊断更进一步:滚动轴承的几何参数(滚子数、转速、接触角)决定了外圈、内圈、滚动体损伤各自的特征频率公式。在频谱上找到"转频乘滚子数"附近的峰族,就能把故障定位到具体部件——这是第 1 章"翻译"能力的绝佳示范:把工程手册里的几何公式翻译成频谱上可检索的坐标。
一百台同批次油泵的失效时间(或试验截止时仍在服役的删失数据)交给分析者,要求回答:这批产品的失效率随时间上升还是下降?百分之九十的设备能撑过多少小时(B10 寿命)?威布尔分布是可靠性分析的标准答案——它的形状参数直接编码失效模式:小于 1 是早期失效(批次里混着劣品,跑过磨合期反而更稳)、约等于 1 是随机失效(失效率恒定)、大于 1 是耗损失效(磨损累积,风险随年龄上升)。
import numpy as np from scipy.stats import weibull_min from scipy.optimize import minimize rng = np.random.default_rng(5) lifetimes = weibull_min.rvs(2.3, scale=4200, size=120, random_state=rng) def nll(params, data): """威布尔的对数负似然(两参数)""" shape, scale = params if shape <= 0 or scale <= 0: return 1e12 return -weibull_min.logpdf(data, shape, scale=scale).sum() res = minimize(nll, [1.5, 3500], args=(lifetimes,), method='Nelder-Mead') shape_hat, scale_hat = res.x print(f"形状参数估计 {shape_hat:.2f}(>1 判耗损失效)") print(f"尺度参数估计 {scale_hat:.0f} 小时") B10 = weibull_min.ppf(0.10, shape_hat, scale=scale_hat) median = weibull_min.ppf(0.50, shape_hat, scale=scale_hat) print(f"B10 寿命 {B10:.0f} 小时, 中位寿命 {median:.0f} 小时") print(f"1000 小时的可靠度 {1 - weibull_min.cdf(1000, shape_hat, scale=scale_hat):.4f}")
形状参数估出来大于 1,判耗损失效——维修策略应为定期更换而非坏了再修;若估出小于 1,则是出厂筛选问题,加磨合测试比换维修周期有效。分布形状指导维修制度,这是可靠性分析最有商业价值的一步推断。删失的处理是本领域的技术门槛:试验截止时还活着的数据不能扔也不能当失效,似然函数里要按生存概率计入——上述代码在完整数据场合成立,带删失时把对数似然改写成"失效项加生存项"即可。
验收环节呼应第 4 章:参数估计要带置信区间(极大似然的渐近正态或自助法),B10 的区间比点值更重要——保修期定价押的就是区间下界。
⚠️ 常见坑:对非平稳信号直接做整段傅里叶分析。转速漂移会让频率成分在观测窗内滑动,谱线被抹成一团宽包络;先做阶次跟踪(按转角重采样)再分析,是变转速设备诊断的规范动作。
💡 关键直觉:频域分析的本质是"换一组正交基看同一个向量"——第 2 章的正交分解思想在这里从矩阵搬到了函数空间。去噪等于在这组基下做坐标的硬阈值,与第 2 章截断 SVD 压制噪声方向是同一招式的两个舞台。
