chaochao 发表于 2006-7-6 09:37

请教MATLAB:如何得到信号变换后的峰值位置?

比如功率谱图,它有几个明显的峰值,如果不通过图来直接得到峰值对应的频率,而用程序来完成搜索峰值位置,那应该怎样实现呢?(注:事先并不知道有几个峰值,只知道是一个长序列,各点值已知)

[ 本帖最后由 zhangnan3509 于 2007-7-4 15:37 编辑 ]

心灯 发表于 2006-7-7 23:28

求该序列中的极值?
仔细观察一下你的图形中,这些幅值满足的条件,或者说特点,然后把它转换为程序语言,应该就可以了。

FSI 发表于 2006-7-8 08:43

没仔细想过,可以试试寻找序列中前几个比序列均值大的数值

yongzhw 发表于 2006-11-2 13:53

极值判断

可以判断该点值是否大与其左右几个点得知

lsq001 发表于 2006-11-3 23:10

请教MATLAB:如何得到信号变换后的峰值位置?

比如功率谱图,它有几个明显的峰值,如果不通过图来直接得到峰值对应的频率,而用程序来完成搜索峰值位置,那应该怎样实现呢?(注:事先并不知道有几个峰值,只知道是一个长序列,各点值已知)

感觉是这样吧
以前好像看到过类似的编程思想
不是知道一个长序列么,假设有200个时间点(i=1:1:200)
对应的应该是一个2维的图吧
先假设最大值Mmax=0
i=1:1:200
如果M(i)>Mmax
那么Mmax=M(i)
设定一个门槛值,比如为最大值的10%
即Mth=10%Mmax
i=1:1:100
如果M(i+1)>Mth并且M(i+1)-M(i)>Mth
那么Mmax=M(i+1)

或者
如果M(i+1)<-Mth并且M(i+1)-M(i)<-Mth
那么Mmax=M(i+1)

感觉意思就是拿每相邻两点来进行比较
这样就能明显得到那个点与相邻点比较
显得大了
那就是极值点吧
:)

kangxinghao 发表于 2006-11-6 20:20

很简单啊.用=max()得到第i给位置的最大,值是y.

多情清秋 发表于 2006-11-7 02:15

下面是happy给的方法

data是你的数据,
find(diff(sign(diff(data)))==-2)+1
找到极大值的位置

find(diff(sign(diff(data)))==2)+1
找到极小值的位置

data(find(diff(sign(diff(data)))==-2)+1)和
data(find(diff(sign(diff(data)))==2)+1)
返回的是极大值和极小值
页: [1]
查看完整版本: 请教MATLAB:如何得到信号变换后的峰值位置?