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

📄 findcriticalpoints.m

📁 一种新的时频分析方法的matlab源程序。
💻 M
字号:
function [allx, ally] = findcriticalpoints(datay)
%
% [allx, ally] = findcriticalpoints(datay):
%
% Function to return the set of max, min and zero crossing values
% and their coordinates in the order found in datay(n),
% where n specifies the dimension of array datay.
% The value datay(i) is considered to have a local minimum in i,
% if datay(i-1) > datay(i) < datay(i+1);
% The value datay(i) is considered to have a local maximum in i,
% if datay(i-1) < datay(i) > datay(i+1);
% The value datay(i) is considered to have a zero crossing, if
% datay(i) and datay(i+1) have different signs. The coordinate
% of datay(i) is linearly interpolated.
%
% Input-
%	datay	- input vector of values
% Output-
%	allx	- vector that specifies the coordinates of max, min
%		    and zero crossing values in the order found
%	ally	- corresponding max, min and zero values
%
% Karin Blank (NASA GSFC)	    March 26, 2003  Initial
% Jelena Marshak (NASA GSFC)	July 16, 2004 Modified
%	(Replaced '&&' by '&' in zero-crossing calculation section.)
%	(Corrected zero-crossing calculation.)
%
% Notes-
% Used by 'zfapanls.m'.

%----- Initialize values
allx = [];
ally = [];
Ymax = 0;
Ymin = 0;
Xmax = 0;
Xmin = 0;
flagmax = 0;
flagmin = 0;

for i=2:length(datay)-1;
    %----- Find local maximum
    if ((datay(i) > datay(i-1)) & (flagmax == 0))
        flagmax = 1;
        
        Xmax = i;
        Ymax = datay(i);
    end
    
    if((datay(i) < datay(i+1)) & (flagmax == 1))
        flagmax = 0;
    end
    
    if((datay(i) > datay(i+1)) & (flagmax == 1))
        flagmax = 0;
         
        ally = [ally, Ymax];
        
        allx = [allx, Xmax];
    end
    
    %----- Find local minimum
    if((datay(i) < datay(i-1)) & (flagmin == 0))
        flagmin = 1;
        Xmin = i;
        Ymin = datay(i);
    end
    
    if((datay(i) > datay(i+1)) & (flagmin == 1))
        flagmin = 0;
    end
    
    if((datay(i) < datay(i+1)) & (flagmin == 1))
        flagmin = 0;
       
        allx = [allx, Xmin];
        ally = [ally, Ymin];
    end
    
    %----- Find zero crossings
    if(((datay(i) > 0) & (datay(i+1) < 0)) | ((datay(i) < 0) & (datay(i+1) > 0)))
        %----- Estimate where zero crossing actually occurs
        slope = (datay(i+1) - datay(i)); %(delta x = 1)
        b = datay(i+1) - (slope * (i+1));
        x = -b/slope;
        
        allx = [allx, x];
        ally = [ally, 0];
    elseif(datay(i) == 0.)
        x=i;
        allx = [allx, x];
        ally = [ally, 0];
%        zero_cross = [zero_cross2, i];
    end
end

⌨️ 快捷键说明

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