【故障诊断】基于EMD结合灰狼算法优化支持向量机EMD_GWO_SVM实现故障诊断附matlab代码

简介: 【故障诊断】基于EMD结合灰狼算法优化支持向量机EMD_GWO_SVM实现故障诊断附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

电力运行离不开变压器,一旦变压器发生故障将造成难以估量的损失,而传统的变压器故障诊断方法在准确率存在方面不足,因此文章提出一种基于灰狼算法优化支持向量机(GWO-SVM)模型.该方法通过支持向量机(SVM)对故障数据进行分类,并用灰狼算法(GWO)对SVM的核参数g以及惩罚因子C进行优化,通过不断训练GWO-SVM使其故障诊断精度提高.文章分别对比了标准SVM和粒子群优化后的SVM(PSO-SVM)模型,经比较GWO-SVM模型精度比标准SVM模型高7.5%,比PSO-SVM模型高2.5%,证明GWO-SVM模型具有可行性.

EMD分解是一种用于信号处理和图像处理领域的技术,它可以将信号或图像分解成多个局部特征,并对这些特征进行处理和分析。灰狼算法则是一种基于自然界中灰狼族群行为特点的优化算法,可用于解决非线性、高维度的复杂问题。支持向量机(SVM)则是常用的分类器之一,其用于模式识别和数据挖掘等任务。

将EMD分解与灰狼算法结合,可以解决支持向量机中参数优化问题,并利用EMD分解提取的局部特征来改善模型的预测精度。具体流程如下:

  1. EMD分解:对原始数据进行EMD分解,将其分解为多个不同尺度的局部特征。
  2. 初始化灰狼个体:根据EMD分解得到的局部特征,初始化灰狼个体群。
  3. 计算适应度函数:利用SVM算法和EMD分解得到的局部特征进行训练和测试,并计算出每个灰狼个体的适应度。
  4. 灰狼个体调整:根据当前适应度值,使用灰狼算法对每个灰狼个体进行位置调整和参数更新。
  5. 设定终止条件:设定迭代次数或适应度值达到一定精度时停止算法。
  6. 输出最优解:输出最终得到的最优灰狼个体和其对应的SVM模型参数,用于后续的预测和分类任务中。

⛄ 部分代码

clear all

close all

clc

%% Parameters

fd=100;                               % frequency doppler

ts=1e-3;

t=[0:ts:0.1-ts];

N=length(t);                          % 2M+1 complex Gaussian random variables

M=floor((N-1)/2);  

f0=fd/M;

ind=f0;                               % frequency index

fmax=1e3;                             % maximum simulation frequency

fmin=-fmax;                           % minimum simulation frequency

fr=[fmin:ind:fmax];                   % frequency range for simulation

zeta=0.175;                           % Underdamp  value for zeta

w0=2*pi*fd/1.2;                       % Natural angular frequency

%% Third order filter

% Coefficients

a=w0^3;

b=(2*zeta*w0)+w0;

c=(2*zeta*(w0^2))+(w0^2);

%% building third order Filter in s-domain z-domain w-domain and f-domain

syms f s w;                               % define symbols

tf_s=tf(a,[1 b c a]);                     % 3rd order tf in S domain

tf_z=c2d(tf_s,ts,'tustin');               % tustin: bilinear transformation

h_s=(a/((s^3)+(b*(s^2))+(c*s)+a));        % 3rd order filter in S Dommain

h_W=subs(h_s,s,1i*w);                     % 3rd order filter in w Dommain

h_f=subs(h_W,w,(2*pi*f));                 % 3rd order filter in f Dommain

%%  AutoCorrelation

hv=subs(h_f,f,fr);                         % filter gain for each frequency

hv_double=double(hv);                      % convert gains into double

Autocorr=xcorr(hv_double);                 % Autocorrelation

Autocorr=real(Autocorr*(1/max(Autocorr)));  % normalize AutoCorr

%% choose the values from AutoCorrelation to plot

L=ceil(length(Autocorr)/4);          

