故障诊断 | 信号降噪算法合集,你学会了吗?
前言
在轴承故障信号中既包含轴承转动声音,又包含场景中的其他噪声信息。如何聚焦轴承转动的时域特征和频域特征,降低场景噪声的干扰,是我们需要解决的问题。本期为大家介绍几种常用且高效的信号降噪算法:
(1)离散小波变换(DWT):通过将信号分解到不同的频带,有效地分离出噪声和故障特征。
(2)经验模态分解(EMD):自适应地将信号分解为一系列本征模态函数(IMF),每个IMF代表不同尺度的成分。
(3)经验小波变换(EWT):结合小波变换和EMD的优势,自适应地选择小波基函数来分解信号。
(4)自编码器(Autoencoder):一种无监督学习方法,通过神经网络学习信号的压缩表示和重构,达到降噪效果。
● 数据集:CWRU西储大学轴承数据集
● 环境框架:python 3.9 pytorch 1.8 及其以上版本均可运行
● 使用对象:模型论文需求、毕业设计需求者
● 代码保证:代码注释详细、即拿即可跑通。
1.噪声可视化
1.1 导入数据
参考之前的文章,读取凯斯西储大学轴承数据:
1.2 添加高斯白噪声
添加信噪比SNR为5db的噪声
2.离散小波变换(DWT)降噪
2.1 处理步骤
(1)选择小波和分解层数:我们选择了db8小波,并计算了分解层数。
(2)DWT分解:使用wavedec函数对信号进行多层次分解。
(3)阈值处理:计算阈值并对细节系数进行软阈值处理,以去除噪声。
(4)信号重构:使用处理后的系数进行信号重构。
(5)绘图:绘制原始信号、带噪信号和降噪后的信号进行比较。
注意事项:
- 选择合适的小波基函数和分解层数对降噪效果有很大影响,需要根据具体信号特性进行调整。
- 阈值处理的方法有多种,可以根据实际情况选择不同的阈值计算方法和处理方式(如软阈值或硬阈值)。
2.2 降噪效果
不同故障信号添加 5db 噪声对比:
正常信号分别添加 -5db、-10db、5db 对比:
3.经验模态分解(EMD)
3.1 处理步骤
(1)初始化EMD对象:创建一个EMD对象,用于执行经验模态分解。
(2)进行EMD分解:使用emd.emd方法对带噪声信号进行分解,得到一系列本征模态函数(IMFs)。
(3)选择合适的IMF进行重构:假设第0个IMF主要是噪声,去除它后重构信号。实际应用中需要根据具体情况调整选择的IMF。
(4)绘图:绘制原始信号、带噪信号、IMF以及降噪后的信号进行比较。
注意事项
- IMF的选择:选择哪些IMF进行重构需要根据具体信号特性和应用需求来确定。通常,较低频的IMF包含主要的信号成分,而高频的IMF可能更多地包含噪声。
3.2 降噪效果
不同故障信号添加 5db 噪声对比:
正常信号分别添加 -5db、-10db、5db 对比:
4.经验小波变换(EWT)降噪
4.1 处理步骤
(1)边界计算:首先计算信号的傅里叶变换,然后找出频谱中的局部最大值作为边界。
(2)EWT分解:ewt函数执行经验小波变换。它计算信号的傅里叶变换,然后应用滤波器组,得到一系列的EWT系数。
(3)信号重构:通过将所有EWT系数相加(去掉第一个主要噪声成分的系数),重构降噪后的信号。
4.2 降噪效果
不同故障信号添加 5db 噪声对比:
5 自编码器(Autoencoder)降噪
5.1 处理步骤
(1)数据准备:将信号转换为PyTorch张量,并创建数据集和数据加载器。
(2)定义自编码器模型:
- 使用PyTorch的nn.Module定义自编码器模型,包括编码器和解码器。
- 编码器:将输入信号压缩到低维空间(encoding_dim),使用ReLU激活函数。
- 解码器:将编码后的信号重构回原始维度。
(3)初始化模型、损失函数和优化器:
(4)降噪信号重构:使用训练好的自编码器对带噪信号进行重构,得到降噪后的信号。
(5)绘图:绘制原始信号、带噪信号和降噪后的信号进行比较。
注意事项
- 编码维度:编码维度(encoding_dim)控制了信号的压缩程度。较小的编码维度可能导致信息丢失,较大的编码维度可能无法有效去除噪声。可以根据具体应用调整该参数。
- 训练数据:自编码器的性能依赖于训练数据的质量和数量。确保训练数据覆盖各种可能的信号特征。
- 模型复杂度:可以尝试增加模型的层数和神经元数量,以提高模型的表示能力。
5.2 降噪效果
不同故障信号添加 5db 噪声对比:
图片
本文转载自 建模先锋,作者: 小蜗爱建模