%function heart
N = c(1:(150*fix(length(numa)/150)));
%M = numa(1:(150*fix(length(numa)/150)));
M =N .^2;
%M = num(1:(150*fix(length(num)/150)));
A = M(1:1500); %学习心电信号
B = M(1501:length(M));
%A = M; %实时心电信号
TIME = 0.002:0.002:(length(M)/500);
EKG=A'; %原始心电信号
ECG = reshape(EKG,150,length(A)/150)'; %原始心电信号
RT=zeros(length(A)/150,2); %存储R(1)和time(2)
for i=1:1:length(A)/150
[RT(i,1),RT(i,2)] = max(ECG(i,:)); %每个时间段的最大值及时间点
end
RA = 1.2*abs(sum(RT(:,1))/length(RT)); %学习平均R峰值
for i=1:1:length(RT) %清空非R点及时间点
if (RT(i,1)<RA)
RT(i,1) = 0;
RT(i,2)=0;
else
RT(i,2)=RT(i,2)+150*(i-1);
end
end
Rtime = RT(:,2);
UZEROS = find(Rtime ~=0);
for i = 1:1:(length(UZEROS))
TI(i) = TIME(Rtime(UZEROS(i))); %R峰出现时间点
end
for i = 1:1:(length(TI)-1)
T(i) =TI(i+1)-TI(i); %TIME(Rtime(UZEROS(i+1)))-TIME(Rtime(UZEROS(i))); %RR峰间距
end
UZEROSR = find(RT(:,1) ~=0);
for i = 1:1:length(UZEROSR) %描点
R(i)= RT(UZEROSR(i));
TR(i)= TIME(Rtime(UZEROS(i)));
end
Tav = sum(T)/length(T); %R峰平均值
HR = 60/Tav; %初始R峰阈值
hold on
plot(TR,R,'*')
T_R = sum(T)/length(T) ; %平均R间距
T_C = T(length(T)) ; %当前R间距
H_C = R (length(R)) ; %当前R峰值
TH_R = 0.75*sum(R)/length(R) ; %平均R峰值
for i=1:1:(length(B)/150)
[Rmax,j] = max(B((1+150*(i-1)):(150*i)));
if (Rmax>=TH_R)
TCRR = TIME(1500+150*(i-1)+j)-TI(length(TI)); %当前R峰与前一个R峰间距
if((TCRR<0.3)|(TCRR<0.4*T_R)) %伪R峰检测
TH_R = TH_R;
else
R = [R(2:length(R)),Rmax]; %更新R峰矩阵
H_C = Rmax; %当前R峰值
H_CJ(i)=Rmax; %R峰值矩阵
H_R = sum(R)/length(R); %平均R峰值
TH_R = 0.75*H_R; %R阈值
TH_RJ(i)= TH_R; %R阈值矩阵
TI = [TI(2:length(TI)),TIME(1500+150*(i-1)+j)]; %4个R峰出现时间 %Ten = T(length(T));
TIJ(i) = TIME(1500+150*(i-1)+j); %R峰出现时间矩阵
T = [T(2:length(T)),(TI(length(TI))-TI(length(TI)-1))]; %4个R峰时间间隔矩阵
Tjiange(i)= T(length(T)); %瞬时R峰间隔
Tshun =60/T(length(T)); %瞬时心率
TshunJ(i) = Tshun; %瞬时心率矩阵
T_R = sum(T)/length(T); %R峰平均间距
HRA(i) = 60/T_R;
end
end
end
K= find(H_CJ ~=0);
for i = 1:1:length(K) %描点 %R峰值矩阵
H_CJU(i)= H_CJ(K(i));
end
N1= find(TIJ ~=0);
for i = 1:1:length(N1) %描点 %R峰出现时间矩阵
TIJU(i)= TIJ(N1(i));
end
hold on
plot(TIJU,H_CJU,'*') %描R点
G= find(TshunJ ~=0);
for i = 1:1:length(G) %描点 %瞬时心率矩阵
TshunJU(i)= TshunJ(G(i));
end
L=find( Tjiange~=0); %瞬时R峰间隔
for i = 1:1:length(L) %描点
TjiangeU(i)= Tjiange(L(i));
end
HRAU = find(HRA~=0);
for i=1:1:length(HRAU)
HRAUJ(i) = HRA(HRAU(i));
end
hold on
plot(TIME,M,'r')