(MATLAB)一维信号峰值检测findpeaks

(MATLAB)一维信号峰值检测findpeaks

by HPC_ZY

一维信号波峰波谷检测,峰值、峰宽、到达时间计算。MATLAB自带的findpeaks函数能完成这一任务,在这里分享其基本用法与特殊用法。

基本介绍

关于波峰,峰值,峰宽

在这里插入图片描述

findpeaks函数用法

基本用法

  1. 无参数,简单输出
x = 0:0.1:2*pi;
y0 = sin(x);

% 这里的locs对应y0索引
[pks,locs] = findpeaks(y0);
plot(y0, '.-'),hold on
plot(locs, pks, 'ro'),hold off

在这里插入图片描述

  1. 指定x坐标
x = 0:0.1:2*pi;
y0 = sin(x);

% 这里的locs对应实际x坐标
[pks, locs] = findpeaks(y0, x);
plot(x, y0, '.-'),hold on
plot(locs, pks, 'ro'),hold off

在这里插入图片描述

  1. 绘制结果
    如果不设置输出,就会自动绘制结果
x = 0:0.1:2*pi;
y0 = sin(x);

findpeaks(y0, x);

在这里插入图片描述

  1. 完整输出+完整绘制
x = 0:0.1:2*pi;
y0 = sin(2*x);

% w为半(/)宽,p为凸高
[pks, locs, w, p] = findpeaks(y0, x);
% 加入如下参数即可绘制所有结果
findpeaks(y0, x, 'Annotate','extents');

在这里插入图片描述

特殊用法

为了简便,后续例子不再输出结果,直接绘制。

  1. 最小峰值高度
x = 0:0.1:2*pi;
y0 = sin(2*x)+x/2;

MPH = 2;
% 仅搜索高度MPH以上的峰
findpeaks(y0, 'MinPeakHeight', MPH, 'Annotate', 'extents'); 

在这里插入图片描述

  1. 指定最小峰凸高度
x = 0:0.1:2*pi;
y0 = sin(3*x)+((x-pi)/2).^2;

MPP = 1;
% 仅搜索高度MPH以上的峰
findpeaks(y0, 'MinPeakProminence', MPP, 'Annotate', 'extents'); 

在这里插入图片描述

  1. 指定相邻最小差
    指的是波峰点需要比左右相邻点高出一定值
x = 0:0.1:2*pi;
y0 = sin(x).^20;

TH = 0.05;
% 仅搜索从两侧峰值垂直下降超过MPP的峰
findpeaks(y0, 'Threshold', TH, 'Annotate', 'extents'); 

在这里插入图片描述
可以看出第一个峰的左邻点与峰值差太小

  1. 指定最小半宽
x = 0:0.1:2*pi;
y0 = sin(x.^2);

MINW = 5; 
% 搜索半宽大于MINW的峰
findpeaks(y0, 'MinPeakWidth', MINW, 'Annotate', 'extents'); 

在这里插入图片描述

  1. 指定最大半宽
x = 0:0.1:2*pi;
y0 = sin(x.^2);

MAXW= 5; 
% 搜索半宽小于MAXW的峰
findpeaks(y0, 'MaxPeakWidth', MAXW, 'Annotate', 'extents'); 

在这里插入图片描述

其他

  1. 后续还有,可能更新。
  2. 求峰谷只需要对信号取负,计算结果再取负就可以了。
findpeaks函数是Matlab中的一个功能强大的函数,用于寻找一维信号中的峰值。引用中提到了findpeaks函数的一个重要功能参数MinPeakDistance,它用于指定峰值之间的最小距离。在Matlab中,我们可以使用以下语法来调用findpeaks函数并设置MinPeakDistance参数:[pks,locs] = findpeaks(data,x,'MinPeakDistance',6)。其中,data是输入的一维信号数据,x是可选的x轴坐标,pks是找到的峰值的振幅,locs是找到的峰值信号中的位置。通过设置MinPeakDistance参数,可以确保找到的峰值之间至少相隔指定的最小距离。这对于在一维信号中准确找到峰值非常有用。引用中提到,Matlab的findpeaks函数的定义稍有不同,它允许峰值之间间隔一些最小距离,而不一定是其区域中的实际最大值。所以,在使用findpeaks函数时,我们可以根据需要选择合适的参数。引用中还提到,Matlab是一款功能强大、调用方便、高效的编程软件,findpeaks函数只是其中之一。在实践中,我们可以通过简单的调用findpeaks函数来寻找一维信号中的峰值,例如findpeaks(data)。这样可以快速地找到信号中的峰值,并进行后续的处理和分析。总结起来,findpeaks函数是Matlab中用于寻找一维信号峰值的函数,可以通过设置MinPeakDistance参数来控制峰值之间的最小距离。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值