Самый простой способ обрезать ненужные точки в октаве / матлабе
У меня есть координаты точек (х, у), хранящихся в 1206x2
матрица называется data
, Команда plot(data(:,1),data(:,2))
дает эту картину:
Я нашел максимумы в моих данных с findpeaks
команда:
[pks,loc,smth] = findpeaks(data(:,2));
И затем нанесите их на предыдущий график:
plot(mod(:,1),mod(:,2),mod(loc,1),pks,'o')
Итак, вопрос: какой самый простой способ обрезать максимумы, которые мне не нужны, я имею в виду максимумы ниже красной линии на этой картинке: UPD: лучший способ, который я нашел на данный момент, это использовать параметр "MinPeakDistance".
3 ответа
Попробуйте использовать envelope
встроенная функция:
% generate signal
x = 1:200;
y = x.*sin(x/5).*sin(3*x);
% get its envelope
npeak = 2;
[yupper,ylower] = envelope(y,npeak,'peak');
plot(x,y,x,yupper)
и затем вы можете просто добавить / вычесть постоянную из этого конверта, чтобы сместить ее вдоль оси Y.
Для сигнала, который вы показали, это на самом деле довольно просто. Если у меня есть сигнал, похожий на ваш,
Вы можете найти положительные пики, где знак производной равен единице
dy = [NaN, diff(y)];
pks = sign(dy) == 1;
t_pks = t(pks);
y_pks = y(pks);
Самый простой способ пропустить точки на графике - это сделать их NaN
, Я собираюсь предположить, что у вас есть переменная redline
со значениями Y для всех значений X у вас так, что redline(loc)
собирается вернуть отсечку в местах пиков. Вы можете игнорировать peaks
за кривой как:
>>pks(pks < redline(loc)) = NaN
>>plot(mod(:,1),mod(:,2),mod(loc,1),pks,'o')