一种多尺度循环嵌入稀疏度量评估方法(Python)

360影视 欧美动漫 2025-09-11 18:01 2

摘要:该算法主要用于检测和提取信号中的周期性脉冲特征。算法首先对输入的原始信号进行预处理,计算其平方包络以突出脉冲特征。然后采用滑动窗口技术将信号分割成多个重叠的段落,对每个窗口内的信号计算多种稀疏度量指标,包括Box-Cox稀疏度量、广义基尼指数、基尼指数、峰度、

该算法主要用于检测和提取信号中的周期性脉冲特征。算法首先对输入的原始信号进行预处理,计算其平方包络以突出脉冲特征。然后采用滑动窗口技术将信号分割成多个重叠的段落,对每个窗口内的信号计算多种稀疏度量指标,包括Box-Cox稀疏度量、广义基尼指数、基尼指数、峰度、负熵和p-q均值等。这些度量值从不同角度反映了信号的稀疏特性,能够有效捕捉周期性脉冲。算法将所有窗口的度量值按时间顺序排列,形成随时间变化的指标曲线,通过分析这些曲线的峰值和变化模式,可以准确识别信号中的周期性脉冲位置和强度。最后,算法还提供统计分析和阈值检测功能,能够自动识别异常脉冲并输出诊断结果。

开始│↓生成或输入原始信号│↓计算信号的平方包络(预处理)│↓设置滑动窗口参数(窗口大小、步长)│↓初始化各种稀疏度量指标数组│↓循环处理每个窗口位置│ ││ ↓│ 提取当前窗口内的信号段│ ││ ↓│ 计算多种稀疏度量指标:│ │ ├─ Box-Cox稀疏度量(BCSM)│ │ ├─ 广义基尼指数(GGI)│ │ ├─ 基尼指数(GI)│ │ ├─ 峰度(Kurtosis)│ │ ├─ 负熵(NegEn)│ │ └─ p-q均值(pqMean)│ ││ ↓│ 存储当前窗口的度量值│↓所有窗口处理完毕?│ ├─ 否 → 移动到下一个窗口位置│ ↓│ 是↓生成可视化结果:│ ├─ 原始信号和平方包络图│ ├─ 各种稀疏度量指标随时间变化曲线│ └─ 统计信息汇总│↓设置检测阈值,识别异常脉冲│↓输出诊断结果:│ ├─ 各种度量指标的统计值│ ├─ 检测到的脉冲位置│ └─ 可能的故障类型判断│↓结束

算法步骤

首先,系统会生成或接收一个原始信号,这个信号通常来自机械系统的传感器采集。然后对原始信号进行预处理,计算其平方包络,这一步骤能够增强信号中的脉冲特征,使其更容易被检测。接下来,系统设置滑动窗口的参数,包括窗口大小和滑动步长,这些参数决定了分析的精细程度和计算效率。

系统初始化多个数组,用于存储不同稀疏度量指标随时间变化的值。随后,系统开始循环处理每个窗口位置:提取当前窗口内的信号段,对这个信号段计算多种稀疏度量指标,包括Box-Cox稀疏度量、广义基尼指数、基尼指数、峰度、负熵和p-q均值等。这些指标从不同角度反映了信号的稀疏特性,能够有效捕捉周期性脉冲。

完成所有窗口的处理后,系统生成可视化结果,包括原始信号和平方包络的对比图,以及各种稀疏度量指标随时间变化的曲线图。这些可视化结果帮助用户直观理解信号特征和指标变化。系统还计算各种度量指标的统计值,如均值和标准差,为用户提供量化参考。

最后,系统设置检测阈值,基于稀疏度量值识别异常脉冲位置。通过分析脉冲的周期性特征,系统能够判断可能的故障类型,并输出诊断结果。整个流程集成了信号处理、特征提取、模式识别和故障诊断等多个环节,为机械系统的状态监测和故障预警提供了一种全面而有效的解决方案。