AutocorrPlot=Autocorr(L:end-L+1);  % remove the first and fourth quarters

plot(fr/fd,AutocorrPlot)           % Plot AutoCorrelation with rexpect to f/fd

title('Third Order Filter (fd=100Hz, w0=2*pi*fd/1.2 , zeta=0.175)')

xlabel('f/fd')

ylabel('AutoCorrelation')

xlim([-5 5])

grid on

[pks,locs] = findpeaks(AutocorrPlot);  % find peak values and their locations

hold on

scatter(fr(locs)./fd,AutocorrPlot(locs),'filled','blue')

stem(fr(locs)./fd,AutocorrPlot(locs),':r','linewidth',2)


%% plot autcorrelation at positive side

L2=ceil(length(AutocorrPlot)/2);            

AutocorrPlot_P=AutocorrPlot(L2:end);        % Positive side of autocorr.

fr_P=fr(L2:end);                            % Positive frequencies

figure

plot(fr_P/fd,AutocorrPlot_P)

title('Third Order Filter (fd=100Hz, w0=2*pi*fd/1.2 , zeta=0.175)')

xlabel('f/fd (positive frequencies)')

ylabel('AutoCorrelation at Positive frequencies')

xlim([0 5])

grid on


%% using autocorrelatio function

figure

autocorr(hv_double,length(hv_double)-1);

% PSD

a=abs((hv_double).^2);

figure

plot(fr/fd,a)

xlim([-2 2])

title('Third Order Filter (fd=100Hz, w0=2*pi*fd/1.2 , zeta=0.175)')

xlabel('fr/fd')

grid on

ylabel('PSD')

[pks,locs] = findpeaks(a);

% max_pks_L=locs(find(max(pks)));

hold on

scatter(fr(locs)/fd,a(locs),'filled','r')

stem(fr(locs)/fd,a(locs),'filled','.-.r','linewidth',1.5)

plot([-2 2],[max(a) max(a)],'.-.green','linewidth',1.5)



%% Impulse response of Digital Filter (channel)

[numZ denZ ts]=tfdata(tf_z,'v');

figure

[h,n] = impz(numZ,denZ);

%% find n0 : at this point h(n) become negligible

[pks,locs] = findpeaks(h);

nv=0.01;                  % negligible value  as a percentage of maximum value

b=find(pks>=(nv*max(pks)));

peak_no=min(pks(b));

n0=max(locs(b));

%% plot impulse response

subplot(2,1,1)

plot(n.*ts,h)

xlabel('time [sec]')

title('Impulse response of channel "3rd order filter" using plot')

grid

hold on

scatter(n0.*ts,peak_no,'filled','r')

subplot(2,1,2)

stem(n,h)

xlabel('n [samples]')

title('Impulse response of channel "3rd order filter using stem"')

grid

hold on

scatter(n0,peak_no,'filled','r')


%% normalizing the filter H(Z)

numZ_N=numZ./sqrt(sum(h.^2));      % normalize numerator of H(z)

tf_Z_N=tf(numZ_N,denZ,ts);


%% Generating an input signal with unit power => (power_db = 0)

% Ip is vector (n0 ,1) , simulation time:T=0.1 sec

IP_no=(1/(sqrt(2))).*(randn(1,n0)+(1j*randn(1,n0)));

IP_T=(1/(sqrt(2))).*(randn(1,length(t))+(1j*randn(1,length(t))));

IP=[IP_no IP_T];                      % first n0 bits for transient response

% Output from filter

Y=filter(numZ_N,denZ,IP);              % output from filter

Y_T=Y(n0+1:end);                       % output after removing transients

% Output in DB

Y_T_db=20.*log10(abs(Y_T));        % output when length of input=T  in dB

% root mean square value of input signals

rms_Y_T=rms(abs(Y_T));                  % rms of output length = T

rms_Y_T_db=20.*log10(abs(rms_Y_T));     % rms of output length = T in dB

ten_dB_below=rms_Y_T_db-10;

%% plotting output from filters

