如何仅提取和绘制数组的最小和最大峰值,-graph分析 - 使用Matlab或excel

Zal*_*oza 6 excel matlab vba excel-vba

我在做视频分析.
我得到的最终结果数组是这样的:

signal =

    Columns 1 through 7

       73960       73960       73960       73960       68102       68102       68102

  Columns 8 through 14

       68102       19187       19187       19187       19187       14664       14664

  Columns 15 through 21

       14664       14664       13715       13715       13715       13715       30832

  Columns 22 through 28

       30832       30832       30832       53031       53031       53031       53031

  Columns 29 through 35

       56897       56897       56897       16104       16104       16104       16104

  Columns 36 through 42

       15188       15188       15188       15188       13973       13973       13973
Run Code Online (Sandbox Code Playgroud)

注意:我得到的实际数组通常为600+

因此,当我绘制这个时,我得到非常糟糕的图形,所以我想过滤这个数组并且只保留**最大和最小峰值**局部最大值和最小值,以便图形具有更好的波浪

有没有办法用MATLAB做到这一点?

如果没有,那么我可以用excel吗?因为我通常将此数组保存到excel表中

0.1 68102
0.15    19187
0.2 14664
0.25    13715
0.3 30832
0.35    53031
0.4 56897
0.45    16104
0.5 15188
0.55    13973
0.6 21437
0.65    66950
0.7 65356
0.75    22562
0.8 14154
0.85    13938
0.9 20692
0.95    72823
1   69975
1.05    15328
1.1 14494
1.15    13681
1.2 14205
1.25    65278
1.3 63055
1.35    16999
1.4 14050
1.45    14245
Run Code Online (Sandbox Code Playgroud)

其中第1列是时间(y轴),第2列是振幅.(x轴)

我使用这个公式来计算局部最大值(感谢来自stackoverflow.com的brettdj)

=SUMPRODUCT(--(B2:B149>B1:B148),--(B2:B149>B3:B150))
Run Code Online (Sandbox Code Playgroud)

而这个公式来计算当地的最小值

=SUMPRODUCT(--(B2:B149<B1:B148),--(B2:B149<B3:B150))
Run Code Online (Sandbox Code Playgroud)

但我需要的是过滤数组只保留局部最大值和局部最小值,这样我就可以得到很好的绘制曲线而没有噪声.

Wer*_*ner 1

如果您想要最大值和最小值,只需使用:

\n\n
[sig_min, idx_min] = min(signal);\n[sig_max, idx_max] = max(signal);\n
Run Code Online (Sandbox Code Playgroud)\n\n

但我无法准确理解你想要什么\xe2\x80\xa6,因为我的帐户是新的,我无法评论你的问题以试图更好地理解它。

\n\n

\xe2\x80\x94 编辑 1:

\n\n

好吧,现在我明白你想要什么了。我不知道为什么你有这个带有重复数字的数组,但假设你不想要它们,或者至少最好删除它们以找到局部最大值和最小值,你应该这样做:

\n\n
sinal_norep = signal(find(diff(sinal)));\n
Run Code Online (Sandbox Code Playgroud)\n\n

其中 signal_norep 将是您的新数组,仅包含与上一个不同的值:

\n\n

左边是你的信号,右边是新信号

\n\n

现在我们可以通过执行以下操作来搜索该数组上出现局部最大值和最小值的索引:

\n\n
minimas_idx = find(signal_norep(2:end-1)<signal_norep(1:end-2) & signal_norep(2:end-1)<signal_norep(3:end))+1;\nmaximas_idx = find(signal_norep(2:end-1)>signal_norep(1:end-2) & signal_norep(2:end-1)>signal_norep(3:end))+1;\n
Run Code Online (Sandbox Code Playgroud)\n\n

以及他们的价值观:

\n\n
signal_maximas = signal_norep(maximas_idx);\nsignal_minimas = signal_norep(minimas_idx);\n
Run Code Online (Sandbox Code Playgroud)\n\n

就是这样x)

\n