MATLAB學(xué)習(xí)help之——Peak Analysis from Signal Processing Toolbox

對信號的峰值進行分析
Step1.
簡單的尋找最大值點

load sunspot.dat
year=sunspot(:,1);
relNums=sunspot(:,2);
findpeaks(relNums,year);
xlabel('Year');
ylabel('Sunspot Number')
title('Find All Peaks');
圖片.png

Step2.
計算峰值點的距離

findpeaks(relNums,year,'MinPeakProminence',40);
xlabel('Year');
ylabel('Sunspot Number')
title('Find Prominent Peaks');
圖片.png

先用直方圖分析

figure
[pks, locs] = findpeaks(relNums,year,'MinPeakProminence',40);
peakInterval = diff(locs);
hist(peakInterval);
grid on
xlabel('Year Intervals');
ylabel('Frequency of Occurrence')
title('Histogram of Peak Intervals (years)')

AverageDistance_Peaks = mean(diff(locs))
圖片.png

Step3.
查看截止或者飽和信號的峰值點

load clippedpeaks.mat

figure

% Show all peaks in the first plot
ax(1) = subplot(2,1,1);
findpeaks(saturatedData);
xlabel('Samples')
ylabel('Amplitude')
title('Detecting Saturated Peaks')

% Specify a minimum excursion in the second plot
ax(2) = subplot(2,1,2);
findpeaks(saturatedData,'threshold',5)
xlabel('Samples');
ylabel('Amplitude')
title('Filtering Out Saturated Peaks')

% link and zoom in to show the changes
linkaxes(ax(1:2),'xy');
axis(ax,[50 70 0 250])
圖片.png

可以通過增加門限進行設(shè)定,否則對于一個平坦的峰恤煞,上升沿的第一個點會被認(rèn)為是峰值

step4.
測量峰值幅度
用ECG信號舉例說明

load noisyecg.mat
t = 1:length(noisyECG_withTrend);

figure
plot(t,noisyECG_withTrend)
title('Signal with a Trend')
xlabel('Samples');
ylabel('Voltage(mV)')
legend('Noisy ECG Signal')
grid on
圖片.png

step5.
去除信號趨勢

