前言
本文仅为学习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);
峰值谷值结果如下