最近朋友喊帮忙做一个仿真程序,遂接触了用小波包变换结合BP神经网络的方法来分析发电机齿轮箱故障类型,查阅了几篇文献后,觉得这种方法很是巧妙,竟然能够分析出齿轮箱发生了哪种故障。经过仔细的研究后,对该方法有了更深刻的理解,这里把文章中没有讲到的一些细节做一个简单分享。
在分析现实工程中的故障信号时,往往采用傅里叶变换、小波变换或小波包变换来分析。小波变换被认为是傅里叶变换的一次突破,而小波包变换又是小波变换的一次提升。小波包分析能够实现对信号各频段的划分,对低频和高频信号都能分析,能显著地提高信号的分辨率。应用小波包分析信号的流程图如下图所示。
小波包变换能够将信号分解为近似信号和细节信号,而在下一层分解中再次将两种信号进行进一步分解,经过 N N N 层分解后,能够得到 2 N 2^N 2N 个频段信号,小波包分解树如下图所示。
其中顶层节点(0,0)代表原始信号,最底层的节点则代表最终分解后得到的各频段信号,并设 X i , j X_{i,j} Xi,j 为第 i i i 层第 j j j 个节点的分解系数。 i = 1 , 2 , . . . , n i=1,2,...,n i=1,2,...,n, j = 1 , 2 , . . . , 2 n − 1 j=1,2,...,2^n-1 j=1,2,...,2n−1, n n n为分解的层数。
由1.1小节得到的 2 N 2^N 2N 个小波包分解系数 X i , j X_{i,j} Xi,j ,再对这些分解系数分别进行重构,进而得到重构后的信号 S i , j S_{i,j} Si,j 。则原始信号就可由重构后的信号进行表示
S = S i , 0 + S i , 1 + S i , 2 + ⋯ S i , 2 i − 1 S=S_{i,0}+S_{i,1}+S_{i,2}+\cdots S_{i,2^i-1} S=Si,0+Si,1+Si,2+⋯Si,2i−1
得到重构信号 S i , j S_{i,j} Si,j 后,可得到各个重构信号对应的频段能量值。设与 S i , j S_{i,j} Si,j 相对应频段的能量为
E i , j = ∫ ∣ S i , j ∣ 2 d t = ∑ j = 1 2 i − 1 ∣ X i , j ∣ 2 E_{i,j}=\int{\left| S_{i,j} \right|^2dt}=\sum_{j=1}^{2^i-1}{\left| X_{i,j} \right|^2} Ei,j=∫∣Si,j∣2dt=j=1∑2i−1∣Xi,j∣2根据上式可依次求得各个频段的能量值,将这些能量值组成一个向量 T T T ,且单位化后可得到
E j = E i , j ∑ j = 0 2 i − 1 ∣ E i , j ∣ 2 T = [ E 0 , E 1 , E 2 , . . . , E 2 i − 1 ] E_j=\frac{E_{i,j}}{\sqrt{\sum_{j=0}^{2^i-1}{\left| E_{i,j} \right|^2}}} \\ \boldsymbol{T}=\left[ E_0, E_1, E_2,...,E_{2^i-1} \right] Ej=∑j=02i−1∣Ei,j∣2Ei,jT=[E0,E1,E2,...,E2i−1] 通常来说,小波包分解层数一般设为3层,也就是将初始信号的频率范围划分为8个部分,再分别对各部分的信号进行重构,最终得到单位化后的特征向量 T T T 。
matlab自带了小波包变换的一系列函数,包括wpdec
、wpfrqord
、wprcoef
等,函数的具体使用可查看官方帮助文档。
BP神经网络的核心算法为BP算法,它是一种按照误差逆传播训练的多层前馈网络。BP网络由输入层、隐含层、输出层组成,其是一种监督学习算法,通过给定的输入输出样本,根据误差不断调整权值进行训练,最终达到和输出数据尽量吻合的结果。由于其具有较强的并行分布式处理能力和自学习能力,在故障检测中得到了广泛的应用。BP神经网络结构如下图所示。
输入层神经元个数:经过小波包分析和特征值提取的特征向量作为BP网络的输入向量,由小波包分解确定的特征值的向量维数作为BP网络的输入个数,即输入个数为 2 N 2^N 2N 个。
隐含层神经元个数:隐含层神经元的个数可根据经验公式选择,如 l = 2 m + 1 l=2m+1 l=2m+1,其中 m m m 代表输入层的神经元个数。
输出层神经元个数:输出层神经网络的输出个数为故障类型个数。例如,当需要识别的故障类型为 n n n 个时,神经网络的输出向量则为 y = [ y 1 , y 2 , . . . , y n ] T \boldsymbol{y}=\left[ y_1, y_2,..., y_n \right] ^{\mathrm{T}} y=[y1,y2,...,yn]T ,向量 y \boldsymbol{y} y 中最接近1的元素则对应了故障发生的类型。
确定好神经网络的结构后,即可对神经网络进行训练,训练好后的神经网络此时具备了记忆能力和预测能力,将测试数据输入到BP神经网络中,可对故障类型进行预测,神经网络的训练流程如下图所示。
matlab也自带了BP神经网络的工具箱,即Neural Net Fitting
工具箱,利用此工具箱可设置神经网络的输入输出训练样本、神经元的个数、训练算法等,其可直接进行样本的训练,当训练样本的均方误差逐渐收敛时便自动停止迭代,此时神经网络便训练完成了,就可用来预测数据。
为了验证本文方法在齿轮箱故障识别中的可靠性,采用matlab软件进行仿真,用实验数据和数据预测来验证该方法。结合小波包和BP神经网络的实验流程如下图所示。
原始数据来源于凯斯西储大学轴承数据中心,通过在电机驱动机械系统上安装一个加速度传感器来采集振动信号,采样频率为12 kHz。本次实验中,数据集A、B、C分别包含了17500个训练样本和2500个测试样本。分别采集数据集A、B、C在负载为1、2、3 hp下的样本,每种数据集均包含10种不同的故障条件。
利用小波包对信号进行分解以提取有效信号特征,可得到原始信号对应的特征向量。在本次研究实验中,故障类型个数为10个,用二进制状态表示BP神经网络输出向量的样本类别,“1”表示该样本类型起作用,向量 [ 1 0 1 × 9 ] T \left[ \begin{matrix} 1& \mathbf{0}_{1\times 9}\\ \end{matrix} \right] ^{\mathrm{T}} [101×9]T 表示正常,向量 [ 0 1 0 1 × 8 ] T \left[ \begin{matrix} 0& 1& \mathbf{0}_{1\times 8}\\ \end{matrix} \right] ^{\mathrm{T}} [0101×8]T 表示故障类型为直径0.007mm的球故障,向量 [ 0 1 × 2 1 0 1 × 7 ] T \left[ \begin{matrix} \mathbf{0}_{1\times 2}& 1& \mathbf{0}_{1\times 7}\\ \end{matrix}\,\, \right] ^{\mathrm{T}} [01×2101×7]T 表示故障类型为直径0.014mm的球故障,向量 [ 0 1 × 3 1 0 1 × 6 ] T \left[ \begin{matrix} \mathbf{0}_{1\times 3}& 1& \mathbf{0}_{1\times 6}\\ \end{matrix}\,\, \right] ^{\mathrm{T}} [01×3101×6]T 表示故障类型为直径0.021mm的球故障,向量 [ 0 1 × 4 1 0 1 × 5 ] T \left[ \begin{matrix} \mathbf{0}_{1\times 4}& 1& \mathbf{0}_{1\times 5}\\ \end{matrix}\,\, \right] ^{\mathrm{T}} [01×4101×5]T 表示故障类型为直径0.007mm的内圈故障,依此类推。因此,神经网络输出层的个数设置为10,神经网络隐含层的神经元个数设为17,训练算法采用贝叶斯正则化训练。其中,正常工况和0.007mm的各类故障时域波形如下图所示。
对原始数据进行分析,原始数据经小波包分解后可得到多组特征向量,将其作为神经网络的输入值,其中,80%的数据作为训练样本,20%的数据作为测试样本。训练时,最大训练次数设置为1000次,神经网络的训练结果如下图所示,其中,横坐标代表训练次数,纵坐标代表均方误差,当训练次数达到643次时,均方误差为0.01238,此时误差已经收敛至较小误差内,神经网络模型建立完成。
任选4组样本数据作为验证样本集,将样本集数据输入到训练好后的BP神经网络中,每组样本均对应着某一个故障模型,将神经网络的实际输出结果和标准信号进行对比,比较结果如下表所示。
在分析网络的实际输出向量时,分量最大的值表明了对应的故障类型。从表2中可以看出,BP神经网络的实际输出和期望输出是比较一致的,其误差在可接受的范围内,预测准确率能达到95%以上,这说明训练好的神经网络具有很好的泛化能力,能够准确地对故障模式进行预测。
4组案例信号的分析都对齿轮箱状态信号作出了正确地分类,与实验设置的故障状态类型保持一致。由此可得,小波包神经网络能够对齿轮箱故障类型进行预测。