如何用matlab找出一组离散数据中的峰值
对于一组离散数据,我们经常需要找出其中的峰值,如下一组离散数据:
x = [1 2 3 4 3 2 1 5 8 9 17 12 11 5 3 2 1 7 1]
为了更直观显示,画出数组x的图。可以看出共有三个峰值,有两个问题:
1、如何找出所有的峰值
这个比较简单,使用matlab中的函数
[num loc] = findpeaks(x)
便可以轻松搞定,其中num找出的所有峰值,loc为峰值对应的位置。
2、如何找出峰值里面最大的两个呢
我们已经找出的所有峰值点是一个二维数组,一维是峰值数据,另一维是峰值数据对应的位置。因此我们主要对这个二维数据进行操作。
简而言之,便是从找出的峰值数组中使用max函数找出第一组最大的峰值及其位置,这样便完成了最大的峰值寻找,包括其数据和位置。
然后在所有峰值点组成的二维数组中,将最大峰值覆盖为一个很小的数值,使得不影响对第二大峰值的寻找。
接下来,再次使用max函数在剩下的峰值中寻找最大值,找出第二大峰值数据,及其对应的位置。
总的代码如下
clear allclose allclc%%x = [1 2 3 4 3 2 1 5 8 9 17 12 11 5 3 2 1 7 1] %需要找出两个最大峰值的数据,数据中共有三个峰值plot(x)[num loc] = findpeaks(x)%寻找出全部峰值[a_num,a_loc] = max(num)%在全部峰值里面找出最大的一个a_num,包含其位置a_loclocation_in_x_1 = loc(a_loc) %最大的峰值对应的位置num(a_loc) = 0%在找出的全部峰值数组中,将最大的峰值赋值为0num_del_max = num[b_num,b_loc] = max(num)%找剩下的峰值中的最大值location_in_x_2 = loc(b_loc) %找第二大的峰值对应的位置
仿真结果
x =
1234321589 17 12 11532171
num =
4 177
loc =
4 11 18
a_num =
17
a_loc =
2
location_in_x_1 =
11
num =
407
num_del_max =
407
b_num =
7
b_loc =
3
location_in_x_2 =
18
拿着代码跑一下,你就什么都明白啦!
再送你一套写论文神器,让你 不再因为敲公式而烦恼!
神器