首页/文章/ 详情

信号处理之噪声与降噪进阶(一) | 堆叠降噪自编码器及python代码实现

6月前浏览12358


目录

1 自编码器

2 降噪自编码器
3 堆叠降噪自编码器
4 算法测试

4.1 测试用例

4.2 降噪结果

4.3 降噪指标

5 参考文献

1 自编码器

自编码器(Auto-Encoder, AE)是神经网络的一种,严格意义上,自编码器是一种自监督算法,不属于无监督的机器学习方法,训练过程中,不需要对训练样本进行打标,其标签产生自输入数据[1]。经过训练后能够尝试将输入复  制到输出,其基本结构如图1所示。

图1 自编码器基本结构

自编码器由编码器和解码器组成,自编码器算法的基本过程如下[2]

(1)编码:原始数据输入编码器,得到输入数据的隐含特征,这个过程即为编码(encoding);

(2)解码:特征信号输入解码器,得到重构的输入信号,这个过程即为解码(decoding);

(3)迭代:反复进行编码和解码过程,得到能够使输出信号与输入信号尽可能相似的加权(W,B)。

由于在编码和解码过程中输入数据会被压缩,特征会被降维,因此自编码器是一种有损方法,训练过程中,设定损失函数衡量由于压缩而损失的信息,训练的目的为最小化损失函数。

2 降噪自编码器

为了规避AE的过拟合问题,降噪自编码器(Denoising Auto-Encoder,DAE)被提出,其基本原理是对输入数据加入噪声,进而改善编码器的鲁棒性。

降噪自编码器的网络结构与自编码器类似,均由编码器和解码器两部分组成,它们的学习过程也相似,最终目的均是保证输出信号尽可能接近输入信号,图2所示为降噪自适应编码器的示意图。

图2 降噪自编码器[3]

降噪自编码器过程类似于dropout,降噪自编码器以一定概率将输入节点的值偏置为0,从而得到含有噪音的模型(破损数据)进行输入。使用破损数据进行训练的点如下:

(1)当使用破损数据(即加入噪声的数据)训练DAE时,模型被迫学习从噪声中恢复出原始信号。这个过程使得模型的权重对噪声不那么敏感,因为模型已经学会了忽略这些噪声成分;

(2)破损数据训练出的模型在面对实际应用中的噪声时,由于已经在训练过程中接触过类似的噪声情况,因此具有更好的泛化能力。

3 堆叠降噪自编码器

堆叠降噪自编码器(Stacked Denoising Auto-Encoder,SDAE)由多个DAE组成,其结构如图3所示[4]

图3 堆叠降噪自编码器

记由N组数据构成的样本集X的第i组数据样本    ,隐藏层的特征向量集 合为HH由N组特征向量组成,每组特征向量表示为    ,则X与H的编码关系为:

    

式中,W为输入层和隐藏层之间的权重矩阵,B为输入层与隐藏层之间的偏置矩阵,    为编码器的神经元激活函数。

解码运算是编码运算的逆过程,以隐藏层的特征向量作为输入向量重构原始输入,记Y为输出数据,则HY的解码关系为:

    

式中,W为输入层和隐藏层之间的权重矩阵,B’为输入层与隐藏层之间的偏置矩阵,    为编码器的神经元激活函数。

训练过程中,各层DAE通过最小化输数据与输出数据之间的重构误差来实现特征学习,利用梯度下降算法不断调整网络权重和偏置,降低重构误差,重构误差可表示为:

    

由于降噪训练的引入,SDAE在特征学习过程中具有一定的正则化效果,有助于减少过拟合的风险。此外,在数据集较大、特征复杂的情况下,SDAE通过逐层学习数据的层次结构,能够获得更好的泛化能力

4 算法测试

4.1 测试用例
注:
(1)用例中denoised_evaluate()函数见”信号处理基础之噪声与降噪(二) | 时域降噪方法(平滑降噪、SVD降噪)python代码实现
(2)用例仅为简单示例,复杂网络需读者自行编写




























































