【发布时间】:2015-09-29 05:10:52
【问题描述】:
我想在第一步中计算实时信号是否通过了某些阈值。在第一步中,我想检测真实信号是否低于这些阈值(以便检测信号中的峰值)。我的 Matlab 代码:
k=1;
t = 1;
l=1;
for i =1:length(sm) //sm my signal.
if (sm(i) > 0.25)
first(k) = i;
k = k+1;
if (sm(i) > 0.5)
second(t) = i;
t =t +1;
if (sm(i) > 0.75)
third(l) = i;
l = l+1;
end
end
end
end
例子:
![在此处输入图片描述][1]
我想计算信号通过和低于三个阈值0.25、0.5、0.75 的时间并返回这些窗口。基本上我的例子中的三个主要山峰。
基本上我想做的是使用 fastsmooth 功能和 findpeaks。
signalSmoothed = fastsmooth(sm,50); plot(signalSmoothed)
[max_pk1 max_pk2] = findpeaks(signalSmoothed);
find(max_pk1 >0.5)
inversex = 1.01*max(signalSmoothed) - signalSmoothed;
[min_pk1 min_pk2] = findpeaks(inversex);
find(min_pk1 >0.5)
为了只取所需的峰值,有哪些启发式方法?此外,depticted 图像是一个离线示例。一般来说,我想在线执行该技术。
编辑:我错误地将我想要的曲线结果定义为峰值,它是整个波,而不仅仅是最大值。
【问题讨论】:
-
您想单独检测它们还是必须满足所有条件才能将其定义为峰值?你也看过
findpeaks吗?如果您手工绘制样本曲线并标记您有兴趣找到的峰,这将是有帮助的 -
必须满足所有条件。在我的示例中,我只有通过条件,我正在尝试计算通过条件。是的,但是 findpeaks 返回许多值,因为信号包含很多局部最大值。
-
如果您的问题根本不清楚,请提供示例输入和输出数据,手动计算(例如手动)
-
在图表上用不同的颜色标记您要查找的点。
-
你的图表和你的代码有什么关系?例如,这些
0.25、0.5和0.75点在哪里?