主要内容

峰值分析

这个例子展示了如何执行基本的峰值分析。它将帮助您回答以下问题:我如何找到信号的峰值?如何测量峰与峰之间的距离?我如何测量一个受趋势影响的信号的峰值幅度?如何在嘈杂信号中找到峰值?如何找到局部极小值?

寻找Maxima或Peaks

苏黎世太阳黑子相对数测量了太阳黑子的数量和大小。使用findpeaks函数查找峰值的位置和值。

负载sunspot.dat年=太阳黑子(:1);relNums =太阳黑子(:,2);findpeaks (relNums,年)包含(“年”) ylabel (“太阳黑子数量”)标题(“找到所有峰”

图中包含一个坐标轴。标题为“查找所有山峰”的轴包含2个类型为line的对象。

上面的图显示了300年来太阳黑子的数量,并标记了探测到的峰值。下一节将展示如何测量这些峰之间的距离。

测量峰间距离

信号的峰值似乎以一定的间隔出现。然而,有些山峰彼此非常接近。的MinPeakProminence属性可以用来过滤掉这些峰值。考虑在太阳黑子数大于40的情况下,在太阳黑子数大于40的情况下,太阳黑子数大于40的情况。

findpeaks (relNums,年,“MinPeakProminence”, 40)包含(“年”) ylabel (“太阳黑子数量”)标题(“找到著名的山峰”

图中包含一个坐标轴。标题为“找到突出的山峰”的轴包含2个线条对象。

以下柱状图显示了峰值区间在各年的分布情况:

figure [pks, locs] = findpeaks(relNums,year,“MinPeakProminence”, 40);peakInterval = diff (loc);直方图(peakInterval)网格包含(“间隔年”) ylabel (发生的频率)标题(“峰值间隔(年)直方图”

图中包含一个坐标轴。标题为“峰值间隔直方图(年)”的坐标轴包含一个直方图类型的对象。

AverageDistance_Peaks =意味着(diff (loc))
AverageDistance_Peaks = 10.9600

分布表明,大部分峰值间隔在10 ~ 12年之间,表明信号具有周期性。此外,两次太阳活动高峰之间10.96年的平均间隔与已知的11年太阳黑子活动周期相吻合。

在截断或饱和信号中寻找峰值

你可能想把平的峰视为峰或排除它们。在后一种情况下,最小偏移被定义为峰值与其相邻峰之间的幅值差,使用阈值财产。

负载clippedpeaks.mat数字%在第一个图中显示所有的峰值斧子(1)=次要情节(2,1,1);findpeaks (saturatedData)包含(“样本”) ylabel (“振幅”)标题(“检测饱和峰”%指定第二个地块的最小偏移量斧子(2)=次要情节(2,1,2);findpeaks (saturatedData“阈值”(5)包含“样本”) ylabel (“振幅”)标题(“滤除饱和峰值”链接并放大以显示更改linkaxes (ax (1:2),“xy”轴(ax,[50 70 0 250])

图中包含2个轴。标题为“检测饱和峰”的轴1包含2个线型对象。标题为“滤除饱和峰”的轴2包含2个类型为line的对象。

第一副图显示,在一个平坦的峰,上升边被检测为峰。第二个子图显示,指定一个阈值可以帮助拒绝平坦的峰值。

测量峰值的振幅

这个例子显示了心电信号的峰值分析。心电图是一种随时间变化的心脏电活动的测量方法。该信号是由附着在皮肤上的电极测量的,并且对由于运动伪影造成的电源干扰和噪声等干扰很敏感。

负载noisyecg.matt = 1:长度(noisyECG_withTrend);图绘制(t, noisyECG_withTrend)标题(“趋势信号”)包含(“样本”);ylabel (“电压(mV)”)传说(嘈杂的ECG信号的网格)

图中包含一个坐标轴。标题为“带有趋势的信号”的轴包含一个类型为line的对象。这个对象表示有噪声的心电信号。

消除趋势数据

上面的信号显示了一个基线偏移,因此不代表真实的振幅。为了去除趋势,拟合一个低阶多项式到信号,并使用多项式去趋势。

(p, s,μ)= polyfit((1:元素个数(noisyECG_withTrend))”,noisyECG_withTrend 6);f_y = polyval (p(1:元素个数(noisyECG_withTrend))”[],μ);ECG_data = noisyECG_withTrend - f_y;%去趋势数据图绘制(t, ECG_data)网格ax =轴;轴([ax(1:2) -1.2 1.2])去趋势ECG信号的)包含(“样本”) ylabel (“电压(mV)”)传说(去趋势ECG信号的

图中包含一个坐标轴。标题为“去趋势心电图信号”的轴包含一个类型为line的对象。该对象表示去趋势心电图信号。

去趋势后,找到QRS复峰,这是心电信号中最突出的重复峰。QRS复合体对应于人类心脏的左右心室的去极化。它可以用来确定病人的心率或预测心功能异常。下图显示了心电信号中QRS复波的形状。

寻找兴趣高峰的阈值

QRS系统由三个主要组成部分组成:Q波,R波,S波.R波可以通过超过0.5 mV的阈值峰检测到。注意,R波被超过200个样本分开。使用此信息通过指定“MinPeakDistance”来删除不需要的峰值。

[~, locs_Rwave] = findpeaks (ECG_data,“MinPeakHeight”, 0.5,...“MinPeakDistance”, 200);

对于横波的检测,要找到信号中的局部极小值,并适当地应用阈值。

求信号的局部极小值

局部极小值可以通过在原始信号的反方向上寻找峰值来检测。

ECG_inverted = -ECG_data;[~, locs_Swave] = findpeaks (ECG_inverted,“MinPeakHeight”, 0.5,...“MinPeakDistance”, 200);

下图显示了信号中检测到的R波和S波。

图保存情节(t, ECG_data)情节(locs_Rwave ECG_data (locs_Rwave),“房车”“MarkerFaceColor”“r”)情节(locs_Swave ECG_data (locs_Swave),“rs”“MarkerFaceColor”“b”)轴([0 1850 -1.1 1.1])网格传奇(心电信号的R波的' S波)包含(“样本”) ylabel (“电压(mV)”)标题(噪声心电信号中的R波和S波

图中包含一个坐标轴。噪声心电信号中以R波和S波为标题的轴包含3个线型对象。这些物体代表心电信号,R波,S波。

接下来,我们试着确定Q波的位置。当Q波被噪声掩埋时,对峰值进行阈值化以定位Q波会导致检测到不必要的峰值。我们先对信号进行滤波,然后找出峰值。采用Savitzky-Golay滤波去除信号中的噪声。

smoothECG = sgolayfilt (ECG_data 7 21);图绘制(t ECG_data“b”t smoothECG“r”网格)包含(“样本”) ylabel (“电压(mV)”)传说(嘈杂的ECG信号的“过滤信号”)标题(“滤波噪声心电信号”

图中包含一个坐标轴。以滤波噪声心电信号为标题的轴包含2个线型对象。这些对象分别表示噪声心电信号和滤波信号。

我们对平滑信号进行峰值检测,并使用逻辑索引来查找Q波的位置。

[~, min_locs] = findpeaks (-smoothECG,“MinPeakDistance”, 40);峰值在-0.2mV和-0.5mV之间locs_Qwave = min_locs(smoocg (min_locs)>-0.5 & smoocg (min_locs)<-0.2);图保存情节(t, smoothECG);情节(locs_Qwave smoothECG (locs_Qwave),“rs”“MarkerFaceColor”‘g’)情节(locs_Rwave smoothECG (locs_Rwave),“房车”“MarkerFaceColor”“r”)情节(locs_Swave smoothECG (locs_Swave),“rs”“MarkerFaceColor”“b”网格)标题(“信号的阈值峰值”)包含(“样本”) ylabel (“电压(mV)”) ax =轴;轴([0 1850 -1.1 1.1])光滑的ECG信号的“Q波”非线性波的' S波

图中包含一个坐标轴。以信号中阈值峰值为标题的轴包含4个类型为line的对象。这些对象代表平滑的心电信号,Q波,R波,S波。

上图显示了在噪声心电信号中成功检测到QRS复波。

噪声信号与平滑信号之间的误差

注意原始信号和去趋势滤波信号的QRS复波之间的平均差异。

%极值[val_Qwave, val_Rwave, val_Swave] = deal(smoothECG(locs_Qwave), smoothECG(locs_Rwave), smoothECG(locs_Swave));mean(((noisyECG_withTrend(locs_Qwave) - val_Qwave)))
meanError_Qwave = 0.2771
mean(((noisyECG_withTrend(locs_Rwave) - val_Rwave)))
meanError_Rwave = 0.3476
meanError_Swave = mean((noisyECG_withTrend(locs_Swave) - val_Swave)))
meanError_Swave = 0.1844

这证明了对噪声信号去趋势对于有效的峰值分析是至关重要的。

峰值特性

一些重要的峰值特性包括上升时间、下降时间、上升电平和下降电平。对心电信号中的每个QRS复形计算了这些性质。这些属性的平均值如下图所示。

avg_riseTime =意味着(locs_Rwave-locs_Qwave);平均上升时间avg_fallTime =意味着(locs_Swave-locs_Rwave);平均下降时间%avg_riseLevel =意味着(val_Rwave-val_Qwave);%平均上升水平avg_fallLevel =意味着(val_Rwave-val_Swave);%平均下降水平smoothECG helperPeakAnalysisPlot (t,...locs_Qwave、locs_Rwave locs_Swave,...val_Qwave、val_Rwave val_Swave,...avg_riseTime avg_fallTime,...avg_riseLevel avg_fallLevel)

图中包含一个坐标轴。心电信号中具有qrs复型的轴包含行、文等类型的11个对象。这些对象代表QRS-Complex, Peak, Minima。

另请参阅