figure

plot(t,Y_T_db)

hold on

plot([t(1) t(end)],[rms_Y_T_db rms_Y_T_db],'.-.black','linewidth',1)

plot([t(1) t(end)],[ten_dB_below ten_dB_below],'.-.r','linewidth',1.5)

grid

legend('AMPLITUDE','RMS LEVEL','10 dB below RMS LEVEL')

xlabel('Time[sec]');

ylabel('Magnitude [dB]');


%% exact crossing and exact average fade duration in this run

[CN_PD_s CPV AFD_s FT]= Cross_N_PD(Y_T_db,ten_dB_below,ts);


disp('Simulation Result: Number of Crossing per 0.1 sec "PD: Positive Direction"')

CN_PD_s                       % simulation crossing number during 0.1 sec


disp({'Fraction of time when signal goes below specific level';'total duration of fade per second'})

FT

disp('Simulation Result: Average Fade Duration')

AFD_s=(round(AFD_s.*1e5))/(1e5);

title({'single realization of the Amplitude';strcat(' inthis run AFD=',num2str(AFD_s),'   LCN/0.1sec=',num2str(CN_PD_s))})


%% plot filled circles at crossing points in the positive direction

hold on

loc=find(CPV);

scatter(t(loc),ten_dB_below.*ones(1,length(loc)),'filled','blue')


%% Expectation of Level Crossing Rate in Ts time and Average Fade Duration

RowdB=ten_dB_below-rms_Y_T_db;

Row=10.^(RowdB/20);

disp('Theoretical LCR "Level Crossing Rate" ')

LCR=(sqrt(2*pi).*fd.*Row.*exp(-(Row.^2)))   % Expected level Crossing rate per second

disp('Theoretical AFD "Average Fade Duration" ')

AFD=(exp(Row.^2)-1)/((sqrt(2*pi)).*fd.*Row)

%% check rayleigh fading of Amplitude

figure

ksdensity(abs(Y_T))

title({'Distribution of Amplitude'; 'should be approximately like Rayleigh fading distribution'})

grid

%

figure

[x,tt]=ksdensity((angle(Y_T)));


l2=find(tt>pi);


plot(tt,x)

title('PDF of Angles');

grid on

xlabel('Angel "Radian"');

hold on

plot([tt(1) tt(end)],[1/(2*pi) 1/(2*pi)],'.-.r','linewidth',2)

legend('Distribution','1/(2*pi) level')

xlim([tt(1) tt(end)])

⛄ 运行结果

⛄ 参考文献

[1] 黄海松,范青松,魏建安,等.基于CEEMDAN-IGWO-SVM的轴承故障诊断研究[J].组合机床与自动化加工技术, 2020(3):5.DOI:CNKI:SUN:ZHJC.0.2020-03-006.

[2] 熊军华,师刘俊,康义.基于灰狼算法优化支持向量机的变压器故障诊断[J].信息技术与信息化, 2020(11):4.DOI:10.3969/j.issn.1672-9528.2020.11.044.

[3] 周莉鲍志伟.基于灰狼算法优化SVM的变压器故障诊断[J].长江信息通信, 2022, 35(9):27-29.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料



