MATLAB的24脉波整流器Simulink仿真与故障诊断
本博客来源于CSDN机器鱼,未同意任何人转载。
更多内容,欢迎点击本专栏目录,查看更多内容。
目录
0 引言
1 故障数据采集
2 故障特征提取
3 故障诊断分类
4 结语
本博客内容是在MATLAB2023下完成。
0 引言
对于电力电子电路的故障诊断,作为非专业的电路爱好者,搭建电路非常困难,因此常用simulink仿真来建模,如下图,是一个24脉搏整流器的仿真图。Subsystem是三相整流电路。我用的完整模型可以在【这里】下载。

1 故障数据采集
对于故障诊断数据获取,我们subsystem中的二极管断开连接,就模拟出一种故障类型。
运行下列代码,即可完成一种类型故障数据的采集。一共4个subsystem,每个subsystem有6个二极管,各弄断路一次,一共24种故障,加上正常情况,一共需要运行下面代码25次,得到25个mat文件。记得一定要修改最后保存时候的变量。
clear;clc;close all
format compact
%
%每种故障模式均取30组样本
for i=1:30%每仿真一次就采集一次样本% 设置负载电阻与电感随机变动,模拟各种负载情况r=500*(1-0.2*rand);%负载电阻l=0.1*(1-0.2*rand);%负载电感set_param('zhengliu24/load','Resistance','r');set_param('zhengliu24/load','Inductance','l');sim('zhengliu24');%保存电流与电压current=current.signals.values;voltage=voltage.signals.values;data{i,1}=current;data{i,2}=voltage;
end
%% 保存结果 ,每次设置完故障类型,需要将下面这两句的变量名称改一下
%防止覆盖掉
data25=data;
save data25 data25
再运行下面的代码,将25个mat文件合并在一起,并给每个样本加上对应的标签。
clear
clc
close all
%% 直接复制,懒得写循环
load data1;
load data2;
load data3;
load data4;
load data4;
load data5;
load data6;
load data7;
load data8;
load data9;
load data10;
load data11;
load data12;
load data13;
load data14;
load data15;
load data16;
load data17;
load data18
load data19
load data20
load data21
load data22
load data23
load data24
load data25% 要是要电压波形,把1全都改成2就行
data=[data1{:,1} data2{:,1} data3{:,1} ...data4{:,1} data5{:,1} data6{:,1} ...data7{:,1} data8{:,1} data9{:,1} ...data10{:,1} data11{:,1} data12{:,1} ...data13{:,1} data14{:,1} data15{:,1} ...data16{:,1} data17{:,1} data18{:,1} ...data19{:,1} data20{:,1} data21{:,1} ...data22{:,1} data23{:,1} data24{:,1} data25{:,1} ];
data=data';
label0=1:25;
label1=repmat(label0,30,1);
label=reshape(label1,1,750);
input=data;
save data input label%% 画图
close all
load data
% 画出正常状态与前5种故障的波形
figure
for i=1:6subplot(2,3,i)plot(input(30*(i-1)+1,:))axis([-inf inf 3 4.5])grid onylabel('电流幅值/A')xlabel('采样点数/个')if i==1title('正常')elseif i==2title('V1故障')elseif i==3title('V2故障')elseif i==4title('V3故障')elseif i==5title('V4故障')elseif i==6title('V5故障')end
end

2 故障特征提取
采集完故障数据之后,还需要做故障特征提取,再用提取的特征做故障诊断分类器的训练与测试,代码如下,我们采用快速傅里叶提取频谱作为特征量。
% 特征提取-傅里叶频谱
%
clear
clc
close all
%% 1 加载数据
load data
%% 2 信号加噪 加入均值维0 方差为0.001的高斯白噪声
% 以模拟实际电路中的白噪声与热噪声
m=0;
n=0.001;
data=input+m+n*rand(750,800);
N=800;%采样点数
fs=20000;%采样频率
for iiii=1:750iiiiS=input(iiii,:);%% FFT变换并计算模值Y = fft(S,N); %做FFT变换Ayy = (abs(Y)); %取模%% 计算幅频特征Ayy0=Ayy/(N/2); %换算成实际的幅度Ayy0(1)=Ayy0(1)/2;tz(iiii,:)=Ayy0(2:N/2);%同样删除第一分量
end
input=tz;
save data_fft input label
%%
close all
load data_fft
figure
% 画出正常状态与前5种故障的波形
for i=1:6subplot(2,3,i)bar(input(30*(i-1)+1,:))% axis([-inf inf 3 4.5])grid onylabel('电流幅值/A')xlabel('采样点数/个')if i==1title('正常')elseif i==2title('V1故障')elseif i==3title('V2故障')elseif i==4title('V3故障')elseif i==5title('V4故障')elseif i==6title('V5故障')end
end

3 故障诊断分类
最后我们采用极限学习机做故障诊断分类,分类前采用PCA做一下降维。
clc;clear;close all; format compact
%% 加载数据
load data_fft
%%
%由于特征维数过高,不利于训练网络,因此我们用PCA进行降维
[PCALoadings,PCAScores,PCAVar] = pca(input);%利用PCA进行降维
percent_explained = 100 * PCAVar / sum(PCAVar);
pareto(percent_explained) %pareto图,只显示前95%的累积分布
xlabel('主成分')
ylabel('贡献率(%)')
title('主成分贡献率')
%
input=PCAScores(:,1:4);%利用pca进行降维至3维,从pareto图看,有4维就够了
%%
output=label';%随机训练样本,预测样本
[m n]=sort(rand(1,750));
m=500;
P_train=input(n(1:m),:)';
T_train=output(n(1:m),:)';
% P_test=input(n(m+1:end),:)';
% T_test=output(n(m+1:end),:)';
P_test=input(n(end),:)';
T_test=output(n(end),:)';
tic
[IW,B,LW,TF,TYPE,T] = elmtrain(P_train,T_train,100,'sig',1);
toc
train_accuracy=sum(T_train==T)/length(T)
figure
stem(T_train,'r*');hold on
plot(T,'bo');
title('训练集')
%% ELM仿真测试
tic
J = elmpredict(P_test,IW,B,LW,TF,TYPE);
toc
J1=T_test;
disp('展示elm的测试集分类')
test_accuracy=sum(J==J1)/length(J)figure
stem(J,'r*');hold on
plot(J1,'bo');
title('测试集')
function [IW,B,LW,TF,TYPE,T] = elmtrain(P_train,T,N,TF,TYPE)%P_train=train;T=train_label;N=200;TF='sig';TYPE=1;
% P - Input Matrix of Training Set (R*Q)
% T - Output Matrix of Training Set (S*Q)
% N - Number of Hidden Neurons (default = Q)
% TF - Transfer Function:'sig' for Sigmoidal function (default)',sin' for Sine function,'hardlim' for Hardlim function
% TYPE - Regression (0,default) or Classification (1)% IW - Input Weight Matrix (N*R)
% B - Bias Matrix (N*1)
% LW - Layer Weight Matrix (N*S)
%回归
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',0)
% Y = elmtrain(P,IW,B,LW,TF,TYPE)
% 分类
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',1)
% Y = elmtrain(P,IW,B,LW,TF,TYPE)
% See also ELMPREDICT%显然在这个程序中elmtrain跟了6个参数,正常情况下nargin=6,但是有些省略的时候,就要用到下面几句程序进行默认赋值
if nargin < 2error('ELM:Arguments','Not enough input arguments.');
end %输入参数必须大于等于2个,否则无法进行建模,因为至少要有输出输入参数才行
if nargin < 3N = size(P_train,2); %如果只有输入输出,默认隐含层神经元为样本数
end
if nargin < 4TF = 'sig';%如果只有输出输入,隐含层神经元数量,默认激活函数为sigmoid函数
end
if nargin < 5TYPE = 0;%如果没有定义函数的作用,默认为回归拟合
end
% 其中基本上都是在主程序中定义了那几个参数的,所以上面这几句一般用不到。。。。。。。。。
%%%%%%%%%%%%*****************************if size(P_train,2) ~= size(T,2)error('ELM:Arguments','The columns of P and T must be same.');
end
%输出样本数量必须与输出样本数量一致。
[R,Q] = size(P_train);%R=2,Q=1900
if TYPE == 1T1 = ind2vec(T);
end%如果定义的是分类,就将训练输出转为向量索引 http://blog.csdn.net/u011314012/article/details/51191006
[S,Q] = size(T1); %S=1,Q=1900% 随机产生输入权重矩阵,1900*2
IW = rand(N,R) * 2 - 1;% 随机产生隐层偏置 1900*1
B = rand(N,1);
BiasMatrix = repmat(B,1,Q);% 计算隐层输出H
tempH = IW * P_train + BiasMatrix;
switch TFcase 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end
% 计算隐层到输出层之间的权重
LW = pinv(H') * T1';
TY=(H'*LW)';if TYPE == 1temp_Y=zeros(1,size(TY,2));
for n=1:size(TY,2)[max_Y,index]=max(TY(:,n));temp_Y(n)=index;
end
Y_train=temp_Y;
train_accuracy=sum(Y_train==T)/length(T);
end
if TYPE==0train_accuracy=0;
end
end
%pinv与inv都是用来求矩阵的逆矩阵,但是inv是知道存在逆矩阵的情况下用的
%当不清楚矩阵是否存在逆矩阵的情况时,或者根本不存在逆矩阵,就用PINV来伪逆矩阵
function Y = elmpredict(P_test,IW,B,LW,TF,TYPE)
% P - Input Matrix of testing Set (R*Q)
% IW - Input Weight Matrix (N*R)
% B - Bias Matrix (N*1)
% LW - Layer Weight Matrix (N*S)
% TF - Transfer Function:
% 'sig' for Sigmoidal function (default)
% 'sin' for Sine function
% 'hardlim' for Hardlim function
% TYPE - Regression (0,default) or Classification (1)
% Output
% Y - Simulate Output Matrix (S*Q)% Regression:
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',0)
% Y = elmpredict(P,IW,B,LW,TF,TYPE)% Classification
% [IW,B,LW,TF,TYPE] = elmtrain(P,T,20,'sig',1)
% Y = elmpredict(P,IW,B,LW,TF,TYPE)if nargin < 6error('ELM:Arguments','Not enough input arguments.');
end% Calculate the Layer Output Matrix H
Q = size(P_test,2);
BiasMatrix = repmat(B,1,Q);
tempH = IW * P_test + BiasMatrix;switch TFcase 'sig'H = 1 ./ (1 + exp(-tempH));case 'sin'H = sin(tempH);case 'hardlim'H = hardlim(tempH);
end% Calculate the Simulate Output
Y = (H' * LW)';if TYPE == 1temp_Y = zeros(size(Y));for i = 1:size(Y,2)[max_Y,index] = max(Y(:,i));temp_Y(index,i) = 1;endY = vec2ind(temp_Y);
end


4 结语
更多内容请点击【专栏】获取。您的点赞是我更新MATLAB1000个案例分析的动力。
相关文章:
MATLAB的24脉波整流器Simulink仿真与故障诊断
本博客来源于CSDN机器鱼,未同意任何人转载。 更多内容,欢迎点击本专栏目录,查看更多内容。 目录 0 引言 1 故障数据采集 2 故障特征提取 3 故障诊断分类 4 结语 本博客内容是在MATLAB2023下完成。 0 引言 对于电力电子电路的故障诊断…...
linux第三次作业
1、将你的虚拟机的网卡模式设置为nat模式,给虚拟机网卡配置三个主机位分别为100、200、168的ip地址 2、测试你的虚拟机是否能够ping通网关和dns,如果不能请修改网关和dns的地址 3、将如下内容写入/etc/hosts文件中(如果有多个ip地址则写多行&…...
国标GB28181视频平台EasyCVR顺应智慧农业自动化趋势,打造大棚实时视频监控防线
一、方案背景 近年来,温室大棚种植技术凭借其显著的优势,在提升农作物产量和质量、丰富农产品供应方面发挥了重要的作用,极大改善了人们的生活水平,得到了广泛的推广和应用。大棚内的温度、湿度、光照度和二氧化碳浓度等环境因素…...
HOW - 如何测试 React 代码
目录 一、使用 React 测试库:testing-library/react二、使用测试演练场:testing-playground.com三、使用 Cypress 或 Playwright 进行端到端测试四、使用 MSW 在测试中模拟网络请求 一、使用 React 测试库:testing-library/react testing-li…...
LU分解原理与C++实现:从理论到实践
LU分解原理与C++实现:从理论到实践 a. LU分解基础理论 矩阵的LU分解在数值计算领域占据着举足轻重的地位,它不仅是解决线性方程组的有力工具,还在众多科学与工程问题中发挥着关键作用。从数学定义来看,LU分解是将一个方阵 A A A 分解为一个单位下三角矩阵 L L L 和一个…...
【Vue3知识】组件间通信的方式
组件间通信的方式 概述**1. 父子组件通信****父组件向子组件传递数据(Props)****子组件向父组件发送事件(自定义事件)** **2. 兄弟组件通信****通过父组件中转****使用全局状态管理(如 Pinia 或 Vuex)** **…...
HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析
在当今数字化时代,三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎,凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性,为开发人员提供了构建高质量、高性能3…...
git 的常用指令
以下是 Git 命令分类大全,覆盖日常开发、团队协作和高级操作场景,按功能分类整理: 一、配置与初始化 命令说明git config --global user.name "Your Name"设置全局用户名git config --global user.email "emailexample.com&q…...
python学智能算法(九)|决策树深入理解
【1】引言 前序学习进程中,初步理解了决策树的各个组成部分,此时将对决策树做整体解读,以期实现深入理解。 各个部分的解读文章链接为: python学智能算法(八)|决策树-CSDN博客 【2】代码 【2.1】完整代…...
蓝桥杯 C/C++ 组历届真题合集速刷(一)
一、1.单词分析 - 蓝桥云课 (模拟、枚举)算法代码: #include <bits/stdc.h> using namespace std;int main() {string s;cin>>s;unordered_map<char,int> mp;for(auto ch:s){mp[ch];}char result_charz;int max_count0;fo…...
多类型医疗自助终端智能化升级路径(代码版.上)
大型医疗自助终端的智能化升级是医疗信息化发展的重要方向,其思维链一体化路径需要围绕技术架构、数据流协同、算法优化和用户体验展开: 一、技术架构层:分布式边缘计算与云端协同 以下针对技术架构层的分布式边缘计算与云端协同模块,提供具体编程实现方案: 一、边缘节点…...
区间 DP 详解
文章目录 区间 DP分割型合并型环形合并 区间 DP 区间 DP,就是在对一段区间进行了若干次操作后的最小代价,一般是合并和拆分类型。 分割型 分割型,指把一个区间内的几项分开拆成一份一份的,再全部合起来就是当前答案,…...
如何在多线程中安全地使用 PyAudio
1. 背景介绍 在多线程环境下使用 PyAudio 可能会导致段错误(Segmentation Fault)或其他不可预期的行为。这是因为 PyAudio 在多线程环境下可能会出现资源冲突或线程安全问题。 PyAudio 是一个用于音频输入输出的 Python 库,它依赖于 PortAu…...
QAM 信号的距离以及能量归一化
QAM星座图平均功率能量_星座图功率计算-CSDN博客 正交幅度调制(QAM) - Vinson88 - 博客园 不同阶QAM调制星座图中,符号能量的归一化计算原理_qpsk的星座图归一化-CSDN博客 https://zhuanlan.zhihu.com/p/690157236...
Reactive编程框架与工具
文章目录 6.2 后端 Reactive 框架6.2.1 Spring WebFlux核心架构核心组件实际应用高级特性性能优化适用场景与限制 6.2.2 Akka(Actor模型)Actor模型基础基本用法高级特性响应式特性实现性能优化实际应用场景优势与挑战 6.2.3 Vert.x(事件驱动&…...
五子棋游戏开发:静态资源的重要性与设计思路
以下是以CSDN博客的形式整理的关于五子棋游戏静态资源需求的文章,基于我们之前的讨论,内容结构清晰,适合开发者阅读和参考。我尽量保持技术性、实用性,同时加入一些吸引读者的亮点。 五子棋游戏开发:静态资源的重要性与…...
Python爬虫第7节-requests库的高级用法
目录 前言 一、文件上传 二、Cookies 三、会话维持 四、SSL证书验证 五、代理设置 六、超时设置 七、身份认证 八、Prepared Request 前言 上一节,我们认识了requests库的基本用法,像发起GET、POST请求,以及了解Response对象是什么。…...
Maven的安装配置-项目管理工具
各位看官,大家早安午安晚安呀~~~ 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习:Maven的安装配置-项目管理工具 目录 1.什么是Maven?Maven用来干什么的?…...
智能 SQL 优化工具 PawSQL 月度更新 | 2025年3月
📌 更新速览 本月更新包含 21项功能增强 和 9项问题修复,重点提升SQL解析精度与优化建议覆盖率。 一、SQL解析能力扩展 ✨ 新增SQL语法解析支持 SELECT...INTO TABLE 语法解析(3/26) ALTER INDEX RENAME/VISIBLE 语句解析&#…...
Ubuntu虚拟机编译安装部分OpenCV模块方法实现——保姆级教程
Ubuntu虚拟机的安装过程可以查看另一篇文章:VMware安装Ubuntu虚拟机实现COpenCV代码在虚拟机下运行教程-CSDN博客 目前我们已经下载好了OpenCV,这里以OpenCV4.5.2为例。 在内存要求尽可能小的情况下,可以尝试只编译安装代码中使用到的OpenC…...
find指令中使用正则表达式
linux查找命令能结合正则表达式吗 find命令要使用正则表达式需要结合-regex参数 另,-type参数可以指定查找类型(f为文件,d为文件夹) rootlocalhost:~/regular_expression# ls -alh 总计 8.0K drwxr-xr-x. 5 root root 66 4月 8日 16:26 . dr-xr-…...
Java Web从入门到精通:全面探索与实战(二)
Java Web从入门到精通:全面探索与实战(一)-CSDN博客 目录 四、Java Web 开发中的数据库操作:以 MySQL 为例 4.1 MySQL 数据库基础操作 4.2 JDBC 技术深度解析 4.3 数据库连接池的应用 五、Java Web 中的会话技术ÿ…...
基于大模型的阵发性室上性心动过速风险预测与治疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与目标 1.3 研究方法与数据来源 二、阵发性室上性心动过速概述 2.1 定义与分类 2.2 发病机制与流行病学 2.3 临床表现与诊断方法 三、大模型在阵发性室上性心动过速预测中的应用 3.1 大模型技术原理与特点 3.2 模型构…...
秒杀业务的实现过程
一.后台创建秒杀的活动场次信息,并关联到要秒杀的商品或服务; 二.通过定时任务,将秒杀的活动信息和商品服务信息存储到redis; 三.在商品展示页的显眼位置加载秒杀活动信息; 四.用户参与秒杀,创建订单,将…...
spring mvc @ResponseBody 注解转换为 JSON 的原理与实现详解
ResponseBody 注解转换为 JSON 的原理与实现详解 1. 核心作用 ResponseBody 是 Spring MVC 的一个注解,用于将方法返回的对象直接序列化为 HTTP 响应体(如 JSON 或 XML),而不是通过视图解析器渲染为视图(如 HTML&…...
TDengine.C/C++ 连接器
简介 C/C 开发人员可以使用 TDengine 的客户端驱动,即 C/C 连接器(以下都用 TDengine 客户端驱动表示),开发自己的应用来连接 TDengine 集群完成数据存储、查询以及其他功能。TDengine 客户端驱动的 API 类似于 MySQL 的 C API。…...
[docker] 简单操作场景
Docker的简单操作场景 1 安装 暂时没空写~ 2 登陆 一共4步: ~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d765d4c1eb5f ubuntu:24.04 "/bin/bash" …...
skynet.rawcall使用详解及应用场景
目录 核心特性函数原型使用场景场景 1:高性能二进制传输(如文件转发)场景 2:自定义序列化协议(如 Protocol Buffers)场景 3:跨服务共享内存(避免拷贝) 配套接收方实现与 …...
使用SpringSecurity下,发生重定向异常
使用SpringSecurity下,发生空转异常 环境信息: Spring Boot 3.4.4 , jdk 17 , springSecurity 6.4.4 问题背景: 没有自定义controller ,改写了login 页面,并且进行了成功后的跳转处理…...
gbase8s之逻辑导出导入脚本(完美版本)
该脚本dbexport.sh用于快速导出库和导入库(使用多并发unload,和多并发dbload的方式) #!/bin/sh #脚本功能:将数据导出成文本,迁移至其他实例 #最后更新时间:2023-12-19 #使用方法: #1.执行该脚…...
