⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yunzhenduan.m

📁 基于云理论的自动诊断代码,效果很好,有研究的人可以参考
💻 M
字号:
clc,clear
RJ=[ 245  249 251 256 272 320  450 600  700 295 505 525 710 730]%测试程序数据
%==================基于云理论心率异常诊断程序================================
%基于RR间期心率异常划分5类为(早博、可疑、正常、漏博、停博)
%编于:2207.3.20
%----------------参数设定----------------------------------------------
RR=330;%平均间期
cy=360;%采样频率
Ex_zao=0.75*RR;
En_zao=0.075*RR/3;
Ex_yi=0.825*RR;
En_yi=0.35*RR/3;
%Ex_yi2=0.84*RR;
%En_yi2=(1.125-0.84)*RR/3;
Ex_ok1=0.9*RR;
En_ok1=0.075*RR/3;
Ex_ok2=1.5*RR;
En_ok2=(648-Ex_ok2)/3;
Ex_lou1=1.6*RR;
En_lou1=0.1*RR/3;
Ex_lou2=1.9*cy;
En_lou2=0.1*cy/3;
Ex_ting=2.0*cy;
En_ting=0.1*cy/3;
He=2;
%-------------画云图------------------------------------------
%-----------------------早博规则云(半降云)-----------------------------
cc=1500;
mm=0;
while cc>0
    En_RR=randn(1)*2+En_zao;  
    x1(cc)=randn(1)*En_RR+Ex_zao;
    if x1(cc)>=Ex_zao
        mm=mm+1;
        x11(mm)=x1(cc);
        rmu11(mm)=exp((-(x11(mm)-Ex_zao)^2)/(2*En_RR^2));
    end;
    cc=cc-1;
end;

 for  X=fix(0.3*RR):fix(Ex_zao)
      x12(X)=X;
      rmu12(X)=1;   
end;
%---------------------------可疑型早博(正态云)----------------------------

cc=1500;
while cc>0
    En_RR=randn(1)*2+En_yi;    
    x2(cc)=randn(1)*En_RR+Ex_yi;
    rmu2(cc)=exp((-(x2(cc)-Ex_yi)^2)/(2*En_RR^2));
    cc=cc-1;
end;
%-------------------------正常型(梯形云)-------------------------------------
cc=1500;
mm=0;
while cc>0
    En_RR=randn(1)*2+En_ok1;  
    x1(cc)=randn(1)*En_RR+Ex_ok1;
    if x1(cc)<=Ex_ok1
        mm=mm+1;
        x31(mm)=x1(cc);
        rmu31(mm)=exp((-(x31(mm)-Ex_ok1)^2)/(2*En_RR^2));
    end;
    cc=cc-1;
end;
cc=1500;
mm=0;
while cc>0
    En_RR=randn(1)*2+En_ok2;  
    x1(cc)=randn(1)*En_RR+Ex_ok2;
    if x1(cc)>=Ex_ok2
        mm=mm+1;
        x32(mm)=x1(cc);
        rmu32(mm)=exp((-(x32(mm)-Ex_ok2)^2)/(2*En_RR^2));
    end;
    cc=cc-1;
end;
for X=fix(Ex_ok1):fix(Ex_ok2)
    x33(X)=X;
    rmu33(X)=1;
end;
%---------------------漏博型(梯形云)--------------------------------------
cc=1500;
mm=0;
while cc>0
    En_RR=randn(1)*2+En_lou1;  
    x1(cc)=randn(1)*En_RR+Ex_lou1;
    if x1(cc)<=Ex_lou1
        mm=mm+1;
        x41(mm)=x1(cc);
        rmu41(mm)=exp((-(x41(mm)-Ex_lou1)^2)/(2*En_RR^2));
    end;
    cc=cc-1;
end;
cc=1500;
mm=0;
while cc>0
    En_RR=randn(1)*2+En_lou2;  
    x1(cc)=randn(1)*En_RR+Ex_lou2;
    if x1(cc)>=Ex_lou2
        mm=mm+1;
        x42(mm)=x1(cc);
        rmu42(mm)=exp((-(x42(mm)-Ex_lou2)^2)/(2*En_RR^2));
    end;
    cc=cc-1;
end;
for X=fix(Ex_lou1):fix(Ex_lou2)
    x43(X)=X;
    rmu43(X)=1;
    cc=cc-1;
