基于PCA的故障信号检测源码程序 - matlab算法设计 - 谷速源码
下载频道> 资源分类> matlab源码> 算法设计> 基于PCA的故障信号检测源码程序

标题:基于PCA的故障信号检测源码程序
分享到:

所属分类: 算法设计 资源类型: 文件大小: 110.92 KB 上传时间: 2016-01-24 22:33:23 下载次数: 94 资源积分:1分 提 供 者: matlab源码 基于PCA的故障信号检测源码程序
内容:
基于PCA的故障信号检测源码程序,程序员在编程的过程中可以参考学习使用,希望对IT程序员有用,此源码程序简单易懂、方便阅读,有很好的学习价值!
部分代码如下:
 
close;clc;clear all;
 
%--------------------------------------------------------------------------
% 载入数据
 
d1=xlsread('zc.xls');  
d2=xlsread('gz.xls');  
%--------------------------------------------------------------------------
% 数据的标准化
 
stantData=d1(:,:); %引入标准数据
c=d2;              %引入待检测数据
c1=ones(960,1);
Xmean=mean(stantData);%标准数据的均值
Xstd=std(stantData);  %标准数据的方差          
X=(c-c1*Xmean)./(c1*Xstd); %用待检测数据减去标准数据的均值并除以方差后,得到标准化的待检测数据  
 %X=zscore(c); %标准化                         %在此之所以用标准数据,是为了知道检测数据的偏离程度,因而减去标准数据的均值和方差
                           %为什么在此用标准数据的均值和方差
[P, T, LATENT, TSQUARED] = princomp(X);   %  LATENT是X的特征值;T=T得分向量;P=P负荷矩阵;(即T=XP)
%--------------------------------------------------------------------------
%确定主元素个数k
 
percent = input('确定方差贡献率限(0~1):');       %  alpha0 是预设的贡献率,通常为85%
k=0;
for i=1:size(LATENT,1);                     %应用size函数返回LATENT的行维数(语法r=size(A,n)返回n指定的A的方向的维数:n=1为行方向的维数;n=2为列方向的维数)
    alpha(i)=sum(LATENT(1:i))/sum(LATENT); %求解贡献率
    if alpha(i)>=percent ;                  %判断是否大于给定贡献率 
        k=i;                               %把主元个数提供给K
        break;       
    end;
end;
%--------------------------------------------------------------------------
%存储新的变量
 
Xp=zeros(size(X));    
 
for j=1:k;   
    Xp=Xp+T(:,j)*P(:,j)';  %Xp是新的变量
end
%--------------------------------------------------------------------------
 
beta = input('确定统计阈值置信水平(0~1):');%0.9 --0.99
 
theta=zeros(4,1);
for i=1:3 ;       
    for j=k+1:size(X,2) ;    %j=k+1:52  
        theta(i)=theta(i)+LATENT(j)^(i);    
    end
end
h0=1-2*theta(1)*theta(3)/[3*(theta(2)^2)];%h0=1-2*theta(1)*theta(3)/3/(theta(2)^2);
SPEbeta=theta(1)*(norminv(beta)*(2*theta(2)*h0^2)^0.5/theta(1)+1+theta(2)*h0*(h0-1)/(theta(1)^2))^(1/h0);%求取SPE的阈值
T2knbeta=finv(beta,k,(size(X,1)-k))*k*(size(X,1)^2-1)/(size(X,1)*(size(X,1)-k));   %利用F分布来求T2统计的阈值
%--------------------------------------------------------------------------
%求取T2的公式
 
T2=zeros(960,1);
 for i=1:960;
   T2(i)=X(i,:)*P(:,1:k)*inv(diag(LATENT(1:k)))*P(:,1:k)'*X(i,:)'; % 书上的公式
 end
%--------------------------------------------------------------------------
%  求取Q的公式
 
 Q=zeros(960,1);
for i=1:960;
  Q(i)=X(i,1:k)*(eye(k)-P(1:k,1:k)*P(1:k,1:k)')'*(eye(k)-P(1:k,1:k)*P(1:k,1:k)')*X(i,1:k)';   % 书上的公式
 end
%--------------------------------------------------------------------------
 
figure(1);
plot(T2(1:960));
hold on;
TS=T2knbeta*ones(960,1);  %产生全1矩阵{size(X,1) x 1}维,目的是画一条直线
plot(TS,'r--');
xlabel('采样次数');
ylabel('T2统计图');
hold off;
print -djpeg 144T2;  %保存t2统计图像
SPEbeta
T2knbeta
%--------------------------------------------------------------------------
 
figure(2);
plot(Q(1:960));   
hold on;
SPES=SPEbeta*ones(960,1);%产生全1矩阵{size(X,1) x 1}维,目的是画一条直线
plot(SPES,'r--');
xlabel('采样次数');
ylabel('SPE统计图');
hold off;
print -djpeg 144SPE;  %保存SPE统计图像
 

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

基于PCA的故障信号检测源码程序/
基于PCA的故障信号检测源码程序/pca/
基于PCA的故障信号检测源码程序/pca/144SPE.jpg
基于PCA的故障信号检测源码程序/pca/144T2.jpg
基于PCA的故障信号检测源码程序/pca/db5_PCA1.m

关键词: 源码 故障 信号

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved