文档

峰值分析

这个例子展示了如何执行基本的峰值分析。它将帮助你回答这样的问题:我找到峰值信号如何?我如何测量峰之间的距离?我怎么衡量一个信号的峰值幅度影响的趋势?我怎么找到峰值在嘈杂的信号吗?我怎么找到局部最小值?

找到极大值或峰值

苏黎世太阳黑子数量相对措施太阳黑子的数量和大小。使用findpeaks函数来找到峰值的位置和价值。

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

上面的图显示了太阳黑子数目列表300多年和标签的检测峰值。下一节将展示如何衡量这些山峰之间的距离。

测量峰之间的距离

山峰似乎定期的信号。然而,一些山峰非常接近对方。的MinPeakProminence属性可以用来过滤掉这些山峰。双方考虑峰值下降了至少40相对太阳黑子数目之前遇到一个更大的价值。

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

下面的柱状图显示了峰值区间的分布:

图(pks, loc) = findpeaks (relNums,年,“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])

第一次要情节显示,在平坦的峰值,峰值检测到前沿。第二次要情节显示指定一个阈值可以帮助拒绝平峰。

测量振幅峰值

这个例子展示了峰值分析心电图(心电图)信号。心电图是心脏的电活动的措施。信号是通过测量电极接触皮肤和敏感电源干扰和噪声等干扰由于运动构件。

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

消除趋势数据

上面的信号显示了基线转移,因此并不代表真正的振幅。为了消除这一趋势,符合一个低阶多项式信号,利用多项式去趋势。

(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信号的)

消除趋势后,发现最突出的qrs波群重复峰值的心电图信号。qrs波群对应于左、右心室去极化的人类的心。它可以用来确定病人的心率或预测心脏功能异常。下面的图显示了一个心电信号的qrs波群的形状。

找到感兴趣的山峰的阈值

qrs波群由三个主要组件:q波性、非线性波,横波。R-waves可以检测到阈值峰值高于0.5 mv。注意,R-waves由超过200个样本。使用此信息来删除不需要的峰值通过指定“MinPeakDistance”。

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

对s波的检测,发现信号中的局部最小值和应用适当的阈值。

发现局部最小值的信号

局部最小值可以被找到的山峰在倒置的版本的原始信号。

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

下面的图显示了R-waves和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-waves”,“s”)包含(“样本”)ylabel (“电压(mV)”)标题(非线性波和横波在嘈杂的ECG信号的)

接下来,我们试着确定Q-waves的位置。阈值的峰值来定位Q-waves导致检测的峰值随着Q-waves埋在噪音。我们筛选信号,然后找到峰值。Savitzky-Golay过滤用于去除噪声信号。

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

我们对平稳信号执行峰值检测和使用逻辑索引找到Q-waves的位置。

[~,min_locs] = findpeaks (-smoothECG,“MinPeakDistance”,40);% -0.2 mv和-0.5 mv之间的峰值locs_Qwave = min_locs (smoothECG (min_locs) > -0.5 & smoothECG (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波性”,非线性波的,“横波”)

上面的图显示,嘈杂的心电图的qrs波群成功地检测到信号。

错误之间的吵闹和光滑的信号

注意之间的平均差异qrs波群在原始和去趋势过滤信号。

%值的极值[val_Qwave, val_Rwave val_Swave] =交易(smoothECG (locs_Qwave) smoothECG (locs_Rwave) smoothECG (locs_Swave));meanError_Qwave =意味着((noisyECG_withTrend (locs_Qwave) - val_Qwave))
meanError_Qwave = 0.2771
meanError_Rwave =意味着((noisyECG_withTrend (locs_Rwave) - val_Rwave))
meanError_Rwave = 0.3476
meanError_Swave =意味着((noisyECG_withTrend (locs_Swave) - val_Swave))
meanError_Swave = 0.1844

这表明有必要去趋势为有效峰值分析噪声信号。

峰值特性

一些重要的峰值特性包括上升时间、下降时间、提高水平,水平下降。这些属性计算为每个QRS-complexes的心电图信号。这些属性的平均值是显示在下图。

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)

另请参阅