[0026] 下面结合附图和实施例对本发明的技术方案作进一步的说明。
[0027] 本发明所述的一种基于BP神经网络的发动机故障诊断方法,适用于输入、输出的因素量较大的情况,该方法包括以下步骤:
[0028] (1)采集发动机故障数据,列出发动机故障原因。
[0029] 本例中,某发动机故障诊断系统有X1~X8,8个输入,T1~T4,4个输出,对应4个不同发动机故障的物理含义如表1所示。其中发动机故障原因包括喷油故障、油量消耗异常、针阀卡死和出油阀失效。本例中所述的这四个输出因素在发动机故障诊断应用中有较好的诊断效果。其中,对应的故障数据包括最大及次最大喷油压力、油耗传感器的波形参数、针阀位置传感器的波形数据、出油阀传感器的波形数据以及起喷压力(出油阀开启压力)。
[0030] 表1
[0031]
[0032] (2)确定BP神经网络模型的隐含层节点数,建立BP神经网络模型。
[0033] BP神经网络三层拓扑结构如图1所示,包括输入层、隐含层和输入层。其输入层和输出层分别是步骤(1)中的发动机故障数据和发动机故障原因。隐含层的节点数
[0034] 确定该BP神经网络隐含层节点数的方法包括以下步骤:
[0035] (21)在一个发动机系统中的输入输出数据,为了消除指标间量纲的影响并且保证网络学习的稳定性,将原始数据进行归一化处理。在数据归一化处理过程中,根据公式x1=(ymax-ymin)*(x-xmin)/(xmax-xmin)+ymin,其中xmin为样本数据中最小值,xmax为样本数据中最大值,ymax和ymin分别取1和-1,经过处理的数据均映射到[-1,1]之间,在MATLAB中是通过“mapminmax”函数实现的。如下表2所示的,就是发动机故障诊断数据归一化处理后的结果。
[0036] 表2
[0037]
[0038] (22)利用隐含层节点数确定的经验公式计算隐含层节点数频繁出现的区间,经验公式为:
[0039] (m1+m2)/2≤n1≤(m1+m2)+10
[0040] 其中,m1为输入层节点数,m2为输出层节点数,n1为隐含层节点数。这样就可以得到隐含层节点数频繁出现的区间,在此基础上再进一步确定一个准确的节点数个数。在本例发动机故障诊断中,输入层节点数m1=8,输出层节点数m2=4,则可以由经验公式可以得到一个隐含层节点数频繁出现的区间[6,22]。
[0041] (23)采用平方分数法进一步确定隐含层节点数。所述平方分数法的基本形式为cn=n2,Cn+1=(n+1)2,而 最终得到的数列 平方分数法是用来确定隐含层节点数的方法,是由斐波那契数列和黄金分割法得到的启发,再通过结合一维搜索的概念设计出来用于确定节点数的新方法。所述平方分数法确定隐含层节点数的具体步骤如下:
[0042] (31)给定最终的不确定区间长度λ>0,以及步骤(22)中获得的初始区间[a1,b1],根据 来确定迭代的最小次数N,然后计算u1=a1+(1-F1)(b1-a1),v1=a1+F1(b1-a1),区间中点标志位
[0043] (32)比较u1、v1大小,若u1<v1,则维持步骤(31)的u1、v1计算值,若u1>v1,则令u1=a1+F1(b1-a1),v1=a1+(1-F1)(b1-a1)。令参数k的初始值为1,进入迭代计算。
[0044] (33)比较E(uk)、E(vk)、E(mid)三者的值,若E(mid)最小,则收敛区间为[uk,vk]。否则转步骤(34)。
[0045] (34)若E(uk)>E(vk),则收敛区间为[uk,bk],转步骤(35),否则,收敛区间为[ak,vk],转步骤(36),其中E为数据输出误差,其中E的计算公式为:数据输出误差E=输出数据(T)-输入数据(X)经神经网络训练后得到的输出数据(T’);
[0046] (35)令ak+1=uk和bk+1=bk,进一步令uk+1=vk和vk+1=ak+1+(1-FN+1-k)(bk+1-ak+1),比较uk+1、vk+1大小,若uk+1<vk+1,则维持二者的计算值,若uk+1>vk+1,则调换二者的值。判断k是否达到N,若k=N,则转步骤(38);否则计算E(vk+1)且转至步骤(37)。
[0047] (36)令ak+1=ak和bk+1=vk,进一步令vk+1=uk和vk+1=ak+1+(1-FN+1-k)(bk+1-ak+1),若k=N,转步骤(38);否则计算E(uk+1)且转至步骤(37);
[0048] (37)令k=k+1,转步骤(33);
[0049] (38)令uN=uN-1和vN=uN-1+ε,其中ε为计算精度,ε>0。若E(uN)>E(vN),则令aN=vN和bN=bN-1,否则若E(uN)≤E(vN),令aN=aN-1和bN=uN,停止,则最终的隐含层最佳节点数落在了区间[aN,bN]中;
[0050] (39)以上步骤即可算出最后的节点数。但在最佳区间[aN,bN]内,穷举法可作为补充,根据输出数据误差的最低点确定最佳隐含层节点数。
[0051] 根据上述平方分数法确定隐含层节点数,本例中取不确定区间长度λ=0.5,根据步骤(22)中得到的a1=6,b1=22,则cN+1≥32,确定最小迭代次数N=5。进入迭代计算,在经过多次迭代计算以后,最终得到最佳隐含层节点数为13。如果由第三次迭代中得到第三次收敛区间[12,13],根据隐含层节点数为正整数的条件,在第三次区间中采用穷举法,则无需再进一步验证k>3的步骤,也可以得到最佳隐含层节点数为13。如下表3所示,取误差最小值对应的隐含层节点数,即min{E(12),E(13)},通过对比得到最佳的隐含层节点数为13。
[0052] 表3
[0053]
[0054] 为了防止在区间[6,10]和[18,22]之间出现数据的突变,故增加了一个验证点6和22,最后依然得出最佳隐含层节点数为13。不同隐含层节点数对应的误差折线图如图2所示。
[0055] (3)根据已有的故障数据训练BP神经网络模型。采用具有合理算力的处理器,利用采集到的故障数据对步骤(2)中建立的BP网络模型进行训练。计算软件可以采用MATLAB,在使用MATLAB对数据进行BP网络训练时,输入层的传输函数为purelin,隐含层的传输函数为S型函数,训练过程采用收敛速度快且能有效避免陷入局部最小化的L-M算法,学习率设置的是0.05,目标误差0.0001。
[0056] (4)利用训练得到的BP神经网络模型,对采集的发动机数据进行分析,确定数据所对应的故障原因。以采集的发动机数据作为输入,通过上述步骤所建立的BP神经网络模型进行分析计算,根据模型的输出来确定故障原因。