在octave / matlab中切除不必要的点的最简单方法

时间:2017-03-31 01:18:20

标签: matlab octave data-mining

我有{(1}}矩阵中的点(x,y)坐标,称为1206x2。命令data给出了这样的图片: data plot

我使用plot(data(:,1),data(:,2))命令在我的数据中找到了最大值:

findpeaks

然后在上一张图上绘制它们:

[pks,loc,smth] = findpeaks(data(:,2));

data with maximums

所以,问题是:切断我不需要的最大值的最简单方法是什么,我的意思是这张图片上红线以下的最大值: third plot UPD: 我现在发现的最好方法是使用“MinPeakDistance”参数。

3 个答案:

答案 0 :(得分:1)

尝试使用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)

envelope

然后您可以在此包络中添加/减去常量以沿y轴移动。

答案 1 :(得分:0)

在图中跳过点的最简单方法是使它们NaN。我将假设您有一个变量redline,其中包含您所有X值的Y值,以便redline(loc)将返回峰值位置的截止值。您可以忽略曲线之外的peaks

>>pks(pks < redline(loc)) = NaN
>>plot(mod(:,1),mod(:,2),mod(loc,1),pks,'o') 

答案 2 :(得分:0)

对于你所展示的信号,它实际上非常简单。如果我有一些类似于你的信号,

enter image description here

您可以找到导数符号等于1的正峰值

dy = [NaN, diff(y)];
pks = sign(dy) == 1;
t_pks = t(pks);
y_pks = y(pks);

enter image description here