峰锐化算法笔记

在这里插入图片描述


作者:ShownSun
工作室:时沿科技


峰锐化算法笔记

  采用了峰值锐化算法,人为地提高了峰值的视在分辨率。在结果的信号中组成带宽被缩小,以便测量强度和位置,代价是降低信噪比

  其中最简单的一种算法是基于原始信号的加权和及其二阶导数的负值:

Rj = Yj - k2Y''

  其中Rj为增强的分辨率信号,Y为原始信号,Y”为Y的二阶导数,k2为用户选择的二阶导数权重因子。用户可以自行选择权重因子k2,从而在提高分辨率、降低信噪比和基线平整度之间做出最佳权衡。最佳选择取决于信号的宽度、形状和数字化间隔。该算法的应用结果如右图所示。组成带宽被人为地缩小,以便测量强度和位置。信噪比降低了,但可以通过平滑来调节,但代价是降低了锐化。然而,这种技术将是有用的,只有当重叠的峰值而不是信噪比是限制因素的时候。

  这项技术已经在各种形式的光谱学和色谱法中使用了许多年(参考文献74-76),甚至在某些情况下还使用了模拟电子技术。在数学上,这种方法是收敛的泰勒级数展开的简化版,其中只取展开中的偶阶导数项,其系数符号交替。上面的例子是包含前两项的最简单的形式——原始峰及其负的二阶导数。通过添加一个四阶导数项,加上两个可调因子k2和k4,可以得到更好的结果:

Rj = Yj - k2Y " + k4Y " "

  其中Y“和Y”分别是Y的二阶和四阶导数,结果是高斯峰的宽度减少了21%,如左图(Matlab/Octave脚本),洛伦兹峰的宽度减少了60%。这就是上面重叠峰示例中使用的算法。(可以添加一个六阶导数项,但是级数收敛很快,结果只得到了微小的改进,代价是增加了三个可调因子的复杂性)。

  导数权重因子不存在普遍的最优值;这取决于您认为峰锐化和基线平整度之间的最佳权衡。然而,对于高斯峰,一个好的起点是k2= W2/32和k4 = W4/900,对于洛伦兹峰,k2=W2/4和k4 = W4/600,其中W是锐化前峰的半宽度(FWHM),单位为x。有了这些加权因子,高斯峰的宽度将减少21%,得到的峰值仍然适合高斯模型,其拟合误差小于0.3%,R2为0.9999(也就是说,非常接近完美拟合)。对于洛伦兹原形状,峰宽减少了3倍,但结果峰符合高斯模型,其拟合误差较大,为1.15%,R2为0.9966。更大的k值将导致更窄的峰值,但在峰值两侧的基线将显示更明显的负过冲。 下面描述的软件帮助选择最佳程度的锐化。注意,二阶和四阶导数的K因子随着分别提高到2次和4次幂的宽度而变化,因此它们可以在一个非常大的数值范围内变化,用于不同宽度的峰值。因此,如果峰值宽度在信号中变化很大,可以使用分段和梯度版本的这种方法,以便锐化可以针对信号的每个区域进行优化(见下文)。

一阶导数对称

  使用正确的一阶导数权重因子k1,结果是一个对称的高斯分布,其宽度大大小于原始的宽度(橙色线);事实上,它正是应用了指数卷积的基本高斯分布(参考文献70,71)。假设原始信号的信噪比足够好,通过上述偶导数技术,可以进一步锐化由此产生的对称峰值Sj。(如果EMG向左倾斜,其导数的负值将被添加)。此外,这似乎是一个普遍的行为,它同样适用于任何其他由指数卷积扩大的峰形,包括由两个单独的指数(即双指数)扩大的峰形,这很容易由两个不同taus的导数加法阶段处理。(参见下面的“双指数对称”)。

