如何用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 all
close all
clc
%%
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_loc
location_in_x_1 = loc(a_loc) %最大的峰值对应的位置
num(a_loc) = 0 %在找出的全部峰值数组中,将最大的峰值赋值为0
num_del_max = num
[b_num,b_loc] = max(num) %找剩下的峰值中的最大值
location_in_x_2 = loc(b_loc) %找第二大的峰值对应的位置
仿真结果
x =
1 2 3 4 3 2 1 5 8 9 17 12 11 5 3 2 1 7 1
num =
4 17 7
loc =
4 11 18
a_num =
17
a_loc =
2
location_in_x_1 =
11
num =
4 0 7
num_del_max =
4 0 7
b_num =
7
b_loc =
3
location_in_x_2 =
18
拿着代码跑一下,你就什么都明白啦!
再送你一套写论文神器,让你 不再因为敲公式而烦恼!
神器