一、問題描述
柴油機(jī)的結(jié)構(gòu)較為復(fù)雜,工作狀況非常惡劣,因此發(fā)生故障的可能性較大。本例采用概率神經(jīng)網(wǎng)絡(luò)建立分類模型,采集柴油機(jī)振動信號作為輸入,成功實(shí)現(xiàn)了故障有無的判斷和故障類型的判斷。
柴油機(jī)故障診斷可以抽象對一種分類問題,有無故障的判斷,是一種二分類問題,而具體故障類型的判斷,為多類分類問題。正確判斷的關(guān)鍵在于選擇合適的特征來描述柴油機(jī)的工作狀況,以及選用合適的分類器將不同類別的樣本分開。
二、利用概念神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)柴油機(jī)故障診斷原理
- 特征選擇。柴油機(jī)運(yùn)行時包含豐富的特征信息,可以選擇氣壓、油壓、熱力性能參數(shù)、振動參數(shù)等。本例采用振動時域信號作為特征信號。
-
分類器設(shè)計。這里采用概率神經(jīng)網(wǎng)絡(luò)來完成。
定義柴油機(jī)的五種故障類型:
類型 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
分類模式 | 第一缸噴油壓力過大 | 第一缸噴油壓力過小 | 第一缸噴油器針閥磨損 | 油路堵塞 | 供油提前角提前 | 正常狀態(tài) |
采集柴油機(jī)正常運(yùn)轉(zhuǎn)和5種故障模式下的振動信號,再對振動波形做統(tǒng)計學(xué)處理,得到能量參數(shù)、峰度參數(shù)、波形參數(shù)、裕度參數(shù)、脈沖參數(shù)和峰值參數(shù),形成一個6維向量:
x
=
[
x
1
,
x
2
,
x
3
,
x
4
,
x
5
,
x
6
]
{\bf{x}} = \left[ {{x_1},{x_2},{x_3},{x_4},{x_5},{x_6}} \right]
x=[x1?,x2?,x3?,x4?,x5?,x6?]
收集2份每種分類模式的樣本,共計12份訓(xùn)練樣本,詳細(xì)樣本見3.1節(jié)。
用于柴油機(jī)故障診斷的概率神經(jīng)網(wǎng)絡(luò)模型包含12份輸入樣本,每個樣本為6維向量,分類模式為6種,建立的概率神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)如下:
算法流程圖如下:
三、算法步驟
3.1 定義樣本
每列為一個樣本,訓(xùn)練樣本為612矩陣,測試樣本為66矩陣:
%% 定義訓(xùn)練樣本和測試樣本
% 故障1
pro1 = [1.97,9.5332,1.534,16.7413,12.741,8.3052;
1.234,9.8209,1.531,18.3907,13.988,9.1336]';
% 故障2
pro2 = [0.7682,9.5489,1.497,14.7612,11.497,7.68;
0.7053,9.5317,1.508,14.3161,11.094,7.3552]';
% 故障3
pro3 = [0.8116,8.1302,1.482,14.3171,11.1105,7.4967;
0.816,9.0388,1.497,15.0079,11.6242,7.7604]';
% 故障4
pro4 = [1.4311,8.9071,1.521,15.746,12.0088,7.8909;
1.4136,8.6747,1.53,15.3114,11.6297,7.5984]';
% 故障5
pro5 = [1.167,8.3504,1.51,12.8119,9.8258,6.506;
1.3392,9.0865,1.493,15.0798,11.6764,7.8209]';
% 正常運(yùn)轉(zhuǎn)
normal = [1.1803,10.4502,1.513,20.0887,15.465,10.2193;
1.2016,12.4476,1.555,20.6162,15.755,10.1285]';
% 訓(xùn)練樣本
trainx = [pro1, pro2, pro3, pro4, pro5, normal];
% 訓(xùn)練樣本的標(biāo)簽
trlab = 1:6;
trlab = repmat(trlab, 2, 1);
trlab = trlab(:)';
3.2 樣本歸一化
使用mapminmax函數(shù)完成訓(xùn)練樣本的歸一化:
[x0,s] = mapminmax(trainx);
3.3 創(chuàng)建網(wǎng)絡(luò)模型
newpnn函數(shù)唯一的可調(diào)參數(shù)為平滑因子spread,在這里將其設(shè)置為1:
spread = 1;
net = newpnn(x0, ind2vec(trlab), spread);
3.4 測試
首先需要定義測試樣本及其正確分類模式標(biāo)簽,然后將測試樣本按與訓(xùn)練樣本相同的方式進(jìn)行歸一化,最后將其輸入到上一步創(chuàng)建的網(wǎng)絡(luò)模型中:
% 測試樣本
testx = [0.7854,8.7568,1.4915,14.4547,11.1971,7.5071;
1.1833,11.8189,1.5481,20.2626,15.5814,10.0646;
0.661,8.8735,1.508,13.598,10.5171,6.9744;
1.3111,7.9501,1.4915,14.9174,10.7511,7.7127;
1.2394,9.6018,1.5366,18.219,13.851,9.0142;
1.2448,8.3654,1.5413,15.2558,11.5643,7.503]';
% 測試樣本標(biāo)簽(正確類別)
testlab = [3,6,2,5,1,4];
% 測試樣本歸一化
xx = mapminmax('apply',testx, s);
% 將測試樣本輸入模型
s = sim(net,xx);
% 將向量形式的分類結(jié)果表示為標(biāo)量
res = vec2ind(s);
3.5 顯示結(jié)果
顯示6個測試樣本的診斷結(jié)果,這6個樣本分別屬于一種分類模式:
strr = cell(1,6);
for i=1:6
if res(i) == testlab(i)
strr{i} = '正確';
else
strr{i} = '錯誤';
end
end
diagnose_ = {'第一缸噴油壓力過大','第一缸噴油壓力過小', '第一缸噴油器針閥磨損',...
'油路堵塞', '供油提前角提前 ','正常'};
fprintf('診斷結(jié)果:\n');
fprintf(' 樣本序號 實(shí)際類別 判斷類別 正/誤 故障類型 \n');
for i =1:6
fprintf(' %d %d %d %s %s\n',...
i, testlab(i), res(i), strr{i}, diagnose_{res(i)});
end
四、運(yùn)行結(jié)果
運(yùn)行結(jié)果如下:文章來源:http://www.zghlxwxcb.cn/news/detail-437560.html
五、完整代碼
完整代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-437560.html
%% 清空工作空間
clear,clc
close all
%% 定義訓(xùn)練樣本和測試樣本
% 故障1
pro1 = [1.97,9.5332,1.534,16.7413,12.741,8.3052;
1.234,9.8209,1.531,18.3907,13.988,9.1336]';
% 故障2
pro2 = [0.7682,9.5489,1.497,14.7612,11.497,7.68;
0.7053,9.5317,1.508,14.3161,11.094,7.3552]';
% 故障3
pro3 = [0.8116,8.1302,1.482,14.3171,11.1105,7.4967;
0.816,9.0388,1.497,15.0079,11.6242,7.7604]';
% 故障4
pro4 = [1.4311,8.9071,1.521,15.746,12.0088,7.8909;
1.4136,8.6747,1.53,15.3114,11.6297,7.5984]';
% 故障5
pro5 = [1.167,8.3504,1.51,12.8119,9.8258,6.506;
1.3392,9.0865,1.493,15.0798,11.6764,7.8209]';
% 正常運(yùn)轉(zhuǎn)
normal = [1.1803,10.4502,1.513,20.0887,15.465,10.2193;
1.2016,12.4476,1.555,20.6162,15.755,10.1285]';
% 訓(xùn)練樣本
trainx = [pro1, pro2, pro3, pro4, pro5, normal];
% 訓(xùn)練樣本的標(biāo)簽
trlab = 1:6;
trlab = repmat(trlab, 2, 1);
trlab = trlab(:)';
%% 樣本的歸一化,s為歸一化設(shè)置
[x0,s] = mapminmax(trainx);
%% 創(chuàng)建概率神經(jīng)網(wǎng)絡(luò)
tic;
spread = 1;
net = newpnn(x0, ind2vec(trlab), spread);
toc
%% 測試
% 測試樣本
testx = [0.7854,8.7568,1.4915,14.4547,11.1971,7.5071;
1.1833,11.8189,1.5481,20.2626,15.5814,10.0646;
0.661,8.8735,1.508,13.598,10.5171,6.9744;
1.3111,7.9501,1.4915,14.9174,10.7511,7.7127;
1.2394,9.6018,1.5366,18.219,13.851,9.0142;
1.2448,8.3654,1.5413,15.2558,11.5643,7.503]';
% 測試樣本標(biāo)簽(正確類別)
testlab = [3,6,2,5,1,4];
% 測試樣本歸一化
xx = mapminmax('apply',testx, s);
% 將測試樣本輸入模型
s = sim(net,xx);
% 將向量形式的分類結(jié)果表示為標(biāo)量
res = vec2ind(s);
%% 顯示結(jié)果
strr = cell(1,6);
for i=1:6
if res(i) == testlab(i)
strr{i} = '正確';
else
strr{i} = '錯誤';
end
end
diagnose_ = {'第一缸噴油壓力過大','第一缸噴油壓力過小', '第一缸噴油器針閥磨損',...
'油路堵塞', '供油提前角提前 ','正常'};
fprintf('診斷結(jié)果:\n');
fprintf(' 樣本序號 實(shí)際類別 判斷類別 正/誤 故障類型 \n');
for i =1:6
fprintf(' %d %d %d %s %s\n',...
i, testlab(i), res(i), strr{i}, diagnose_{res(i)});
end
到了這里,關(guān)于【MATLAB數(shù)據(jù)處理實(shí)用案例詳解(17)】——利用概念神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)柴油機(jī)故障診斷的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!