Sj = Yj + k1Y’

  一阶导数加权因子k1与峰形无关,只是等于指数时间常数(1/lambda)在某些公式中的EMG)。在实践中,k1必须通过实验来确定,这对于单个孤立峰来说是最容易做到的。简而言之,如果你让k1过高,在峰值之后,结果将低于基线。因此,很容易通过实验确定最优值;只要增加它,直到处理后的峰值低于基线后的峰值,然后减少它,直到基线是平的,如这个链接的GIF动画所示。如果一个阶段的导数加法没有达到目的,尝试下面描述的一个双指数例程。

  所有这些导数相加算法的一个有用性质是,它们不会改变峰值下的总面积,因为任何峰形信号的导数曲线下的总面积为零(负叶下的面积与正叶下的面积相抵消)。因此,这些技术可以帮助测量重叠峰下的面积。然而,问题是,锐化峰两侧的基线并不总是完全平坦的,即使实现了相邻峰的基线分辨率,也会留下附近峰的一些干扰。应用于洛伦兹峰的偶导数技术,约80%的峰面积包含在中心极大值中,而对于高斯峰,超过99.7%的峰面积包含在中心极大值中。

  由于微分和平滑都是线性技术,所以应用了叠加原理,锐化信号的振幅与原始信号的振幅成正比,这使得使用任何标准校准技术的定量分析应用成为可能。只要您将相同的信号处理技术应用到标准和样本上,一切都会正常工作。

  峰值锐化在自动峰值检测和测量中非常有用,可以提高检测微弱重叠峰的能力,这些重叠峰只出现在原始信号中。点击查看动画示例。峰锐化在测量重叠峰下的面积之前是有用的,因为测量完全分离的峰的面积更容易、更准确。

次幂定律

  一种更简单的峰锐化方法是简单地将每个数据点的n次幂大于1(文献61,63)。高峰的影响是改变形状,本质上伸出的最高峰值的中心区域更大的振幅,将更多的重量在峰值附近的点,导致更近高斯峰的形状(因为大多数峰附近的形状局部高斯峰最大)和小峰宽度宽度减少根号)。该技术由Matlab/Octave脚本PowerLawDemo演示。m,如图所示,它绘制了功率p=1到7的噪声高斯,峰值高度归一化为1.0,表明随着功率的增加,峰值宽度减小,噪声在基线上减小,在峰值上增大。由于这个过程不会移动峰的位置,因此峰的分辨率(定义为峰间距与峰宽之比)增加了。在右边的图中,蓝线显示了两个略微重叠的峰。其他的线是将数据提升到n = 2,3,4的幂次,并将每一个高度归一化为1.00的结果。峰值宽度,用半宽度测量。m函数的1到4次幂分别为19.2、12.4、9.9和8.4个单位。对于高斯峰,根据归一化幂尖曲线下的面积可以计算出原始峰下的面积(文献63)。但是,这里有一个复杂的问题:对于两个重叠的高斯信号,将信号提升到一个幂的结果与添加两个功率变窄的高斯信号是不一样的:简单地说,对于n>1, an+bn与(a+b)n是不一样的。这可以通过脚本powerpeak图形化地演示m(图形),它将一个双高斯模型与两个重叠高斯的幂加和相吻合;随着功率n的增大,波峰逐渐变窄,波峰之间的山谷逐渐加深,但得到的信号不再是两个高斯函数之和,除非分辨率足够高。

  幂律法的其他一些局限性:

1、只有当兴趣的峰值达到一个明显的最大值时,它才会起作用(对于那些只形成肩膀的小的侧峰来说,它是无效的;山峰之间一定有山谷);

2、为达到最佳效果,基线必须为零;

3、对于有噪声的信号,信噪比会降低,因为更小的宽度意味着更少的数据点有助于测量(平滑可以有所帮助)。

