请教MATLAB:如何得到信号变换后的峰值位置?
比如功率谱图,它有几个明显的峰值,如果不通过图来直接得到峰值对应的频率,而用程序来完成搜索峰值位置,那应该怎样实现呢?(注:事先并不知道有几个峰值,只知道是一个长序列,各点值已知)[ 本帖最后由 zhangnan3509 于 2007-7-4 15:37 编辑 ] 求该序列中的极值?
仔细观察一下你的图形中,这些幅值满足的条件,或者说特点,然后把它转换为程序语言,应该就可以了。 没仔细想过,可以试试寻找序列中前几个比序列均值大的数值
极值判断
可以判断该点值是否大与其左右几个点得知 请教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)
感觉意思就是拿每相邻两点来进行比较
这样就能明显得到那个点与相邻点比较
显得大了
那就是极值点吧
:) 很简单啊.用=max()得到第i给位置的最大,值是y. 下面是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]