【问题标题】:The simplest way to cut off unnecessary dots in octave/matlab在octave / matlab中切断不必要的点的最简单方法
【发布时间】:2017-08-25 03:30:45
【问题描述】:

我将点坐标 (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”参数。

【问题讨论】:

    标签: matlab octave data-mining


    【解决方案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)
    

    然后您可以从这个包络中添加/减去常数,使其沿 y 轴移动。

    【讨论】:

    • 好的,如果您正在寻找 Octave 解决方案,则不应为 Matlab 标记该问题,除非您特别要求与两者兼容的东西。
    【解决方案2】:

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

    你可以找到导数符号等于一的正峰

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

    【讨论】:

    • 所以,它不会切断我不需要的峰
    【解决方案3】:

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

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

    【讨论】:

    • 不幸的是,我在 gimp 中画了红线
    猜你喜欢
    • 2011-01-08
    • 2016-10-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2012-06-26
    • 2015-03-05
    • 2014-11-30
    相关资源
    最近更新 更多