octave/matlab 最简单的剪掉不需要的点的方法

The simplest way to cut off unnecessary dots in octave/matlab

我将点 (x,y) 的坐标存储在名为 data1206x2 矩阵中。命令 plot(data(:,1),data(:,2)) 给出了该图片:

我使用 findpeaks 命令在我的数据中找到了最大值:

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

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

plot(mod(:,1),mod(:,2),mod(loc,1),pks,'o')

所以,问题是:什么是最简单的方法来切断我不需要的最大值,我的意思是这张图片上红线以下的最大值: 更新: 我现在找到的最好方法是使用 "MinPeakDistance" 参数。

在图中跳过点的最简单方法是使它们 NaN。我将假设您有一个变量 redline,其中 Y 值代表您拥有的所有 X 值,这样 redline(loc) 将达到 return 峰值位置的截止值。您可以忽略曲线以外的 peaks 为:

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

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

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

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

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

然后你可以 add/subtract 从这个包络中取常数来沿 y 轴移动它。