主要内容

ピーク解析

この例では、基本的なピーク解析の実行方法を示します。これは次のような問題の解決に役立ちます。信号のピークはどのように検出するのか。ピーク間の距離はどのように測定するのか。トレンドに影響されている信号のピークの振幅はどのように測定するのか。ノイズを含む信号のピークはどのように検出するのか。局所的最小値はどのように検出するのか。

最大値またはの検出

チューリッヒ相対,太阳の数とさ両方を测定します。关数Findpeaksを使用し、位置とピークの値を検出します。

loadsunspot.dat年= sunspot(:,1);relnums = sunspot(:,2);findpeaks(relnums,年)xlabel(“年”)ylabel('Sunspot Number') 标题(“找到所有峰”)

图包含一个轴对象。The axes object with title Find All Peaks contains 2 objects of type line.

300年,,年表にまとめた太阳黒点のを示し示し示し,検出検出検出さされたピークピークをマークマークししたものですですです。。。次次次のははは,,,,,,,

ピーク間の距離の測定

信号のは一定间隔でいるよう见えます。しかししかし,距离が非常非常に近いピークピークががが。MinpeakProminenceプロパティを使い、これらのピークを除外できます。大きい値を検出する前に、両側で少なくとも相対黒点数が 40 外れているピークを検討します。

findpeaks(relnums,年,'MinPeakProminence',40) xlabel(“年”)ylabel('Sunspot Number') 标题('Find Prominent Peaks')

图包含一个轴对象。带标题的轴对象找到突出峰包含2个类型线的对象。

以下の,区间の分布をで示してい。。

figure [pks, locs] = findpeaks(relNums,year,'MinPeakProminence',40); peakInterval = diff(locs); histogram(peakInterval) gridXlabel('Year Intervals')ylabel('Frequency of Occurrence') 标题('Histogram of Peak Intervals (years)')

图包含一个轴对象。具有峰值间隔(年)标题直方图的轴对象包含类型直方图的对象。

AverageDistance_Peaks = mean(diff(locs))
AverageDistance_Peaks = 10.9600

分布は、ピーク区間の大半が 10 ~ 12 年の間にあり、信号に周期性があることを示しています。また、ピーク区間の平均値 10.96 年は既知の太陽の黒点活動周期 11 年と一致します。

切り捨てられた信号または飽和している信号のピーク検出

フラットなピーク考えたり,ピークピークしたり场合ががありますます。。后者后者后者のの,,ピークととそのそのそのすぐすぐすぐ近傍近傍の临界点プロパティで指定します。

loadclippedpeaks.matfigure% Show all peaks in the first plotax(1) = subplot(2,1,1); findpeaks(saturatedData) xlabel('Samples')ylabel('振幅') 标题('Detecting Saturated Peaks')%在第二个图中指定最小游览AX(2)=子图(2,1,2);findpeaks(饱和data,'临界点',5) xlabel('Samples')ylabel('振幅') 标题(“过滤饱和峰”)% link and zoom in to show the changeslinkaxes(ax(1:2),'xy')轴(AX,[50 70 0 250])

图包含2个轴对象。轴对象1带有标题检测饱和峰的对象包含2个类型线的对象。轴对象2带有标题过滤的饱和峰包含2个类型线的对象。

のサブ,ピークがな场合な,立ち上がりエッジとして検出検出ささされれれてているいるをを示し示しますます。2を示します。

ピーク振幅の测定

この例では、心電図 (ECG) 信号におけるピーク解析を示します。心電図は経時的な心臓の電気活動の測定値です。信号は皮膚に装着された電極で測定します。このため、電源干渉や動きによるアーチファクトなどのノイズに敏感です。

loadnoisyecg.matt = 1:length(noisyECG_withTrend); figure plot(t,noisyECG_withTrend) title(“信号有趋势”)xlabel('Samples'); ylabel(“电压(MV)”) legend('Noisy ECG Signal') 网格

图包含一个轴对象。带有标题信号的轴对象包含类型线的对象。该对象表示嘈杂的心电图信号。

データのトレンド除去

上記の信号はベースライン シフトであるため、真の振幅を表していません。トレンドを除去するために、信号を低次の多項式で近似し、その多項式を使用してデータのトレンド除去を行います。

[p,s,mu] = polyfit((1:numel(noisyECG_withTrend))',noisyECG_withTrend,6); f_y = polyval(p,(1:numel(noisyECG_withTrend))',[],mu); ECG_data = noisyECG_withTrend - f_y;% Detrend datafigure plot(t,ECG_data) gridax = axis; axis([ax(1:2) -1.2 1.2]) title(“破坏ECG信号”)xlabel('Samples')ylabel(“电压(MV)”) legend(“破坏ECG信号”)

图包含一个轴对象。The axes object with title Detrended ECG Signal contains an object of type line. This object represents Detrended ECG Signal.

トレンドを除去した後,心电图信号において繰り返し出現する最も突出したピーク波のQRS 群を検出します。QRS 群は、心臓の左右の心室の脱分極に対応しています。QRS 群は、患者の心拍数の測定や心機能の異常の予見に使用されます。次の図は、ECG 信号の QRS 群の波形を示しています。

対象ピーク用しきい値设定设定

QRS 群は 3 つの主要な成分から構成されています。Q 波、R 波、S 波r波波,ピークのしきい値値値ををををををより上することことことで検出検出検出できできできでき。。ますますます波200200サンプル200サンプルサンプルサンプルサンプルサンプルサンプルサンプルサンプルサンプルサンプルサンプルサンプルサンプルをを超え超えてててているいるいるいるがががますますますますますを指定てましくないを除去します。

[〜,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);

次のはで検出さたたた波と

plot(t,ECG_data) plot(locs_Rwave,ECG_data(locs_Rwave),'rv','MarkerFaceColor','r') plot(locs_Swave,ECG_data(locs_Swave),'rs','MarkerFaceColor','b')轴([0 1850 -1.1 1.1])网格legend(“心电图信号”,'R waves',波浪')xlabel('Samples')ylabel(“电压(MV)”) 标题('R wave and S wave in Noisy ECG Signal')

图包含一个轴对象。The axes object with title R wave and S wave in Noisy ECG Signal contains 3 objects of type line. These objects represent ECG Signal, R waves, S waves.

Q,,波。。。。ますます波波はノイズれててているためためためによりによりによりによりによりによりによりによりによりによりによりによりによりによりにより波波をを见つけ见つけようを行いそれピークを検出ます。からノイズを除去除去するするためにににににににに

smoothECG = sgolayfilt(ECG_data,7,21); figure plot(t,ECG_data,'b',t,smoothECG,'r') 网格紧的Xlabel('Samples')ylabel(“电压(MV)”) legend('Noisy ECG Signal',“过滤信号”) 标题(“过滤嘈杂的心电图信号”)

图包含一个轴对象。带有标题过滤的轴对象嘈杂的ECG信号包含2个类型线的对象。这些对象代表嘈杂的心电图信号,过滤信号。

平滑化した信号に対してピーク検出を行い、論理インデックスを使用して Q 波の位置を見つけます。

[〜,min_locs] = findpeaks(-smoothecg,“ minpeakdistance',40);%峰值 -  0.2mV和-0.5MV之间的峰值locs_Qwave = min_locs(smoothECG(min_locs)>-0.5 & smoothECG(min_locs)<-0.2); figure holdplot(t,smoothECG); plot(locs_Qwave,smoothECG(locs_Qwave),'rs','MarkerFaceColor','g') plot(locs_Rwave,smoothECG(locs_Rwave),'rv','MarkerFaceColor','r')图(locs_swave,smoothecg(locs_swave),'rs','MarkerFaceColor','b') 网格标题(“信号中的阈值峰”)xlabel('Samples')ylabel(“电压(MV)”) ax = axis; axis([0 1850 -1.1 1.1]) legend('Smooth ECG signal','Q wave','R wave',的波浪')

图包含一个轴对象。The axes object with title Thresholding Peaks in Signal contains 4 objects of type line. These objects represent Smooth ECG signal, Q wave, R wave, S wave.

上の図は、ノイズを含む ECG 信号において QRS 群が正しく検出されていることを示しています。

ノイズをと平滑されたと误差误差误差

Qrs Qrs群のトレンドを除去てのののののののののののののの群群では平均平均値値値がが

超值的%值[val_qwave,val_rwave,val_swave] = deal(smoothecg(locs_qwave),smoothecg(locs_rwave),smoothecg(locs_swave));MeaneRror_qwave = mean((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

これは、効率よくピーク解析を行うにはノイズを含む信号のトレンド除去が必要であることを示しています。

ピーク特性

ピーク重要特性は,时间,立ち下がり时间,,立ち上がり立ち下がり振幅振幅振幅がががありありありありありますますますはははははののののされます。

avg_riseTime = mean(locs_Rwave-locs_Qwave);% Average Rise timeavg_fallTime = mean(locs_Swave-locs_Rwave);% Average Fall timeavg_riseLevel = mean(val_Rwave-val_Qwave);% Average Rise Levelavg_fallLevel = mean(val_Rwave-val_Swave);平均秋季水平%helperPeakAnalysisPlot(t,smoothECG,...locs_qwave,locs_rwave,locs_swave,...val_Qwave,val_Rwave,val_Swave,...avg_riseTime,avg_fallTime,...avg_riselevel,avg_falllevel)

图包含一个轴对象。The axes object with title QRS-complex in an ECG signal contains 11 objects of type line, text. These objects represent QRS-Complex, Peak, Minima.

参考