谁能提供一个自动寻峰的算法

来源:百度知道 编辑:UC知道 时间:2024/07/07 07:10:58
一幅谱线图中有很多的峰位,有什么好的算法能够准确地找到各个峰位?C\C++\VC\VB的都行呀,最好给点注解。谢谢了.http://hiphotos.baidu.com/jiangshan2%5F0/pic/item/8c333ba44e9356ef9152ee26.jpg
答得好给追加分100分!

寻峰(Peaksearch)
现在还没有一种公认的适用于各种情况的寻峰算法,而人们的眼睛才是最好的寻峰工 具。为了处理各种不同情况下的寻峰,我们在程序中包含了4种自动寻峰方法,另外 还可以进行手动寻峰。
在寻峰(Peak)菜单下列有5中选项,前4项为自动寻峰,第5项为手动寻峰。将鼠标移 至所需选项后松开,程序就弹出寻峰控制窗口。在寻峰控制窗口中选定或输入寻峰参 数后,单击显示(Show)按钮,已经寻到的衍射峰上方出现一条竖线。如果寻峰结果不 理想,可以改变寻峰参数再试。甚至可以更换寻峰方式。得到满意结果后,点击确认 (OK)按钮。这时程序弹出波长设定窗口,在其中输入或选定适用波长后用鼠标点击确 认按钮(OK),程序提示是否要把寻峰结果存入文件,随后显示寻峰结果,给出包含衍 射峰角度、晶面间距、峰高、峰面积和半高宽的列表。

简单寻峰(SimplePeak)
简单寻峰是一种在相邻的衍射点中寻找极大点的寻峰方式。优点是计算简单,只要输 入寻峰点数和一个相对强度。这种算法在寻找不存在严重重叠的峰时很有用,而且得 出的衍射峰面积和半高宽也最为准确,但不能寻到处于肩膀上的峰。
在寻峰控制窗口中选定或输入寻峰点数(SelectPoints)和强度限制(IntensityLimit %)后即可寻峰。强度限制是指相对于衍射图中最强峰的相对强度,低于该强度的峰被 程序忽略。寻到的峰太多,可以增加寻峰点数和强度限制值。反之,则可以减小寻峰 点数和强度限制。

二阶导数寻峰(2ndDerivative)
利用二阶导数寻峰是比较常用的一种寻峰方式。它的工作原理是在峰位置上二阶导数 出现极小值。这种方式是我们推荐使用的寻峰方式。
利用二阶导数寻峰除了要设定寻峰点数和强度限制外,还有一个二阶导数限制 (DerivativeLimit
%)。二阶导数限制值越大,寻到的峰越少。其它操作于前述简单寻峰方式相同。

尝试寻峰(Test)
这是我们参照国外一些最新的算法自编的试验性的寻峰方法。它是根据数据点的变化 趋势同时考虑数据噪声水平确定峰位的。这种寻峰方式对处于肩膀上的峰也不敏感。 我们以后还要改进这一算法。
尝试