如何使用 Findpeaks 在 Matlab 中正确绘制山谷

Posted

技术标签:

【中文标题】如何使用 Findpeaks 在 Matlab 中正确绘制山谷【英文标题】:How to plot valleys correctly in Matlab using Findpeaks 【发布时间】:2017-02-08 23:40:23 【问题描述】:

我有一个向量 Ir,我正在尝试使用 findpeaks 函数来识别峰和谷。

但是,当我绘制山谷时,我得到以下图像,我做错了什么?

这是我的代码,我假设我在反转数据集时做错了什么?

[ypk,yt] = findpeaks( Ir,'MinPeakProminence', 5);
ypk2=[]
yt2=[]
for w = 1:numel(ypk)
    if ypk(w) >=0
        ypk2 = [ypk2;ypk(w)]
        yt2 = [yt2;yt(w)]
    end
end


%upsidedownIr = max(Ir)-Ir
upsidedownIr = -Ir
[ypk3,yt3] = findpeaks( upsidedownIr,'MinPeakProminence', 2);
ypk4=[]
yt4=[]
for w = 1:numel(ypk3)
    if ypk3(w) >=0
        ypk4 = [ypk4;ypk3(w)]
        yt4 = [yt4;yt3(w)]
    end
end


figure(1), clf

plot(time,Ir,'k-')
hold on
plot(time(yt2),ypk2,'r*')
plot(time(yt4),ypk4,'g*')

【问题讨论】:

好吧,我可以看到山谷的符号是错误的,它应该是负数,如果我的假设没有错,试试 -1*ypk4 谢谢,@Umar!你具体在哪里看到的?我问是因为我是新手,我不确定应该在哪里更改标志。抱歉,刚刚看到您的编辑! 完美@Umar!谢谢,请作为答案发布,我可以接受! 【参考方案1】:

你的谷的符号不正确,请否定它,否则值是正确的

最后尝试-1*ypk4,您将在代码中反转您的Ir,这会将谷值作为正值,因此您必须再次将它们变为负值以获得正确答案 或

ypk4 = -1*ypk4

【讨论】:

以上是关于如何使用 Findpeaks 在 Matlab 中正确绘制山谷的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中查找具有最小峰宽的峰 - 类似于 MATLAB 函数

如何在Matlab中找到正轴的平均峰值

音频信号中的峰值检测

如何去除时间序列中的特定谐波?

如何在没有matlab的labview中使用matlab源代码?

如何在从 Matlab 调用的 mex 函数中使用 Matlab 引擎