end;
%-------------------------停博型(半升云)----------------------------------
cc=1500;
mm=0;
while cc>0
    En_RR=randn(1)*2+En_ting;  
    x1(cc)=randn(1)*En_RR+Ex_ting;
    if x1(cc)<=Ex_ting
        mm=mm+1;
        x51(mm)=x1(cc);
        rmu51(mm)=exp((-(x51(mm)-Ex_ting)^2)/(2*En_RR^2));
    end;
    cc=cc-1;
end;
for X=fix(0.3*RR);fix(Ex_zao);
    x12(X)=X;
    rmu12(X)=1;
end
for X=720:800
    x52(X)=X;
    rmu52(X)=1;
end;
figure(1);%画规则云图
plot(x11,rmu11,'.');
axis([100,800,0,1.2]);
hold on
plot(x12,rmu12,'.');
hold on
plot(x2,rmu2,'.')
hold on
plot(x31,rmu31,'.')
hold on
plot(x32,rmu32,'.')
hold on
plot(x33,rmu33,'.')
hold on
plot(x41,rmu41,'.')
hold on
plot(x42,rmu42,'.')
hold on
plot(x43,rmu43,'.')
hold on
plot(x51,rmu51,'.')
hold on
plot(x52,rmu52,'.')
xlabel('RR间期采样点数');
ylabel('隶属度');
title('心率异常诊断规则云');
%==========基于规则的条件云诊断部分====================================
for ii=1:length(RJ)
   hh=RJ(ii);
    if hh>=Ex_ok1&hh<=Ex_ok2
        mu1=1;
        disp(['心率:',num2str(hh),',属正常型,确诊隶属度为:',num2str(mu1)]);
        continue;
    elseif hh<Ex_ok1
        if hh<=Ex_zao
            mu3=1;
            disp(['心率:',num2str(hh),',属早博型,确诊隶属度为:',num2str(mu3)]);
            continue;
        else
            X=hh;
            yun_shu=[Ex_ok1,En_ok1,He];
            muu=X_yun(yun_shu,X);
            mu1=muu;
            yun_shu=[Ex_yi,En_yi,He];
            muu=X_yun(yun_shu,X);
            mu2=muu;
            yun_shu=[Ex_zao,En_zao,He];
            muu=X_yun(yun_shu,X);
            mu3=muu;
            pd1=max(mu1,mu2);pd=max(pd1,mu3);
            switch pd
                case mu1
                    disp(['心率:',num2str(hh),',属正常型,确诊隶属度为:',num2str(mu1)]);
                case mu3
                    disp(['心率:',num2str(hh),',属早博型,确诊隶属度为:',num2str(mu3)]);
                case mu2
                    disp(['心率:',num2str(hh),',属可疑型,确诊隶属度为:',num2str(mu2)]);                 
            end;
            continue;
        end;
    elseif hh>Ex_ok2
        if hh>=Ex_lou1&hh<=Ex_lou2
            mu4=1;
            disp(['心率:',num2str(hh),',属漏博型,确诊隶属度为:',num2str(mu4)]);
            continue;
        else
            if hh<Ex_lou1
                X=hh;
                yun_shu=[Ex_ok2,En_ok2,He];
                muu=X_yun(yun_shu,X);
                mu1=muu;
                yun_shu=[Ex_lou1,En_lou2,He];
                muu=X_yun(yun_shu,X);
                mu4=muu;
                if mu1>mu4
                    disp(['心率:',num2str(hh),',属正常型,确诊隶属度为:',num2str(mu1)]);
                else disp(['心率:',num2str(hh),',属漏博型,确诊隶属度为:',num2str(mu4)]);
                end;
                continue;
            else
                if hh>=Ex_ting
                    mu5=1;
                    disp(['心率:',num2str(hh),',属停博型,确诊隶属度为:',num2str(mu5)]);
                else
                    X=hh;
                    yun_shu=[Ex_lou2,En_lou2,He];
                    muu=X_yun(yun_shu,X);
                    mu4=muu;
                    yun_shu=[Ex_ting,En_ting,He];
                    muu=X_yun(yun_shu,X);
                    mu5=muu;
                    if mu4>mu5
                        disp(['心率:',num2str(hh),',属漏博型,确诊隶属度为:',num2str(mu4)]);
                    else disp(['心率:',num2str(hh),',属停博型,确诊隶属度为:',num2str(mu5)]);
                    end
                end;
            end;
        end;
    end;
end;
                    
                
      

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -