查找峰值和测量

在科学数据处理中,通常需要检测信号的峰值和测量它们的位置,高度,宽度,或者面积。一种有用方式实际上基于向下趋势导数峰值最大值过零点。但是真正的实验包含有随机噪声信号,仅仅因为噪声就会造成大量错误的过零。为了避免这个问题,这项技术描述为信号一阶导数的第一次平滑,在查找向下趋势过零点前,这使得只有这些一阶导数的过零点倾斜超过了一个明显最小值(斜率门限)在源信号点超过一个明显的最小值(幅度门限)。频谱图如下所示。

摘自http://terpconnect.umd.edu/~toh/spectrum/PeakFindingandMeasurement.htm

通过仔细调整平滑宽度,倾斜门限,和幅度门限。可能检测到仅包含理想峰值并且忽略太小、太宽、太窄的的峰值。另外这项技术能扩展来估计位置,高度和每一个峰之间的宽度,通过最小平均曲线拟合一段未平滑信号的邻近过零点。因此,即使过于平滑的一届导数任然是必要的,提供了可靠的却别噪声峰值,这些峰参数有曲线拟合提取,并不会因为平滑收到干扰,并且在信号中通过曲线拟合多次数据点,随机噪声的强度是被减少的。这些技术是能进行相当精确测量峰值的宽度和高度,如果峰的形状是高斯分布(或洛伦兹)大多数情况下是能精确测量峰宽度和面积。为了能在其他峰形状能沟进行精确测量,或者高度重叠峰,或者是峰叠加在同一个基线上,相关函数findpeaksb.m,findpeaksb3.m,findpeaksfit.m利用非线性迭代曲线拟合,使用可选择峰形状模型和基线相关模型。

这些子函数多个不同版本中获得:

(1)一个设置了命令行的matlab或octave,每一个描述的连接:

findpeaks

findpeaksxw,findpeaksG,findvalleys,findpeaksL,measurepeaks,findpeaksG2d,findpeaksb,findpeaksb3,findpeaksplot,findpeaksplotLpeakstats,findpeaksE,findpeaksGSS,findpeaksLSS,findpeaksT,findpeaksfit,autofindpeaks,和autopeaks.这些能被用于创建自定义脚本和函数。不要和matlab信号处理工具箱中的findpeaks函数混淆。这是完全不同的算法。

(2)一个内置的关键操作函数叫ipeak.m为了调整峰值检测判别相互作用去优化任意部分峰类型(仅matlab)。ipeak返回一个图像窗口并且使用简单设置关键命令减少屏幕刷新最小化重叠,最大化处理速度。

(3)一个设置传播表,可以在excel和OpenOffice格式中获得。

(4)matlab实时峰值检测用追加Y讨论。

http://terpconnect.umd.edu/~toh/spectrum/PeakFinder.zip

包含了findpeaksG.m并且他的变量,ipeaks.m和建议数据文件实例脚本用于测试。也可以下载ipeaks其他程序从http://www.mathworks.com/matlabcentral/fileexchange/11755-peak-finding-and-measurement

简单快速函数用于检测平滑峰或者预平滑的数据。

allpeaks.m allpeaks(x,y) 一个超简易峰检测x,y数据设置列出每个Y值并且两边都有更低的Y值。allvallys.m同样地检测谷值,列出每个Y值并且两边都有更高的Y值。peaksat.m(指定门限的峰)符号P=peaksat(x,y,threashold).这个函数检测每个Y值,(a)两边低于Y值并且(b)是一个上述指定的门限,返回一个2行n列矩阵P以及x和y每个峰的值,这里的n是检测到的峰的个数。

findpeaksx.m用于检测包含噪声数据中的峰值。

P=findpeaksx(x, y, SlopeThreshold, AmpThreshold, SmoothWidth, PeakGroup, smoothtype)
P=findpeaksxw(x, y, SlopeThreshold, AmpThreshold, SmoothWidth, PeakGroup, smoothtype)

简单快速命令行函数找出位置计数含噪声数据的正峰值。检测在向下趋势过数据峰值。在平滑一阶导数超过斜率门限和峰幅度超过幅度门限返回一列(在矩阵P中)包含峰值数和每一个封的测量位置及高度(并且是有变量findpeaksxw,和一半最大值得全宽决定,由halfwidth.m函数调用来决定)它能找到并且每秒统计超过10000个峰在一个非常大的信号里。这些数据通过findpeaksx函数这向量x和Y(x:独立变量,y:非独立变量)。其他参数是用户可调整的:

  • SlopeThreshold

一阶导数平滑的斜率,被用来找峰。这些区别是峰宽度的基础。这个参数的更大值将会忽略众多信号的特征。A 用初始值的原因是因为高斯峰是0.7*WidthPoints^-2,这宽度点数是一个峰一半宽的数据个数。

  • AmpThreshold

这些区别是峰高度的基础,任意峰的幅度低于这些值就会被忽略。

  • SmoothWidth

平滑函数在斜率别测量之前,应用这些数据。更大平滑宽度值将会忽略更小的,尖峰特征。这个值被设为1/2付鹏宽度一半的点数。

  • PeakGroup

顶部大概的点数(未平滑)这些被用于估计峰的高度如果这个值是1或2,y最大值的1或2是过零点作为峰高度的位置;如果peakGroup等于3或者更大,下一次n点平均值将会被用做峰高度值。为了尖刺或非常小的信号保持PeakGroup为1或2;为了宽信号或者噪声信号,使得PeakGroup大于噪声影响。

  • Smoothtype

平滑类型

=1 矩形(滑动平均或篷车)

=2三角形(双通滑动平均)

=3pseudo-Gaussian(三通滑动平均)

基础地,更高的值更多地减少高频噪声在指数更低时执行更慢。为了比较这些平滑的区别详见:

http://terpconnect.umd.edu/~toh/spectrum/SmoothingComparison.html

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值