如何用matlab找出一组离散数据中的峰值

如何用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

拿着代码跑一下,你就什么都明白啦!

再送你一套写论文神器,让你 不再因为敲公式而烦恼!
神器

  • 14
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值