4、该方法在信号中引入了严重的非线性,改变了峰高比(如上图所示),并使进一步的处理变得复杂,尤其是定量测量校准

  然而,有一种简单的方法来弥补这一非线性定量分析应用:原始数据后提出了n次方和山峰的高度和/或地区被测量,由此产生的峰值措施可以简单的1 / n次方,恢复原来的线性(但是,值得注意的是,不是斜率)中使用的校准曲线定量分析测量。(这工作,因为峰面积高度乘以宽度成正比,和峰高的力量改变了山峰的n次方的原始高度成正比,但峰值的宽度不是峰值高度恒定n的函数,因此转变峰的面积仍是原始高度)的n次幂成正比。通过Matlab/Octave脚本PowerLawCalibrationDemo对这一技术进行了定量演示。m(图)取重叠峰信号的n次幂,测量功率变窄峰的面积,然后取被测面积的1/n次幂,构造并使用校准曲线将面积转换成浓度。峰面积是通过垂直落差来测量的,使用半途点来标记峰之间的边界。该脚本模拟具有浓度的混合信号,您可以在第15行和第16行中指定浓度。您可以更改第14-22行中的幂和任何参数。结果表明,当4-西格玛分辨率(波峰间距与高斯波峰间距的4倍之比)在0.4左右时,功率法可以提高测量的精度。当峰宽大致相等,且两种浓度之比与建立校准曲线所依据的标准之比相差不大时,其准确度最高。注意,即使随机噪声(在第22行)为零,由于峰重叠对面积测量的影响,结果也不是完美的,这取决于混合物中两种成分的比例。

  自包含的函数PowerMethodDemo。m演示了测量小肩峰面积的功率法,小肩峰部分被一个强得多的干扰峰重叠(图示)。它显示了随机噪声的影响,平滑,和任何未校正的背景下的峰值。

联合锐化方法

  幂次法与前面讨论的导数法是相互独立的,并且可以与之结合使用。然而,由于幂次法是非线性的,所以运算的顺序很重要。信号指数展宽时,第一步为一阶导数对称化,第二步为偶次导数锐化,最后一步为幂函数法。这个顺序的原因是power方法依赖于,但不能在高度重叠的峰之间创建一个山谷。如果重叠不太严重,这种导数方法可以在峰之间产生谷。此外,在最后使用时,power方法降低了基线振荡的严重程度,而基线振荡是偶数阶导数锐化的残余(在洛伦兹峰上尤其显著)。Matlab脚本对gaussiandemo2进行了SharpenedGaussianDemo2.m(图形)和SharpenedLorentzianDemo2.m(图右)这一点分别为高斯和洛伦兹山峰,比较的结果even-derivative磨单独与even-derivative磨后跟幂法(和压片方法两个方面,尖锐的峰或乘以原峰)。对于高斯峰和洛伦兹峰原始形状,最终锐化结果符合高斯模型,以显示峰参数的变化。结果表明,两种方法组合得到的最终峰最窄,最接近高斯形状。当然,幂方法的线性问题,如果使用,仍然存在。

去卷积

  另一种可以提高重叠峰分辨率的信号处理技术是去卷积,本文对此进行了更详细的讨论。它适用于峰的原始形状由于某些展宽过程或作用而变宽或变得不对称的情况。如果展宽过程可以用数学方法描述或单独测量,那么从所观察到的展宽峰的去卷积在原则上可以提取出底层峰的形状。

Matlab和八度的分辨率增强

  自定义Matlab/八度函数锐化。m的形式是SharpenedSignal =锐化(signal,k1,k2,SmoothWidth),其中“signal”是原始的信号向量,参数k2和k4是二阶和四阶导数的权重因子,SmoothWidth是内置的smooth的宽度。分辨率增强信号在矢量“锐化信号”中返回。k1和k2的值决定峰锐度和基线平直度之间的平衡;这些值随着峰的形状和宽度而变化,应该根据自己的需要进行调整。对于高斯形状的峰,k2的合理值为PeakWidth2/25, k4的合理值为PeakWidth4/800(或Lorentzian峰的PeakWidth2/6和PeakWidth4/700),其中PeakWidth是峰的一半最大时的全宽度。由于锐化方法通常对信号中的随机噪声很敏感,因此通常需要应用平滑:Matlab/Octave处理信号。m函数允许在一个函数中应用锐化和平滑。

使相称m函数

  非对称峰的对称化是通过一阶导数的加权相加,由函数ySym = symmetrize(t,y,factor,smoothwidth,type,ends)来完成;“t”和“y”是自变量和因变量,“factor”是一阶导数权重因子,“smoothwidth”、“type”和“ends”是导数内部光滑的分段光滑参数。要执行分段对称,“因子”和“平滑宽度”可以是向量。在版本2中,是symmetrize。m只平滑导数,而不是整个信号。SymmetrizeDemo。m在symmetrize中运行所有5个例子。m帮助文件,每个在不同的图形窗口。

分段导数峰锐化

  如果峰值宽度在信号中变化很大,可以使用分段版本的segmented锐化。m,其中输入参数factor1、factor2和平滑宽度是向量。脚本DemoSegmentedSharpen。如右图所示,m利用该函数对四个高斯峰进行锐化,随着锐化程度的增加,四个高斯峰的峰宽从左向右逐渐增大,峰宽比原来减少了20% - 22%。DemoSegmentedSharpen2。m表示四个相同宽度的峰,它们的尖度逐渐增大。对于指数展宽在信号中变化的非对称峰,可以使用对称。上面描述的m函数也是一样的:指定“factor”和“smoothwidth”作为向量,就像分段锐化一样。如果峰宽和/或指数因子在信号中有规律地增加或减少,可以通过只给出段数(“numsegment”)、第一个值“startv”和最后一个值“endv”来简化这些向量的计算,如下所示:

  vstep = (endv-startv) / NumSegments;

  Vector= startv: vstep: endv;

  其中“vector”是用作symmetrize和segmented锐化函数的输入参数的向量。

双指数对称

  在Matlab/Octave中,用函数DEMSymm.m实现双指数对称。脚本DemoDEMSymm演示了这一点。m和它的两个变体(1,2),由高斯原峰产生两个重叠的双指数峰,然后调用函数DEMSymm。m来执行对称化,使用一个三层的加减括号技术来帮助您通过反复试验来确定两个权重因子的最佳值。在左边的例子中,有三条红色和三条绿色的线是由taus制作的,它们的差异是10%;在这种情况下,中间的三个括号线是最佳值。

  如果你试图用对称来对称一个不对称的峰。结果仍然是不对称的,有可能剩下的不对称至少是近似指数的,用不同的tau,在这种情况下,DEMSymm的应用。m可能会产生一个更对称的最终结果。

  ProcessSignal,一个Matlab/Octave命令行函数,对时间序列数据集x、y(列或行向量)执行平滑、微分和峰值锐化。“帮助ProcessSignal”类型。将处理后的信号作为与x形状相同的向量返回,不管y的形状如何iSignal(第7版)是一个可下载的交互式多用途Matlab信号处理函数,包括时间序列的分辨率增强信号,使用even-derivative方法(锐化函数)和一阶导数均衡方法,按键允许您调整权重因子和平滑连续,导数动态观察信号的影响。这个键可以打开或关闭偶导数分辨率增强功能。查看这里的代码或下载包含示例数据的ZIP文件以供测试。iSignal分别使用Y和U键计算高斯峰和洛伦兹峰的锐化和平滑设置,使用上面给出的表达式。只需使用平移和缩放键在上窗口中分离一个典型的峰值,在峰值测量模式下按P,然后按Y表示高斯峰,按U表示洛伦兹峰。你可以用F/V和G/B键调整锐化,用A/Z键调整平滑。(最佳设置取决于峰值的宽度,所以如果你的信号的峰值宽度相差很大,一个设置并不适用于所有的峰值。在这种情况下,可以使用分段锐化函数SegmentedSharpen.m)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShownSun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值