[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 data

figure
plot(t,ECG_data); grid on
ax = axis; axis([ax(1:2) -1.2 1.2])
title('Detrended ECG Signal')
xlabel('Samples'); ylabel('Voltage(mV)')
legend('Detrended ECG Signal')

圖片.png

下圖是一個標(biāo)準(zhǔn)的ECG信號圖


圖片.png

Step6.
感興趣的峰值點門限战转,ECG主要的三個部分娃承,包括S波,Q波薛匪,R波
R波可以通過設(shè)定0.5mv的門限檢出

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

對于S波,要設(shè)置適當(dāng)門限

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

然后標(biāo)記出來如下

figure
hold on
plot(t,ECG_data);
plot(locs_Rwave,ECG_data(locs_Rwave),'rv','MarkerFaceColor','r');
plot(locs_Swave,ECG_data(locs_Swave),'rs','MarkerFaceColor','b');
axis([0 1850 -1.1 1.1]); grid on;
legend('ECG Signal','R-waves','S-waves');
xlabel('Samples'); ylabel('Voltage(mV)')
title('R-wave and S-wave in Noisy ECG Signal')
圖片.png

為了定位Q波脓鹃,先濾波逸尖,采用Savitzky-Golay濾波器

smoothECG = sgolayfilt(ECG_data,7,21);

figure
plot(t,ECG_data,'b',t,smoothECG,'r'); grid on
axis tight;
xlabel('Samples'); ylabel('Voltage(mV)');
legend('Noisy ECG Signal','Filtered Signal')
title('Filtering Noisy ECG Signal')
圖片.png

查找Q波如下

[~,min_locs] = findpeaks(-smoothECG,'MinPeakDistance',40);

% Peaks between -0.2mV and -0.5mV
locs_Qwave = min_locs(smoothECG(min_locs)>-0.5 & smoothECG(min_locs)<-0.2);

figure
hold on
plot(t,smoothECG);
plot(locs_Qwave,smoothECG(locs_Qwave),'rs','MarkerFaceColor','g');
plot(locs_Rwave,smoothECG(locs_Rwave),'rv','MarkerFaceColor','r');
plot(locs_Swave,smoothECG(locs_Swave),'rs','MarkerFaceColor','b');
grid on
title('Thresholding Peaks in Signal')
xlabel('Samples'); ylabel('Voltage(mV)')
ax = axis; axis([0 1850 -1.1 1.1])
legend('Smooth ECG signal','Q-wave','R-wave','S-wave');
圖片.png

查看噪聲信號和平滑后哦信號的誤差

% Values of the Extrema
[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_Rwave = mean((noisyECG_withTrend(locs_Rwave) - val_Rwave))
meanError_Swave = mean((noisyECG_withTrend(locs_Swave) - val_Swave))
圖片.png

峰值分析
主要分析上升時間,下降時間等

avg_riseTime = mean(locs_Rwave-locs_Qwave); % Average Rise time
avg_fallTime = mean(locs_Swave-locs_Rwave); % Average Fall time
avg_riseLevel = mean(val_Rwave-val_Qwave);  % Average Rise Level
avg_fallLevel = mean(val_Rwave-val_Swave);  % Average Fall Level

helperPeakAnalysisPlot(t,smoothECG,...
                    locs_Qwave,locs_Rwave,locs_Swave,...
                    val_Qwave,val_Rwave,val_Swave,...
                    avg_riseTime,avg_fallTime,...
                    avg_riseLevel,avg_fallLevel)
圖片.png

總結(jié):

  1. 學(xué)會幾個函數(shù)的使用
    findpeaks瘸右, 查找峰值點
    linkaxes娇跟, 關(guān)聯(lián)子圖的坐標(biāo)軸
    polyfit, 擬合
    polyval太颤,擬合后的應(yīng)用
    sgolayfilt苞俘,濾波器
    deal, 輸入到輸出的賦值

helperPeakAnalysisPlot龄章,peak峰值點繪圖吃谣,內(nèi)部函數(shù)看不到介紹

  1. 查找峰值點的一般方法
    如何設(shè)置參數(shù)范圍大小
    針對ECG如何獲取Q,R,S波峰位置
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市做裙,隨后出現(xiàn)的幾起案子岗憋,更是在濱河造成了極大的恐慌,老刑警劉巖锚贱,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仔戈,死亡現(xiàn)場離奇詭異,居然都是意外死亡拧廊,警方通過查閱死者的電腦和手機监徘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吧碾,“玉大人凰盔,你說我怎么就攤上這事÷烁郏” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵趴拧,是天一觀的道長溅漾。 經(jīng)常有香客問我,道長著榴,這世上最難降的妖魔是什么添履? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮脑又,結(jié)果婚禮上暮胧,老公的妹妹穿的比我還像新娘锐借。我一直安慰自己,他們只是感情好往衷,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布钞翔。 她就那樣靜靜地躺著,像睡著了一般席舍。 火紅的嫁衣襯著肌膚如雪布轿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天来颤,我揣著相機與錄音汰扭,去河邊找鬼。 笑死福铅,一個胖子當(dāng)著我的面吹牛萝毛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滑黔,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼笆包,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拷沸?” 一聲冷哼從身側(cè)響起色查,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎撞芍,沒想到半個月后秧了,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡序无,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年验毡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片帝嗡。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晶通,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哟玷,到底是詐尸還是另有隱情狮辽,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布巢寡,位于F島的核電站喉脖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏抑月。R本人自食惡果不足惜树叽,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谦絮。 院中可真熱鬧题诵,春花似錦洁仗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至篷店,卻和暖如春祭椰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疲陕。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工方淤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹄殃。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓携茂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親诅岩。 傳聞我的和親對象是個殘疾皇子讳苦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容