【故障检测】基于 KPCA 的故障检测【T2 和 Q 统计指数的可视化】(Matlab代码实现)

news2024/12/23 23:36:52
💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥


🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。


座右铭:行百里者,半于九十。

📋 📋 📋 本文目录如下: 🎁 🎁 🎁
目录
💥1 概述
📚2 运行结果
🎉3 参考文献
🌈4 Matlab代码实现

💥1 概述

数据包含取自模拟流程示例的二维数据集。此数据用于训练和测试内核 PCA 以进行故障检测。训练后,针对输出数据空间中的每个位置计算广泛用于故障检测的T2和Q统计指标,从而生成等高线图。然后将 2% 显著性水平检测限叠加在地图上,作为数据空间的正常(绿色)和错误(洋红色)区域之间的边界。

使用等高线图,可以将各种核类型和参数选择对正常和错误过程状态之间的决策边界的影响可视化。

📚2 运行结果

部分代码:

%% Get 2D data

close all; clc; tic;

if nargin == 0

load dataset.mat p;

train = p{1}; test = p{2};

% Kernel types and parameters:

ktype = 'rbf'; kpar = 1; % RBF kernel

%ktype = 'rbf'; kpar = 10; % RBF kernel

%ktype = 'rbf'; kpar = 0.9; % RBF kernel

%ktype = 'rbfpoly'; kpar = [1 1 0.65]; % mixed kernel

%ktype = 'poly'; kpar = 2; % polynomial kernel

%ktype = 'imquad'; kpar = 10; % inverse multiquadric kernel

%ktype = 'cauchy'; kpar = 5; % Cauchy kernel

end

%lax = [-15 15 -15 15];

lax = [-4 10 -3 6]; % Axes limits

N = length(train); M = length(test);

z0T = train; z1T = test; % Training and Test data

[xx,yy] = meshgrid(lax(1):0.05:lax(2),... % Meshgrid for contours

lax(3):0.05:lax(4));

z2T = [xx(:) yy(:)]; L = length(z2T); % Vectorize meshgrid points

K.type = ktype; K.p = kpar; % Kernel type and parameters

set(0,'defaultfigurecolor',[1 1 1]); % Set fig color to w

conf = 0.99; % Significance level (*100%)

% Normalize 2D Data

zm = mean(z0T); zs = std(z0T);

z0 = (z0T - zm(ones(N,1),:))./zs(ones(N,1),:); % Normalize training z

z1 = (z1T - zm(ones(N,1),:))./zs(ones(M,1),:); % Normalize test z

z2 = (z2T - zm(ones(L,1),:))./zs(ones(L,1),:); % Normalize surf z

%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% KERNEL PRINCIPAL COMPONENTS ANALYSIS %

[K0c,K0,U0] = kerneltrain(z0,K); % Populate kernel matrix

K1c = kerneltest(z1,z0,K0,U0,K); % Project test data to RKHS

K2c = kerneltest(z2,z0,K0,U0,K); % Project surf data to RKHS

[V,D] = eig(K0c/N); % Eigenvalue decomposition

[S,sj] = sort(diag(D),'descend'); % Sort eigenvalues

V = V(:,sj); S = S'; % Re-arrange eigenvectors

S(S < 1e-7) = []; % Remove eigenvalues <= 0

P = V(:,1:length(S))*diag(S.^-0.5); % Projection matrix

if ~isreal(S)

disp('Complex eigenvalues detected.'); % Warn about complex eigs

end

%% Perform KPCA Monitoring

CS = cumsum(S)/sum(S)*100;

RP = find(CS >= 99.9,1); % Get eigenvalues by %CPV

disp([num2str(RP) ' principal'...

' components chosen.']);

t0 = K0c*P(:,1:RP); % Kernel subspace (train)

t1 = K1c*P(:,1:RP); % Kernel subspace (test)

t2 = K2c*P(:,1:RP); % Kernel subspace (surf)

T2 = sum((t0.^2)./S(ones(N,1),1:RP),2); % T2 statistics (train)

t0n = K0c*P; % Full kernel space

Q = abs(sum(t0n.^2,2) - sum(t0.^2,2)); % Q statistics (train)

if strcmp(ktype,'rbf') == 1

fprintf('\n At infinite fault magnitude:\n');

U1 = ones(1,N)/N;

