目录
0.引言
针对滚动轴承故障问题,提出一种基于经验模态分解–希尔伯特(empirical mode decomposition-Hilbert ,简称EMD-Hilbert)包络谱和堆栈自动编码器(Stack denoise auto-encoder,简称SDAE)的滚动轴承故障识别方法。该方法首先对滚动轴承各状态振动信号进行 EMD,然后选取前5个敏感本征模态函数 (intrinsic mode function,IMF),并对其进行 Hilbert 变换求取包络谱。最后将各状态振动信号的IMF包络谱按顺序构建新的高维数据,输入到SDAE中,实现故障识别。同时,由于提取的IMF包络谱特征维数过高,采用PCA对其中可能包含的冗余特征进行剔除。对比实验结果显示,采用包络谱+PCA+SDAE方法得到的故障识别正确率最高。
1.方法原理
1.1 EMD-HHT包络谱
参考文献【基于 EEMD-Hilbert 包络谱和 DBN 的 变负载下滚动轴承状态识别方法】,EMD-HHT包络谱求取步骤为:1)对信号进行EMD分解;2)分别对每个分量做hilbert变换,得到包络线;3)对每个分量的包络线做FFT分析,得到最终特征数据。由于EMD分解出的分量个数并不确定,因此仅取其前5个分量做上述操作。
1.2 PCA
主成分分析的原理就不说了。
1.3 SDAE
这个原理百度就有,可以参考这里,
2.流程
3.具体实现
3.1 数据准备
采用西储大学轴承故障诊断数据集,48K/0HP数据,共10类故障(正常作为一类特殊的故障类型),划分后每个样本的采样点为1024,每类故障各200个样本,因此一共2000个样本,然后7:3划分训练集与测试集。
3.2 EMD-HHT包络谱求取
任意取一个样本做分析,得到EMD分解与归一化后的特征分量如图所示。
3.3 PCA降维
对训练集数据进行pca分析后,将数据降至600维。
method=@mapminmax;%对数据进行标准化 #mapstd mapminmax、
[xs,mapping]=method(train_x');train_x=xs';
xts=method('apply',test_x',mapping);test_x=xts';
[pc,score,latent,tsquare] = pca(train_x);%我们这里需要他的pc和latent值做分析
tran=pc(:,1:600);
feature= bsxfun(@minus,train_x,mean(train_x,1));
feature_train_x= feature*tran;
feature= bsxfun(@minus,test_x,mean(train_x,1));
feature_test_x= feature*tran;
train_x=feature_train_x;
test_x=feature_test_x;
3.4 故障诊断
采用如下参数构建整个SDAE网络。
%% 无监督训练多个降噪自动编码器 假设输入维度为 sizes=[n n1 n2],则训练两个ae 一个是n-n1-n 一个是n1-n2-n1
sizes=[size(train_x,2) 50 30 size(train_y,2)]; % 这里 size(train_x,2)为输入层节点数 size(train_y,2)为分类层节点数
learningRate1=0.01;%各dae的学习率
denoise=0.5;%各dae的噪声强度
numepochs1=10;%各dae的训练次数
batchsize1=64;%%各dae的batchsize
activation_function='sigm';%各ae的激活函数
sae = sdaesetup(sizes,activation_function,learningRate1,denoise);
opts.numepochs = numepochs1;
opts.batchsize = batchsize1;
opts.show=0;% 0就不显示训练过程
disp('Train DAEs ')
sae = saetrain(sae, train_x, opts);
%% 构建一个多层前向网络,然后采用上面无监督预训练好的几个DAE的输入层-隐含层权重来初始化,这就叫堆栈降噪自编码器-SDAE
% 然后结合标签进行SDAE的微调训练
learningRate2=0.1;%sae的学习率
numepochs2=500;%sae的训练次数
batchsize2=64;%sae的batchsize
nn = nnsetup(sizes);%构建一个多层前向网络
nn.activation_function= 'sigm';%和上面保持一致
nn.learningRate= learningRate2;
nn=saeunfoldnn(nn,sae);%利用DAE的参数初始化SDAE
opts.numepochs = numepochs2;
opts.batchsize = batchsize2;
nn.output = 'softmax';
3.5 各对比结果
左上为包络谱+SAE(堆栈自动编码器,无降噪),右上为包络谱+PCA+SAE,左下为包络谱+SDAE,右下为包络谱+PCA+SDAE。4个模型均采用相同的训练集训练,最终测试集诊断率如图上title所示,可以看出包络谱+PCA+SDAE精度最高
代码见评论区。