找到正弦曲线的山峰和山谷

30视图(30天)
你好,我有一个代码读取一个文件,并将它转换成一个图,进而应用去趋势过滤器。然而,这是不够的,我需要知道这个新的图的高峰和低谷,然后减去从高峰到低谷值为正常曲线。我试图找到它与findpeaks但它不工作。我能怎么做?
函数startupFcn(应用)
数据= readmatrix (“ensaios_controlo.xlsx”,“表”,“注意”);
time_control =数据(:,2);
strain_control =数据(:,3);
t_control =秒(time_control);
t_control。格式=“hh: mm: ss”;
情节(app.UIAxes t_control strain_control)
s = rms (strain_control);
app.RMS_controlEditField.Value = s;
结束
%按钮推功能:FileButton
函数FileButtonPushed(应用程序、事件)
(名称,路径)= uigetfile (“.xlsx”,“选择文件”);
app.file = fullfile(路径、名称);
data_2 = readmatrix (app.file,“表”,“无题”);
时间= data_2 (:, 2);
应变= data_2 (: 3);
x =秒(时间);
x。格式=“hh: mm: ss”;
d = rms(应变);
app.RMSEditField.Value = d;
如果(1342 < d) & & (d < 1483)
对话框(“不需要分析”。,“非模态”);
其他的
app.TabGroup.SelectedTab = app.DataTab;
情节(app.UIAxes3 x,应变,“r”);
yline (app.UIAxes2, 0)
yline (app.UIAxes2, -2800);
结束
结束
%按钮推功能:AnalyseButton
函数AnalyseButtonPushed(应用程序、事件)
data_2 = readmatrix (app.file,“表”,“无题”);
时间= data_2 (:, 2);
应变= data_2 (: 3);
strain_2 =去趋势(应变、6);
x =秒(时间);
x。格式=“hh: mm: ss”;
d = rms(应变);
app.RMSEditField.Value = d;
繁荣正义党= findpeaks(应变);
findpeaks(应变);
pks_v = findpeaks(应变);
findpeaks(应变);
如果(1342 < d) & & (d < 1483)
对话框(“不需要分析”。,“非模态”);
其他的
app.TabGroup.SelectedTab = app.AnalyseTab;
情节(app.UIAxes2 x,应变,“r”);
持有(app.UIAxes2“上”);
情节(app.UIAxes2 x, strain_2“b”);
yline (app.UIAxes2, 0)
yline (app.UIAxes2, -2800);
结束
结束
5个评论
dpb
dpb 2023年4月13日
app.file =“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/1353474/provete_15_seco.xlsx”;
data_2 = readmatrix (app.file,“表”,“无题”);
时间= data_2 (:, 2);
应变= data_2 (: 3);
strain_2 =去趋势(应变、6);
x =秒(时间);
x。格式=“hh: mm: ss”;
d = rms(应变);
app.RMSEditField.Value = d;
繁荣正义党= findpeaks(应变);
findpeaks(应变);
pks_v = findpeaks(应变);
findpeaks(应变);
如果(1342 < d) & & (d < 1483)
对话框(“不需要分析”。,“非模态”);
其他的
% app.TabGroup.SelectedTab = app.AnalyseTab;
情节(x,应变,“r”);
持有
情节(x, strain_2,“b”);
yline (0)
yline (-2800);
结束
我们做什么呢? ? ?
现在解释一下,具体地说,你想做的事情。它肯定会帮助提供一些背景问题的人至少有一半的理解背后的阴谋——通常这是一个帮助制定解决方案;知道最终的目标和为什么。

登录置评。

接受的答案

