📄 yunzhenduan.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 + -