MATLAB中将已经提取出的峰值点再筛选,只要上方图里圈出来信号里的一个峰值点,下方图里底下的峰值点不要

或者是否可以写一个循环让其中一个峰值与周围的有限个峰值作比较,然后选出最大值。接着往后循环。... 或者是否可以写一个循环让其中一个峰值与周围的有限个峰值作比较,然后选出最大值。接着往后循环。 展开
 我来答
兔子和小强
2018-04-24 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1441万
展开全部

你可以让一条变化平缓的基线跟随着数据波动,基线可以将数据分成波峰、波谷两部分,只计算峰值即可。得到的效果是

代码如下:

clear all;
close all;

%% Data
y = 2*sin(linspace(0, 40, 200)) + cumsum(rand(1, 200) - .5);
assert(numel(y) >= 2);
plot(y, '-o')
hold on

%% Process
get_max = (y(2) > y(1));

mid = y(1);  % 记录基线
mids = mid;  % 没用处,只是用来画基线图
v = y(1);    % 记录最大值
vi = 1;      % 记录最大值下标
alpha = .94; % 基线的平滑因子
for i = 2:numel(y)
    mid = mid * alpha + y(i) * (1-alpha);
    mids(end+1) = mid;
    
    if y(i) > mid
        if get_max
            if y(i) > v
                v = y(i);
                vi = i;
            end
        else
            v = y(i);
            vi = i;
            get_max = 1;
        end
    else
        plot(vi, v, 'ro');
        get_max = 0;
    end
end
plot(mids)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式