模糊神经网络机械故障诊断(MATLAB代码)

该文展示了如何运用训练好的模糊神经网络对机械故障进行诊断。网络根据不同预测值判断设备的技术状态,如曲轴轴承和连杆轴承的异响程度。通过迭代优化网络参数,实现对训练数据的精确预测,并绘制误差变化曲线以评估模型性能。
摘要由CSDN通过智能技术生成

效果

 

 用训练好的模糊神经网络对机械故障进行诊断,根据网络的预测值得到机械的技术状态。预测值小于 1.5 时为正常状态,预测值在 1.5~2.5 之间时为曲轴轴承轻微异响,预测值在 2.5~3.5 之间时为曲轴轴承严重异响预测值在 3.5~4.5 之间时为连杆轴承轻微异响,预测值大于 4.5 时为连杆轴承严重异响。

y是真实标签,yt是预测标签

 模糊神经网络代码

clear all;
%下载数据

load data_fnn;

%网络结构
I=9;                                  %输入节点
M=18;                                 %隐含节点
O=1;                                  %输出节点

maxgen=10000;                         %迭代次数
xite=0.07;                             %网络学习率
a0=0.3;
b0=0.6;
Ek=1e-15;                              %误差

%初始化模糊神经网络参数
p0=a0*ones(M,1);p0_1=p0;
p1=a0*ones(M,1);p1_1=p1;
p2=a0*ones(M,1);p2_1=p2;
p3=a0*ones(M,1);p3_1=p3;
p4=a0*ones(M,1);p4_1=p4;
p5=a0*ones(M,1);p5_1=p5;
p6=a0*ones(M,1);p6_1=p6;
p7=a0*ones(M,1);p7_1=p7;
p8=a0*ones(M,1);p8_1=p8;
p9=a0*ones(M,1);p9_1=p9;
%初始化模糊隶属度参数
c=0.8+b0*rands(M,I);c_1=c;
b=0.8+b0*rands(M,I);b_1=b;

%训练数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);

%----------------------------------------用训练样本训练模糊神经网络--------------------------------------------

[n,m]=size(input_train);
EE=100;
p=1;
while p<=maxgen && EE>=Ek
    for k=1:m                        %m 样本个数
        %提取训练样本
        x=inputn(:,k);
        
        %输入参数模糊化
        for i=1:I
            for j=1:M
                u(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));
            end
        end
        
        %模糊隶属度计算
        for i=1:M
            w(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i)*u(7,i)*u(8,i)*u(9,i);
        end
        addw=sum(w);
        
        %输出计算
        for i=1:M
            yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6)+p7_1(i)*x(7)+p8_1(i)*x(8)+p9_1(i)*x(9);
        end
        addyw=0;
        addyw=yi*w';
        yn(k)=addyw/addw;
        e(k)=outputn(k)-yn(k);
        
        %系数p修正值计算
        d_p=zeros(M,1);
        for i=1:M
            d_p(i)=xite*e(k)*w(i)/addw;
        end
        
        %系数b修正值计算
        d_b=0*b;
        for i=1:M
            for j=1:I
                d_b(i,j)=xite*e(k)*(yi(i)*addw-addyw)*(x(j)-c(i,j))^2*w(i)/(b(i,j)^2*addw^2);
            end
        end
        
        %c的修正值计算
        d_c=0*c;
        for i=1:M
            for j=1:I
                d_c(i,j)=xite*e(k)*(yi(i)*addw-addyw)*2*(x(j)-c(i,j))*w(i)/(b(i,j)*addw^2);
            end
        end
        
        %系数修正
        p0_1=p0_1+d_p;
        p1_1=p1_1+d_p*x(1);
        p2_1=p2_1+d_p*x(2);
        p3_1=p3_1+d_p*x(3);
        p4_1=p4_1+d_p*x(4);
        p5_1=p5_1+d_p*x(5);
        p6_1=p6_1+d_p*x(6);
        p7_1=p7_1+d_p*x(7);
        p8_1=p8_1+d_p*x(8);
        p9_1=p9_1+d_p*x(9);
        
        %隶属度参数修正
        b=b+d_b;
        c=c+d_c;
    end
    
    for k=1:m                        %m 样本个数
        %提取训练样本
        x=inputn(:,k);
        
        %输入参数模糊化
        for i=1:I
            for j=1:M
                u(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));
            end
        end
        
        %模糊隶属度计算
        for i=1:M
            w(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i)*u(7,i)*u(8,i)*u(9,i);
        end
        addw=sum(w);
        
        %输出计算
        for i=1:M
            yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6)+p7_1(i)*x(7)+p8_1(i)*x(8)+p9_1(i)*x(9);
        end
        addyw=0;
        addyw=yi*w';
        yn(k)=addyw/addw;
    end
    EE=(1/2)*sumsqr(outputn-yn)
    E(p)=EE;
    p=p+1;
end
EE,p
y=mapminmax('reverse',yn,outputps)
epoch=1:size(E,2);
figure
plot(epoch,E,'-r');
title('误差变化曲线');xlabel('步数');ylabel('误差');

%----------------------------------------------测试样本网络预测-----------------------------------------

%输入数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
[n,m]=size(input_test);

%网络预测
for k=1:1:m
    x=inputn_test(:,k);
    
    %输入参数模糊化
    for i=1:I
        for j=1:M
            u(i,j)=exp(-(x(i)-c(j,i))^2/b(j,i));
        end
    end
    
    %模糊隶属度计算
    for i=1:M
        w(i)=u(1,i)*u(2,i)*u(3,i)*u(4,i)*u(5,i)*u(6,i)*u(7,i)*u(8,i)*u(9,i);
    end
    addw=sum(w);
    
    %输出计算
    for i=1:M
        yi(i)=p0_1(i)+p1_1(i)*x(1)+p2_1(i)*x(2)+p3_1(i)*x(3)+p4_1(i)*x(4)+p5_1(i)*x(5)+p6_1(i)*x(6)+p7_1(i)*x(7)+p8_1(i)*x(8)+p9_1(i)*x(9);
    end
    addyw=0;
    addyw=yi*w';
   
    %网络预测值
    ytn(k)=addyw/addw;
end

%预测值反归一化
yt=mapminmax('reverse',ytn,outputps)
#代码:https://mbd.pub/o/bread/mbd-ZJyTmZZw
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深度学习的奋斗者

你的鼓励是我努力的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值