tt = U1*K0*(U0 - eye(N))*P(:,1:RP);

fprintf(' T2 limit: %.2f\n',...

sum((tt.^2)./S(1:RP),2)); % Limit of T2 for RBF

tu = U1*K0*(U0 - eye(N))*P;

fprintf(' Q limit: %.2f\n\n',...

abs(sum(tu.^2,2) - sum(tt.^2,2))); % Limit of Q for RBF

end

T2t = sum((t1.^2)./S(ones(M,1),1:RP),2); % T2 statistics (test)

T2u = sum((t2.^2)./S(ones(L,1),1:RP),2); % T2 statistics (surf)

t1n = K1c*P; t2n = K2c*P;

Qt = abs(sum(t1n.^2,2) - sum(t1.^2,2)); % Q statistics (test)

Qu = abs(sum(t2n.^2,2) - sum(t2.^2,2)); % Q statistics (surf)

%% Plot monitoring charts

figure(3); subplot(211);

semilogy(1:N,T2,'b',1:M,T2t,'m','linewidth',1.2); % T2 monitoring chart

xlabel('Time'); ylabel('T^2'); subplot(212);

semilogy(1:N,Q,'b',1:M,Qt,'m','linewidth',1.2); % Q monitoring chart

xlabel('Time'); ylabel('Q');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1] K.E.S. Pilario, Y. Cao, and M. Shafiee. Mixed Kernel Canonical Variate Dissimilarity Analysis for Incipient Fault Monitoring in Nonlinear Dynamic Processes. Comput. and Chem. Eng., 123, 143-154. 2019. doi: 10.1016/j.compchemeng.2018.12.027

🌈4 Matlab代码实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[前端基础]异步操作(还没写完)

1.写在前面 这篇是因为最近再写异步操作,需要点总结 因为还在学习前端的过程中嘛,所以有些东西可能会慢慢补充上来,也可能会有很多个人理解不是很到位的地方,还望各位评论区佬能帮忙指出.阿里嘎多捏 2.异步操作的概念和举例 异步操作和同步操作在408的三门课程中,都有所提及…

基于php的校园垃圾分类网站的设计与实现

摘要 近年来&#xff0c;随着民众环保意识的增强和资源有效利用问题的重视&#xff0c;全国各地市不断推进垃圾分类工作。教育部&#xff0c;也已于去年发布通知在全国各学校推进垃圾分类工作&#xff0c;以鼓励垃圾分类的有效实施。但现阶段我国校园的垃圾分类践行情况依旧问…

STATS 782 - Control Flow and Functions

文章目录 一、Control Flow1. If-Then-Else2. Loops 二、Functions1. Defining Functions2. 使用函数计算数学公式 总结 一、Control Flow 1. If-Then-Else > if (x > 0) y sqrt(x) else y -sqrt(-x)或 > y if (x > 0) sqrt(x) else -sqrt(-x)2. Loops ① fo…

数组应该怎么用?

文章目录 前言一、数组是什么&#xff1f;二、数组的创建1.数组的创建&#xff1a;2.数组的初始化 三.数组的遍历1.逐个打印2.使用for循环四.二维数组1.语法&#xff1a;2.遍历 五.数组的一些常用方法1.数组转换字符串2.数组拷贝3.二分查找4.冒泡排序5.数组逆序 总结 前言 为什…

动力节点Vue笔记——Vue与Ajax

四、Vue与AJAX 4.1 回顾发送AJAX异步请求的方式 发送AJAX异步请求的常见方式包括&#xff1a; 原生方式&#xff0c;使用浏览器内置的JS对象XMLHttpRequest const xhr new XMLHttpRequest()xhr.onreadystatechange function(){}xhr.open()xhr.send() 原生方式&#xff0…

_awt_container容器_演示

Component作为基类&#xff0c;提供了如下常用的方法来设置组件的大小、位置、可见性等。 方法签名方法功能setLocation(int x,int y)设置组件的位置setSize(int width,int heigth)设置组件的大小setBounds(int x,int y,int width,int heigth)设置组件的位置&#xff0c;大小。…