import numpy as npimport tensorflow as tffrom tensorflow.keras import layers, modelsimport matplotlib.pyplot as pltimport matplotlib
# 生成示例数据n = 500  # 生成1000个点的信号t = np.linspace(0, 30*np.pi, 500, endpoint=False)s = np.cos(0.1*np.pi*t) + np.sin(0.3*np.pi*t) + np.cos(0.5*np.pi*t) + np.sin(0.7*np.pi*t)  # 原始信号s = np.tile(s, (n, 1))  # 复 制为多个样本r = 0.5 * np.random.normal(0, 1, s.shape)y = s + r  # 加噪声
# 建立堆叠自编码器模型input_signal = layers.Input(shape=(500,))encoded = layers.Dense(256, activation='relu')(input_signal)encoded = layers.Dense(128, activation='relu')(encoded)decoded = layers.Dense(256, activation='relu')(encoded)decoded = layers.Dense(500, activation='linear')(decoded)
autoencoder = models.Model(input_signal, decoded)autoencoder.compile(optimizer='adam', loss='mse')
# 训练模型,不使用验证集h = autoencoder.fit(y, s, epochs=50, batch_size=32, validation_split=0.2)
# 使用模型进行降噪denoised_signals = autoencoder.predict(y)
# 降噪评估value = denoise_evaluate(s[0], r[0], denoised_signals[0])print(value)
# 可视化结果fig = plt.figure(figsize=(16, 9))plt.subplots_adjust(hspace=0.5)plt.subplots_adjust(left=0.05, right=0.98, top=0.95, bottom=0.05)font = {'family': 'Times New Roman', 'size': 16, 'weight': 'normal',}matplotlib.rc('font', **font)
plt.subplot(3, 1, 1)plt.plot(t, s[0], linewidth=1.5, color='b')plt.title('pure signal', fontname='Times New Roman', fontsize=20)
plt.subplot(3, 1, 2)plt.plot(t, y[0], linewidth=1.5, color='r')plt.title('noised signal', fontname='Times New Roman', fontsize=20)
plt.subplot(3, 1, 3)plt.plot(t, denoised_signals[0], linewidth=1.5, color='g')plt.title('SDAE', fontname='Times New Roman', fontsize=20)
# 绘制损失曲线plt.figure(figsize=(10, 6))plt.plot(h.history['loss'], label='训练损失', color='b')plt.title('训练损失曲线', fontname='Simsun', fontsize=20)plt.xlabel('Epoch', fontname='Times New Roman', fontsize=20)plt.ylabel('Loss', fontname='Times New Roman', fontsize=20)plt.show()
4.2 降噪结果
降噪结果如图4所示。

图4 降噪结果

损失曲线如图5所示。

图5 损失曲线
4.3 降噪指标
降噪指标如表1所示。
表1 降噪指标

5 参考文献

[3] Vincent P , Larochelle H , Bengio Y ,et al.Extracting and Composing Robust Features with Denoising Autoencoders[J].  2008.DOI:10.1145/1390156.1390294.

[4] 王亚伦,周涛,陈中,等. 基于堆叠式降噪自动编码器和深度神经网络的风电调频逐步惯性智能控制[J]. 上海交通大学学报,2023,57(11):1477-1491. DOI:10.16183/j.cnki.jsjtu.2022.157.



来源:故障诊断与python学习

附件

免费链接.txt
ACT振动旋转机械pythonUM声学电机控制
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-14
最近编辑:6月前
故障诊断与python学习
硕士 签名征集中
获赞 70粉丝 66文章 143课程 0
点赞
收藏
作者推荐

轨道PHM论文学习 | 基于双尺度卷积神经网络(DS-WCNN)的铁路道岔转辙机故障诊断

最近好几个群友问有没有做轨道PHM,的确做这个方向的很少,能接触拿到轨道项目的就北交、西南交大等几个高校。本期给大家推荐一篇发表在ChineseJournal of Electronics期刊上的铁路道岔转辙机故障诊断文章。论文链接:通过点击最左下角的阅读原文进行在线阅读及下载。论文基本信息论文题目:Vibration Signal-Based Fault Diagnosis of Railway Point Machines via Double-Scale CNN论文期刊:Chinese Journal of ElectronicsDoi:https://doi.org/10.23919/cje.2022.00.229作者:CHEN Xiaohan1, HU Xiaoxi1,2, WEN Tao1, and CAO Yuan1,3机构:1. The School of Electronic and Information Engineering, Beijing Jiaotong University, Beijing 100044, China2. The State Key Laboratory of Rail Traffic Control and Safety, Beijing Jiaotong University, Beijing 100044, China3. The National Engineering Research Center of Rail Transportation Operation Control System, Beijing Jiaotong University, Beijing 100044, China一作简介:陈霄汉,男,本科毕业于北京交通大学电子信息工程学院通信工程专业,目前为北京交通大学交通信息工程及控制专业在读硕士研究生,进行基于深度学习与联邦学习的铁路设备故障诊断的研究。 摘要在铁路运输行业中,铁路转辙机(Railway point machines, RPMs) 的故障诊断至关重要。由于运行振动信号能够反映机械设备的各种故障状况,振动传感与监测,更重要的是基于振动信号的RPM故障诊断受到了学者和工程师的关注。大多数基于振动信号的RPM故障诊断方法依赖于使用高采样率传感器收集的数据和人工特征提取,因此成本高且鲁棒性不足。为了克服这些缺点,我们提出了一个双尺度的第一层宽核卷积神经网络(DS-WCNN),用于使用廉价和低采样率的振动传感器进行RPM故障诊断。所提出的第一层宽卷积核算法从振动观测中提取特征,特别适用于低采样率信号。同时,提出的双尺度结构通过结合两类时间尺度特征,提高了精度和噪声抑制能力。进行了大量的实验,包括加噪和对比,以证明所提出算法的鲁棒性和准确性。关键词:转辙机;故障诊断;状态监测;振动信号;CNN目录1 引言2 方法3 振动信号描述4 实验与结果分析5 总结注:小编能力有限,如有翻译不恰之处,请多多指正~ 若想进一步拜读,请下载原论文进行细读。1 引言道岔是铁路基础设施的重要组成部分之一,其中道岔转辙机(Railway Point Machine, RPM)用于实现列车的运行路线切换。然而,由于RPM暴露在室外,常常在较差的自然环境下运行,如变化的温度、湿度和不良天气,因此容易出现多种故障。中国国家铁路集团有限公司2020年的报告显示,铁路信号设备故障中超过四成是由RPM故障引起的。目前,RPM的故障诊断主要依赖于人工巡检,这种方法效率低下、实时性差,且需要高昂的劳动成本。目前部分专家学者提出了一些机器学习算法,但普遍存在故障情形考虑不充分、传感器成本高、计算复杂等缺点,不适合大范围应用于RPM故障诊断。2 方法为了提高RPM的整体效率,需要采用成本效益高且准确的自动故障诊断方法。本研究提出了一种基于机械振动信号和深度学习模型的RPM故障诊断方法,在信号采集方面,研究团队以512Hz的采样频率对RPM运行过程的减速器外壳的机械振动信号进行采集,该采样频率避免了高精度传感器带来的成本提升。故障诊断算法方面,本文提出了一种双尺度宽卷积核的卷积神经网络(DS-WCNN),该算法通过使用低采样率的振动信号作为输入,实现了对于16种工况进行端到端的故障诊断。图1 DS-WCNN结构图DS-WCNN模型如图1所示,特征提取主要通过两个分支的卷积层完成,这些卷积层使用卷积核将输入的信息转化为输出特征。考虑到输入数据是一维时间序列,本文通过在分支的首层进行宽卷积,实现了对特征的有效提取。虽然首层的宽卷积核能够从大的感受野中提取特征,但不同尺寸的宽卷积核能够在不同尺度下提取信息。因此,本文将两种不同尺度的卷积层进行并联以提高特征提取能力。DS-WCNN模型还引入了最大池化层和全局平均池化层,最大池化层从特征图的池化区域中扫描并获取最大值作为特征的表征,从而减少了模型中的参数数量。全局平均池化层将每个特征图的特征组合并展平为特征向量以实现两分支的特征拼合。在完成特征拼合后,总特征经过全连接层与Dropout层后转化为输出层的16分类结果。3 振动信号描述ZDJ9 RPMs广泛应用于高铁及其他城市轨道交通系统。因此,我们在研究中考虑了这些机器。本研究的振动信号采集自中国最大的RPM供应商中国中车(西安)轨道交通工业集团有限公司的ZDJ9 RPM试验台。本研究中的ZDJ9 RPM由电机、缓速器、滚珠丝杠、一个或多个安全开关、一排端子、开关电路控制器、两根指示杆和一根抛杆组成(图2)。电源需要380V三相交流电。一旦发出开关命令,电机就被激活。缓速器用于增加扭矩,并通过摩擦离合器将力传递给滚珠丝杠。因此,电能被转换成推套的直线运动。随后,推杆相对于推套产生推拉动作。最后,当指示杆检测到运动终止时,开关电路控制器切断电机电路,接通指示电路。图2 ZDJ9 RPM的三维模型常见故障会导致开关电阻的变化,直接影响电机转速。因此,电机振动可能反映了ZDJ9 RPM条件。如前所述,电机连接到缓速器,并在减速器壳体上放置一个垂直平面。马达的外壳是弯曲的。因此,在侧板上贴上振动传感器(如图3所示)。传感器检测垂直于地面的振动,采样率仅为512 Hz。我们选择检测垂直于RPM方向的振动,因为RPM是固定在安装装置(测试台上的测试台)上的。ZDJ9 RPM的运行时间约为8秒,相当于从正常位置到反向或从反向位置到正常位置的运动。因此,在工作期间采集一次振动信号样本,直到移动完成。图3 所贴传感器我们考虑了16种场景,收集了944个样本,详见表1。正反运转模式下各工作状态的振动信号示例如图6所示。显然,a-d型和g型的工作信号非常相似。唯一的区别是不同负载的信号强度。在标准负载(b型)下,振动信号幅值最低。接近运动后突然的指示丢失是由于拉伸弹簧增大,导致动触点从静止触点(e型)中弹跳而出。当机械传动装置阻塞时,电机电流激增;因此,电机和机械传动部件运行异常,产生不同频率和振幅的振动(类型f)。解锁故障与其他工况的振幅和波形不同(类型h)。表1 本研究所考虑的工况条件图4 RPM正反运转模式下振动信号波形4 实验与结果分析 图5 抗噪声能力对比结果实验结果如图5所示,该方法在训练和测试数据集上的识别准确率分别为99.10%和97.71%,表明该算法的有效性。本文还进行了一系列针对首层宽卷积层的尺度的对比实验,确定了基于机械振动信号的RPM故障诊断中的最佳尺度与组合,并通过实验验证了双尺度具有优于单尺度和更多尺度的性能。实验还对比了DS-WCNN模型与其他经典的机器学习和信号处理方法,并通过向输入信号添加不同信噪比的噪声证明了该模型的鲁棒性优于其他算法。DS-WCNN模型以其创新性的架构和强大的特征提取能力,有力地推动了RPM故障诊断的研究。 5 总结本研究提出了一种基于廉价振动传感器的DS-WCNN RPM高精度、高效、鲁棒的故障诊断模型。该方案只需要采样率为512 Hz的一维振动信号(其他方法使用的频率为51200 Hz)。该方法在测试数据集上的准确率为97.71%,每个样本的平均推断时间为0.0003 s。此外,所提出的DS-WCNN具有足够的鲁棒性。当信噪比超过8 dB时,精度保持在90%来源:故障诊断与python学习

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