[matlab学习记录04]提取周期性数据最大值最小值


前言

本文仅为学习matlab过程中的一些记录,奈何才疏学浅,如有错误希望各位大佬不吝赐教。

一、问题背景

本代码基于试验数据处理过程中需求所编写,目标在于求取鱼类摆尾幅度。如下图所示为鱼类运动过程中鱼尾的运动数据,横轴为时间,纵轴为距离,数据显示了鱼尾的周期性运动,图中的一个周期即为一次摆尾运动。
在这里插入图片描述
代码的要求即为识别处各个周期中的峰值与谷值,峰值与谷值之差即为鱼类摆尾运动的幅度。其关键点在于如何识别处各个周期的峰值、谷值。

二、代码

代码的主要思路为通过引入临时最大值tempMax,临时最小值tempMin来解决问题

代码如下:

%数据导入
clear all
clc
excel_path = 'C:\Users\Administrator\Desktop\excel\excel01.xlsx'; %填写相应excel文件路径
num=xlsread(excel_path);
t=num(:,1);
y=num(:,3);
n=length(y);
y_max=[];t_max=[];
y_min=[];t_min=[];
tempMax=-99999;
tempMin=99999;

%寻找峰值、谷值
for i=1:n-3
    if y(i)>y(i+1)&y(i)>y(i+2)&y(i)>y(i+3)&y(i)>tempMax
        if tempMax==-99999;
            y_max=[y_max;y(i)];
            t_max=[t_max;t(i)];
            tempMin=99999;
            tempMax=y_max;
        end
    end
    if y(i)<y(i+1)&y(i)<y(i+2)&y(i)<y(i+3)&y(i)<tempMin
        if tempMin==99999;
            y_min=[y_min;y(i)];
            t_min=[t_min;t(i)];
            tempMax=-99999;
            tempMin=y_min;
        end
    end
end
%结果可视化检验
plot(t,y,'b.-')%蓝色点线为原始数据点
hold on
plot(t_max,y_max,'r*')%红色*为峰值点
plot(t_min,y_min,'go')%绿色O为谷值点

%峰值谷值维度匹配
if length(y_max)>length(y_min)
    y_max(length(y_max))=[];
elseif length(y_max)<length(y_min)
    y_min(1)=[];
end
%求极差
R=y_max-y_min;
xlswrite('C:\Users\Administrator\Desktop\excel\excel_result',R);

峰值谷值结果如下
在这里插入图片描述

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值