MATLAB中将已经提取出的峰值点再筛选,只要上方图里圈出来信号里的一个峰值点,下方图里底下的峰值点不要
1个回答
展开全部
你可以让一条变化平缓的基线跟随着数据波动,基线可以将数据分成波峰、波谷两部分,只计算峰值即可。得到的效果是
代码如下:
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)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询