马修•诺伊
马修•诺伊 2023年4月13日
你好 @Maria Ines
到目前为止我理解你想要紧张情节都最高的山峰在y = 0,就像在您的参考数据文件(ensaios_controlo.xlsx)
这是我的建议,没有我不使用findpeaks这一次……我更喜欢peakseek哪个更简单和更快的和这里的工作很好(一个无需用脑的事几乎)
您可以访问在FEX页面,
或者只是使用下面提供的代码
同时,不需要做任何初步消除趋势,你可以跳过。
结果是新的红色线,看到它所有的山峰与y = 0
缩放:
代码:
data_2 = readmatrix (“provete_15_seco.xlsx”,“表”,“无题”);
时间= data_2 (:, 2);
应变= data_2 (: 3);
x =秒(时间);
x。格式=“hh: mm: ss”;
d = rms(应变);
app.RMSEditField.Value = d;
如果(1342 < d) & & (d < 1483)
对话框(“不需要分析”。,“非模态”);
其他的
% app.TabGroup.SelectedTab = app.AnalyseTab;
%的阴谋(x,应变,“r”);
%抓住
情节(x,应变,“b”);
yline (0)
yline (-2800);
持有
%转移压力,积极的高峰是在y = 0行
(loc, pks) = peakseek(应变);
x_peaks = x (loc);
yshift = interp1 (x_peaks pks x);
情节(x, yshift,“r”);
strain_3 =应变- yshift;
情节(x, strain_3,“m”);
结束
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
函数(loc, pks) = peakseek (x, minpeakdist minpeakh)
% FEX: https://fr.mathworks.com/matlabcentral/fileexchange/26581-peakseek?s_tid=srchtitle
% x是一个向量输入(一般timecourse)
% minpeakdist是山峰之间所需的最小距离(可选的,默认为1)
% minpeakh的最低身高峰值(可选)
%
% (c) 2010
Peter O’connor %
%彼得ed <点> <点> oconnor必备。gmail <点> com
如果大小(x, 2) = = 1, x = x ';结束
%找到所有极大值和关系
loc =找到(x (2: end-1) > = x (1: end-2) & (2: end-1) > = x(3:结束))+ 1;
如果输入参数个数< 2,minpeakdist = 1;结束%如果没有minpeakdist指定,默认为1。
如果输入参数个数> 2如果有一个minpeakheight %
loc (x (loc) < = minpeakh) = [];
结束
如果minpeakdist > 1
1
德尔= diff (loc) < minpeakdist;
如果~ (del),打破;结束
繁荣正义党= x (loc);
(服装、分钟)= min ([pks (del);繁荣正义党([假del])]);% #好< ASGLU >
deln =找到(del);
deln = [deln(分钟= = 1)deln(分钟= = 2)+ 1);
loc (deln) = [];
结束
结束
如果nargout > 1
繁荣正义党= x (loc);
结束
结束
7评论
马修•诺伊
马修•诺伊 2023年6月14日7:09
也许你只能减少的数据量和送我,所以你不需要邮编
应该足够的数据修复代码

登录置评。

更多的答案(2)

Maria Ines
Maria Ines 2023年6月14日29
你好,
我没有问题,但我附上一个文件用更少的数据。
1评论
马修•诺伊
马修•诺伊 6月14日11点45分到2023
我tryng找到一个健壮的方法,既适合第一个数据文件提供了这新的一个——但是他们显示不同的看
你的第一个文件(provete_15_seco.xlsx)近三角形的信号是一个干净,没有工件或噪音。我们也可以看到山峰之间的距离只有几样品(蓝色点在曲线上)。
这样一个干净的信号peakseek好还没有给任何额外的参数值最小峰值距离和高度。
“新”数据文件(5 x250_cf_alterado.xlsx)给出了一个非常不同的图:
  • 很多数据点之间的山峰——如果我看更多的负峰值明显意识到,我将看到1000多样品2连续-山峰之间,这样的测量一直是由更高采样率(或以更低的频率测试完成)
  • 信号有点吵,distorded积极的一面
  • peakseek将很难选择唯一有效的山峰如果我们不帮助他通过定义一个适当的值minpeakdist, minpeakh——现在的风险是,我们可能需要调整这些参数不同的信号,例如我们峰之间的距离,如果信号质量就像第一个或第二个数据文件
  • 所以这将是混乱的调整太多参数数据是什么样子的,我们需要一些简单的和健壮
变焦
现在我的工作是找到“神奇”的工具,它可以处理两个数据集,而无需“曲调”太多的参数....

登录置评。


Maria Ines
Maria Ines 2023年6月14日17
你好,
好的,我明白了。我不能把第一个数据的过滤器文件我发送第二个文件,因为数据是不同的。
我能帮什么忙吗?什么样的参数你需要知道的魔法公式吗?
如果是简单的,你可以找到这些数据的魔法公式(5 x250_cf_alterado.xlsx)但有同样的目标,即高峰和它们设置为0。
还有一个问题,我不知道您所见,Ch2 CH1有对称的值。过滤器还必须能够做出这种调整高峰值时是正面和负面的。
我不知道我是否说清楚了……
任何问题,只是说。
2的评论
马修•诺伊
马修•诺伊 2023年6月14日14:50
忘了附件( peakfinder )
现在你有它!

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!