# 主程序if __name__ == "__main__":# 生成测试信号t, signal = generate_test_signal# 计算平方包络(推荐输入)squared_envelope = np.square(signal)# 设置滑动窗口参数window_size = 400 # 窗口大小step = 50 # 滑动步长S = 5 # 分段数量a = 1 # 聚合参数Lambda = 2 # BCSM参数I = 2 # GGI参数p, q = 2, 1 # p-q均值参数# 使用滑动窗口计算各种CESM指标cesm_bcsm_values, positions = sliding_window_cesm(squared_envelope, window_size, step, S, a, cesm_bcsm, Lambda=Lambda)cesm_ggi_values, _ = sliding_window_cesm(squared_envelope, window_size, step, S, a, cesm_ggi, I=I)cesm_gi_values, _ = sliding_window_cesm(squared_envelope, window_size, step, S, a, cesm_gi, I=I)cesm_kur_r_values, _ = sliding_window_cesm(squared_envelope, window_size, step, S, a, cesm_kur_r)cesm_neg_en_values, _ = sliding_window_cesm(squared_envelope, window_size, step, S, a, cesm_neg_en)cesm_pq_mean_values, _ = sliding_window_cesm(squared_envelope, window_size, step, S, a, cesm_pq_mean, p=p, q=q)# 创建可视化图表fig = plt.figure(figsize=(16, 12))gs = GridSpec(4, 2, figure=fig)# 绘制原始信号ax1 = fig.add_subplot(gs[0, :])ax1.plot(t, signal, 'b-', linewidth=1)ax1.set_title('Original Signal with Impulses')ax1.set_xlabel('Time')ax1.set_ylabel('Amplitude')ax1.grid(True)# 绘制平方包络ax2 = fig.add_subplot(gs[1, :])ax2.plot(t, squared_envelope, 'g-', linewidth=1)ax2.set_title('Squared Envelope of Signal')ax2.set_xlabel('Time')ax2.set_ylabel('Amplitude')ax2.grid(True)# 绘制各种CESM指标ax3 = fig.add_subplot(gs[2, 0])ax3.plot(t[positions], cesm_bcsm_values, 'r-', linewidth=1.5)ax3.set_title('CESM-BCSM')ax3.set_xlabel('Time')ax3.set_ylabel('Value')ax3.grid(True)ax4 = fig.add_subplot(gs[2, 1])ax4.plot(t[positions], cesm_ggi_values, 'm-', linewidth=1.5)ax4.set_title('CESM-GGI')ax4.set_xlabel('Time')ax4.set_ylabel('Value')ax4.grid(True)ax5 = fig.add_subplot(gs[3, 0])ax5.plot(t[positions], cesm_gi_values, 'c-', linewidth=1.5)ax5.set_title('CESM-GI')ax5.set_xlabel('Time')ax5.set_ylabel('Value')ax5.grid(True)ax6 = fig.add_subplot(gs[3, 1])ax6.plot(t[positions], cesm_kur_r_values, 'y-', linewidth=1.5)ax6.set_title('CESM-Kurtosis')ax6.set_xlabel('Time')ax6.set_ylabel('Value')ax6.grid(True)plt.tight_layoutplt.show# 创建第二个图表显示剩余指标fig2, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8))ax1.plot(t[positions], cesm_neg_en_values, 'orange', linewidth=1.5)ax1.set_title('CESM-Negative Entropy')ax1.set_xlabel('Time')ax1.set_ylabel('Value')ax1.grid(True)ax2.plot(t[positions], cesm_pq_mean_values, 'purple', linewidth=1.5)ax2.set_title('CESM-pqMean')ax2.set_xlabel('Time')ax2.set_ylabel('Value')ax2.grid(True)plt.tight_layoutplt.show# 打印统计信息print("=== CESM指标统计信息 ===")print(f"CESM-BCSM: 均值={np.mean(cesm_bcsm_values):.4f}, 标准差={np.std(cesm_bcsm_values):.4f}")print(f"CESM-GGI: 均值={np.mean(cesm_ggi_values):.4f}, 标准差={np.std(cesm_ggi_values):.4f}")print(f"CESM-GI: 均值={np.mean(cesm_gi_values):.4f}, 标准差={np.std(cesm_gi_values):.4f}")print(f"CESM-Kurtosis: 均值={np.mean(cesm_kur_r_values):.4f}, 标准差={np.std(cesm_kur_r_values):.4f}")print(f"CESM-NegEn: 均值={np.mean(cesm_neg_en_values):.4f}, 标准差={np.std(cesm_neg_en_values):.4f}")print(f"CESM-pqMean: 均值={np.mean(cesm_pq_mean_values):.4f}, 标准差={np.std(cesm_pq_mean_values):.4f}")# 检测脉冲位置threshold = np.mean(cesm_bcsm_values) + 2 * np.std(cesm_bcsm_values)pulse_indices = np.where(cesm_bcsm_values > threshold)[0]pulse_times = t[positions[pulse_indices]]print(f"\n检测到的脉冲位置 (阈值={threshold:.4f}):")for i, time in enumerate(pulse_times):print(f"脉冲 {i+1}: 时间={time:.2f}")

完整代码通过知乎学术咨询获取:

https://www.zhihu.com/consult/people/792359672131756032?isMe=1

工学博士,担任《Mechanical System and Signal Processing》审稿专家,担任

《中国电机工程学报》《控制与决策》,《系统工程与电子技术》,《电力系统保护与控制》,《宇航学报》等EI期刊审稿专家,担任《计算机科学》,《电子器件》 ,《现代制造过程》 ,《电源学报》,《船舶工程》 ,《轴承》 ,《工矿自动化》 ,《重庆理工大学学报》 ,《噪声与振动控制》 ,《机械传动》 ,《机械强度》 ,《机械科学与技术》 ,《机床与液压》,《声学技术》,《应用声学》等中文核心审稿专家。

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

来源:小周科技讲堂

相关推荐