基于PCA的TE过程故障检测

PCA作为最为基础的降维方法,已得到广泛应用,这里使用MATLAB代码实现对TE过程数据的降维处理,旨在用较少的主元成分解释尽可能多是原数据信息,并通过计算T2/SPE统计量来进行故障检测。

数据

链接:https://pan.baidu.com/s/1yHgZRqy6yyk9wsm6igqUSw 
提取码:odsz

主程序

clear all;
close all;
clc;
%%%%%%%%%%%%%%%%%样本数据导入%%%%%%%%%%%%%%%%%%%%

X_Y_train = matfile('datatexy.mat'); 
X_train = X_Y_train.X;
load('d01_te.mat')
X_test =  d01_te(:,[1:22,42:45,47:49,51:52]);
%%%%%%%%%%%%%%%%%样本数据标准化%%%%%%%%%%%%%%%%%%%%

X_train_zscore = zscore(X_train);

X_mean = mean(X_train);X_std = std(X_train);
[X_train_zscore_row,X_train_zscore_col] = size(X_train_zscore);

X_test=(X_test-repmat(X_mean,X_train_zscore_row,1))./repmat(X_std,X_train_zscore_row,1);
%X_test_zscore = zscore(X_test);

%%%%%%%%%%%%%%%%%训练集数据size%%%%%%%%%%%%%%%%%%%%

[X_train_zscore_row,X_train_zscore_col] = size(X_train_zscore);

%%%%%%%%%%%%%%%%%测试集数据size%%%%%%%%%%%%%%%%%%%%

[X_test_zscore_row,X_test_zscore_col] = size(X_test);

%%%%%%%%%%%%%%%%%测试集数据协方差矩阵%%%%%%%%%%%%%%%%%%%%

X_train_zscore_cov = cov(X_train_zscore);

%%%%%%%%%%%%%%%%%测试集数据协方差矩阵特征值与特征向量%%%%%%%%%%%%%%%%%%%%

[V,D] = eig(X_train_zscore_cov);

%%%%%%%%%%%%%%%%%测试集数据协方差矩阵特征从大到小排序%%%%%%%%%%%%%%%%%%%%

lamda = wrev(diag(D));
lamda_1 = reshape(lamda,1,[]);

%%%%%%%%%%%%%%%%%PCA K值选取(0.85)%%%%%%%%%%%%%%%%%%%%
lamda_k = 0;
k = 1;
for i = 1:X_train_zscore_col
    lamda_k = lamda_k + lamda(i);
    if lamda_k/sum(lamda)<0.85
        k = k+1;
    end
end

%%%%%%%%%%%%%%%%%PCA 特征值选取(从大到小 K个 )%%%%%%%%%%%%%%%%%%%%

lamda_1 = lamda_1(1:k);

%%%%%%%%%%%%%%%%%协方差矩阵————>对角矩阵特征值从大到小%%%%%%%%%%%%%%%%%%%%

D_lamda = rot90(D,2);

%%%%%%%%%%%%%%%%%对角矩阵 K个选取后%%%%%%%%%%%%%%%%%%%%

D_k = D_lamda(:,1:k);
D_k = D_k(1:k,:);

%%%%%%%%%%%%%%%%%特征向量 K个选取后%%%%%%%%%%%%%%%%%%%%

V_k = fliplr(V);
P = V_k(:,1:k);

%%%%%%%%%%%%%%%%%训练集经过PCA处理后的数据%%%%%%%%%%%%%%%%%%%%

X_train_zscore_k = X_train_zscore*P;

%%%%%%%%%%%%%%%%%T2控制限%%%%%%%%%%%%%%%%%%%%

T2UCL1 = (k*(X_train_zscore_row^2-1)*finv(0.95,k,X_train_zscore_row-k))/(X_train_zscore_row*(X_train_zscore_row-k));

%%%%%%%%%%%%%%%%%SPE控制限%%%%%%%%%%%%%%%%%%%%

for i = 1:3
    th(i) = sum(lamda(k+1:31).^i);
end
h0 = 1-(2*th(1)*th(3))/(3*th(2).^2);
ca=norminv(0.99,0,1);
QU = th(1)*(ca*h0*sqrt(2*th(2))/th(1)+1+th(2)*h0*(h0-1)/(th(1).^2)).^(1/h0);


%%%%%%%%%%%%%%%%%测试集经过PCA处理后数据%%%%%%%%%%%%%%%%%%%%

X_test_zscore_k = X_test * P;

%%%%%%%%%%%%%%%%%测试集T2统计量%%%%%%%%%%%%%%%%%%%%

T2 = sum(((X_test_zscore_k.^2) ./ lamda_1),2); 

%%%%%%%%%%%%%%%%%测试集SPE统计量%%%%%%%%%%%%%%%%%%%%

I = eye(X_test_zscore_col,X_test_zscore_col);
SPE =diag(X_test*(I - P*P')*X_test');

%%%%%%%%%%%%%%%%%T2/SPE统计图%%%%%%%%%%%%%%%%%%%%

figure
subplot(2,1,1);
plot(T2);
title('主元分析统计量变化图');
xlabel('采样数');
ylabel('T^2');
hold on;
line([0,X_test_zscore_row],[T2UCL1,T2UCL1],'LineStyle','--','Color','r');
subplot(2,1,2);
plot(SPE)
xlabel('采样数');
ylabel('SPE');
hold on;
line([0,X_test_zscore_row],[QU,QU],'LineStyle','--','Color','r');


仿真结果

结果分析

原数据为960*31为矩阵,降维处理后,用14个主元个数来解释了原始数据85%的信息,并通过降维后的数据计算T2/SPE统计量分别与各自的控制限比较。由主元分析统计量变化图可知,在150数据点左右T2/SPE统计量超出限制,代表发生故障。

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值