相关文章
|
1天前
|
传感器 算法
基于GA遗传算法的多机无源定位系统GDOP优化matlab仿真
本项目基于遗传算法(GA)优化多机无源定位系统的GDOP,使用MATLAB2022A进行仿真。通过遗传算法的选择、交叉和变异操作,迭代优化传感器配置,最小化GDOP值,提高定位精度。仿真输出包括GDOP优化结果、遗传算法收敛曲线及三维空间坐标点分布图。核心程序实现了染色体编码、适应度评估、遗传操作等关键步骤,最终展示优化后的传感器布局及其性能。
|
3天前
|
算法
基于SOA海鸥优化算法的三维曲面最高点搜索matlab仿真
本程序基于海鸥优化算法(SOA)进行三维曲面最高点搜索的MATLAB仿真,输出收敛曲线和搜索结果。使用MATLAB2022A版本运行,核心代码实现种群初始化、适应度计算、交叉变异等操作。SOA模拟海鸥觅食行为,通过搜索飞行、跟随飞行和掠食飞行三种策略高效探索解空间,找到全局最优解。
|
5天前
|
机器学习/深度学习 数据采集 算法
基于GWO灰狼优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a,展示了时间序列预测算法的运行效果(无水印)。核心程序包含详细中文注释和操作视频。算法采用CNN-GRU-SAM网络,结合灰狼优化(GWO),通过卷积层提取局部特征、GRU处理长期依赖、自注意力机制捕捉全局特征,最终实现复杂非线性时间序列的高效预测。
|
5天前
|
传感器 算法 物联网
基于粒子群算法的网络最优节点部署优化matlab仿真
本项目基于粒子群优化(PSO)算法,实现WSN网络节点的最优部署,以最大化节点覆盖范围。使用MATLAB2022A进行开发与测试,展示了优化后的节点分布及其覆盖范围。核心代码通过定义目标函数和约束条件,利用PSO算法迭代搜索最佳节点位置,并绘制优化结果图。PSO算法灵感源于鸟群觅食行为,适用于连续和离散空间的优化问题,在通信网络、物联网等领域有广泛应用。该算法通过模拟粒子群体智慧,高效逼近最优解,提升网络性能。
|
6天前
|
机器学习/深度学习 存储 算法
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
近端策略优化(PPO)是深度强化学习中高效的策略优化方法,广泛应用于大语言模型的RLHF训练。PPO通过引入策略更新约束机制,平衡了更新幅度,提升了训练稳定性。其核心思想是在优势演员-评论家方法的基础上,采用裁剪和非裁剪项组成的替代目标函数,限制策略比率在[1-ϵ, 1+ϵ]区间内,防止过大的策略更新。本文详细探讨了PPO的基本原理、损失函数设计及PyTorch实现流程,提供了完整的代码示例。
114 10
近端策略优化(PPO)算法的理论基础与PyTorch代码详解
|
1月前
|
算法 数据可视化 安全
基于DWA优化算法的机器人路径规划matlab仿真
本项目基于DWA优化算法实现机器人路径规划的MATLAB仿真,适用于动态环境下的自主导航。使用MATLAB2022A版本运行,展示路径规划和预测结果。核心代码通过散点图和轨迹图可视化路径点及预测路径。DWA算法通过定义速度空间、采样候选动作并评估其优劣(目标方向性、障碍物距离、速度一致性),实时调整机器人运动参数,确保安全避障并接近目标。
148 68
|
2天前
|
机器学习/深度学习 算法 安全
基于深度学习的路面裂缝检测算法matlab仿真
本项目基于YOLOv2算法实现高效的路面裂缝检测,使用Matlab 2022a开发。完整程序运行效果无水印,核心代码配有详细中文注释及操作视频。通过深度学习技术,将目标检测转化为回归问题,直接预测裂缝位置和类别,大幅提升检测效率与准确性。适用于实时检测任务,确保道路安全维护。 简介涵盖了算法理论、数据集准备、网络训练及检测过程,采用Darknet-19卷积神经网络结构,结合随机梯度下降算法进行训练。
|
3天前
|
算法 数据可视化 数据安全/隐私保护
一级倒立摆平衡控制系统MATLAB仿真,可显示倒立摆平衡动画,对比极点配置,线性二次型,PID,PI及PD五种算法
本课题基于MATLAB对一级倒立摆控制系统进行升级仿真,增加了PI、PD控制器,并对比了极点配置、线性二次型、PID、PI及PD五种算法的控制效果。通过GUI界面显示倒立摆动画和控制输出曲线,展示了不同控制器在偏转角和小车位移变化上的性能差异。理论部分介绍了倒立摆系统的力学模型,包括小车和杆的动力学方程。核心程序实现了不同控制算法的选择与仿真结果的可视化。
31 15
|
4天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。

热门文章

最新文章