quickmaxima.m

来自「一种新的时频分析方法的matlab源程序。」· M 代码 · 共 50 行

M
50
字号
function [x, y] = quickmaxima(in)

npts = length(in);
x = zeros(1,npts/4);
y = x;
wasSmaller = in(2) > in(1);
constStart = 0;
if in(2) == in(1); constStart = 1; end
idx = 1;

for i=2:npts-1
    isSmaller = in(i+1) > in(i);
    isConstant = in(i+1) == in(i);
    
    if constStart==0 & ~isConstant
        if wasSmaller ~= isSmaller
            if wasSmaller
                x(idx) = i;
                y(idx) = in(i);
                idx=idx+1;
            end
            wasSmaller = isSmaller;
        end 
    elseif constStart~=0 & isConstant
        continue; % Don't touch wasSmaller!
    elseif constStart~=0 & ~isConstant
        % We haven't touched wasSmaller since the constant zone started!
        if wasSmaller ~= isSmaller
            if wasSmaller
                % put a maximum at the middle point
                x(idx) = 0.5*(constStart+i);
                y(idx) = in(i);
                idx=idx+1;
            end
            wasSmaller = isSmaller;
        end % otherwise it's just a spurious constant value along a sloped region.
        constStart = 0;
    elseif constStart==0 & isConstant
        constStart = i;
    end
end

% delete extra points
x(idx:end) = [];
y(idx:end) = [];

if nargout<2
    x(2,:) = y(1,:);
end

⌨️ 快捷键说明

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