AMPD峰值检测算法matlab实现

源代码地址(python实现):https://zhuanlan.zhihu.com/p/549588865

主函数改成matlab实现如下:

function [locs] = AMPD(data)
    p_data = zeros(size(data),'like',data);
    count = length(data);
    arr_rowsum = [];
    c=mod(count,2); %取余
    d=(count-c)/2; %取商
    for k = 1:d
        row_num = 0;
        for i = k:count-k-1
            if data(i+1) > data(i-k+1) && data(i+1) > data(i+k+1)
                row_num = row_num - 1;
            end
        end
        arr_rowsum = [arr_rowsum,row_num];
    end
    mm = min(arr_rowsum);
    min_index = find(arr_rowsum == mm);
    max_window_length = min_index;
    for k = 1:max_window_length
        for i = k:count-k-1
            if data(i+1) > data(i-k+1) && data(i+1) > data(i+k+1)
                p_data(i+1) = p_data(i+1) + 1;
            end
        end
    end
    locs = find(p_data == max_window_length);
end

猜你喜欢

转载自blog.csdn.net/qq_54875519/article/details/129112633
今日推荐