回 帖 发 新 帖 刷新版面

主题:请帮忙解释一段求波峰小程序

function n = findpeaks(x)
% Find peaks.
% n = findpeaks(x)

n    = find(diff(diff(x) > 0) < 0);
u    = find(x(n+1) > x(n));
n(u) = n(u)+1;
******************************************
以上程序,首先find返回给n的值是两次差分符合的值——此处是符合条件的n序列值?(请回答)
u返回的是符合x(n+1) > x(n)的值——此处是返回序列值吗?(请回答)

最后一句n(u) = n(u)+1;没有办法理解


谢谢了,请教我一下,虽然查了HELP的find命令,但是此函数还是理解不了
谢谢

回复列表 (共2个回复)

沙发

n    = find(diff(diff(x) > 0) < 0);
这句是寻找峰值对应横坐标的
最内一个diff(x) > 0返回一个01序列,递增部分的为1,不递增部分为0
外层diff,返回的是一系列0和若干个-1,-1的个数和就是峰值的个数,-1对应的位置就是峰值的位置的前一个点
然后用个find找出这个峰值对应坐标

u  = find(x(n+1) > x(n));
这句是返回刚才所得到的位置的下一点是否是峰值的一个01串,其实这句只是起了个确保作用,因为x(n+1) > x(n))恒成立,所以可以去掉,下一句直接写成n=n+1。(如果谁能找出有出现x(n+1) <= x(n))的情况,希望能在这指出)

n(u) = n(u)+1;
由于diff返回的序列整体前移以为,即原得到的只是峰值点的前一个位置,加1补回。

板凳

find( x== max(x))

我来回复

您尚未登录,请登录后再回复。点此登录或注册