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)
但我需要的是过滤数组只保留局部最大值和局部最小值,这样我就可以得到很好的绘制曲线而没有噪声.
如果您想要最大值和最小值,只需使用:
\n\n[sig_min, idx_min] = min(signal);\n[sig_max, idx_max] = max(signal);\nRun Code Online (Sandbox Code Playgroud)\n\n但我无法准确理解你想要什么\xe2\x80\xa6,因为我的帐户是新的,我无法评论你的问题以试图更好地理解它。
\n\n\xe2\x80\x94 编辑 1:
\n\n好吧,现在我明白你想要什么了。我不知道为什么你有这个带有重复数字的数组,但假设你不想要它们,或者至少最好删除它们以找到局部最大值和最小值,你应该这样做:
\n\nsinal_norep = signal(find(diff(sinal)));\nRun Code Online (Sandbox Code Playgroud)\n\n其中 signal_norep 将是您的新数组,仅包含与上一个不同的值:
\n\n
现在我们可以通过执行以下操作来搜索该数组上出现局部最大值和最小值的索引:
\n\nminimas_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;\nRun Code Online (Sandbox Code Playgroud)\n\n以及他们的价值观:
\n\nsignal_maximas = signal_norep(maximas_idx);\nsignal_minimas = signal_norep(minimas_idx);\nRun Code Online (Sandbox Code Playgroud)\n\n就是这样x)
\n