基于蚂蚁优化算法的BP神经网络在负荷预测中的应用研究(Matlab完整代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; 目录 1 ACO-BP算法 2 ACO-BP算法基本思路 3 具体步骤 4 运行结果 ​ 5 参考文献 6 Matlab代码实现 1 ACO-BP算法 传统的…

数组模拟实现单链表快速操作

前言&#xff1a;我们都知道链表的一般模式是由结构体加指针来实现的&#xff0c;但是在实际的比赛中&#xff0c;结构体指针来实现链表的操作并不常用&#xff0c;原因是因为我们在增加节点时需要开辟新的内存&#xff0c;而比赛时给出的样例大多都是十几万个数据&#xff0c;…

安装配置SVN版本控制管理工具

SVN工具能帮我们做什么&#xff1f; 核心功能&#xff1a;文档版本管理系统 适合对象&#xff1a;个人与团队都可以使用&#xff0c;企业中项目资源的重要管理工具 举例&#xff1a;一个文件夹里面的文档管理 1.下载安装SVN服务器 VisualSVN-Server 2.下载安装SVN客户端 T…

【论文阅读】CVPR2023 IGEV-Stereo

用于立体匹配的迭代几何编码代价体 【cvhub导读】【paper】【code_openi】 代码是启智社区的镜像仓库&#xff0c;不需要魔法&#xff0c;点击这里注册 &#x1f680;贡献 1️⃣现有主流方法 基于代价滤波的方法和基于迭代优化的方法&#xff1a; 基于代价滤波的方法可以在c…

大小字母转换

1.代码实例: public class UpString { public static void main(String[] args) { if(args!null && args.length 1){ String str new String(args[0]); System.out.println(“原字符&#xff1a;” str “\n”); String newA str.toUpperCase(); System.out.prin…

C语言分支和循环语句

目录 1.什么是语句&#x1f60a; 2.分支语句&#xff08;选择结构&#xff09;&#x1f60a; 2.1 if语句&#x1f43e; 2.2 switch语句&#x1f43e; 3.循环语句 &#x1f60a; 3.1 while循环&#x1f43e; 3.2 for循环&#x1f43e; 3.3 do...while()循环&#x1f43e…

太太太太太卷了,累了

我们聊到互联网行业的时候&#xff0c;一个不可避免的话题就是“内卷” 在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff…

C++内联函数的使用

1.内联函数概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数&#xff0c;在编译期间编译器会用…

[元来学NVMe协议] NVMe IO 指令集(NVM 指令集)| Flush 命令

声明 主页:元存储的博客_CSDN博客 依公开知识及经验整理,如有误请留言。 个人辛苦整理,付费内容,禁止转载。 内容摘要 前言 NVMe2.0 定义的三类命令集: 管理命令集、IO命令集、Fabrics命令集 Admin Command Set (管理命令集):用于控制器的管理,如创建/销毁IO提交队列…

春秋云境:CVE-2022-25401(任意文件读取漏洞)

目录 一、题目 二、curl访问flag文件 一、题目 介绍&#xff1a; Cuppa CMS v1.0 administrator/templates/default/html/windows/right.php文件存在任意文件读取漏洞 进入题目 是一个登录页面 sql和暴破都无解。 官方POC 国家信息安全漏洞库 cve漏洞介绍 官方给错了目录 …

初阶数据结构之顺序表的增删查改(二)

文章目录 [TOC](文章目录) 前言一、顺序表1.1顺序表的概念1.2顺序表的分类1.3、顺序表的接口定义 二.顺序表的完整实现2.1代码的完成实现 总结 前言 线性表的含义&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种…

CSAPP第五章 面向编译器的优化(2)

回顾 先复习一下之前的东西。 练习5.7 我们可以看到&#xff0c;相比combine4生成的基于指针的代码&#xff0c;GCC使用了C代码中数组引 用的更加直接的转换。循环索引i在寄存器rdx中&#xff0c;data的地址在寄存器rax中。和 前面一样&#xff0c;累积值acc在向量寄存器xm…

bthome协议分析及esp32上的实现

前言 最近自己搞了些智能家居的小节点&#xff0c;但由于wifi入网方式功耗太高&#xff0c;于是关注起了蓝牙 bthome是一种灵活的低功耗BLE数据格式协议&#xff0c;用于广播传感器数据&#xff0c;此协议支持数据加密&#xff0c;目前最新为v2版本。在home assistant中也支持…

( “树” 之 BST) 108. 将有序数组转换为二叉搜索树 ——【Leetcode每日一题】

108. 将有序数组转换为二叉搜索树 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1&#xff1a; 输入…