%% 求得信号的P、V波位置,将每个P、V波的位置保存到数组中
% 输入:data信号,window滑动窗口的宽度
% 输出:loc_min 信号极小值位置数组、loc_max_set信号极大值位置数组
%% 可以采用如下方式得到极大值点和极小值点,而且这种方式不会出现漏检的问题
% for (int i = 0; i < press.length-span; i=i+span) {
% max=press[i];
% min=press[i];
% for (int j = i; j <=i+span; j++) {
% if (press[j]<=min) {
% min=press[j];
% }
% if (press[j]>=max) {
% max=press[j];
% }
% }
% }
%% 有待更新
function [loc_min,loc_max_set]=detect_loc_min(data,window)
% figure;
% plot(data,'k');
% datawindow=50*2;
datawindow=window;
num_min=0; %滑动窗口法时,满足极小值条件的个数
num_max=0; %滑动窗口法时,满足极大值条件的个数
num_loc_min=0; %记录极小值的数量
num_loc_max=0; %记录极大值的数量
loc_min=[]; %记录每一个极小值位置的数组
loc_max_set=[]; %记录每一个极大值位置的数组
for i=1:length(data)-datawindow
%判断某点是极小值(V波)
for j=0:datawindow
if data(i+datawindow/2)<=data(i+j) && j~=datawindow/2
num_min=num_min+1;
elseif data(i+datawindow/2)>=data(i+j) && j~=datawindow/2
num_max=num_max+1;
end
end
if num_min==datawindow+1
% hold on;
% plot(i+datawindow/2,data(i+datawindow/2),'ro');
num_loc_min=num_loc_min+1;
loc_min(num_loc_min)=i+datawindow/2;
end
%将判断极小值的标志置0
num_min=0;
if num_max==datawindow
num_loc_max=num_loc_max+1;
loc_max_set(num_loc_max)=i+datawindow/2;
% hold on;
% plot(i+datawindow/2,data(i+datawindow/2),'ro');
end
%将判断极大值的标志置0
num_max=0;
end
end
评论0