MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#">ここ</a>」をクリックしてください。

sarmad m
0

peak width calculation methods

sarmad m
さんによって質問されました 2017 年 4 月 13 日
最新アクティビティ Matlaber
さんによって 回答されました 2019 年 1 月 14 日
Hi
I'm calculating peak width using half-prominence method . For the peak in the rectangle is there is a method to make the horizontal line the finds the widths to shift up or make vertical line like this image
? . I tried both methods for peak width detection (half-width, half-prominence ) but it gave me the same results .
Half-prominence
close all
order =9 ;
framelen =15;
lx = 20;
% generate sinal
x = 1:1:1432;
y = (AV)';
y = sgolayfilt(y,order,framelen);
% get derivatives
dy = diff(y);
dx = diff(x);
dy_dx = [0 dy./dx];
findpeaks(y,x,'Annotate','extents','MinPeakProminence',0.006);
% get peaks with width computed by 'findpeaks'
[pks,locs,peakWidth1,p] = findpeaks(y,x,'MinPeakProminence',0.006);
half-height :
order =7 ;
framelen =11;
x=-AV;
lx = 20;
sgf = sgolayfilt(x,order,framelen);
hold on;
sgf= 0.02-sgf;
findpeaks(sgf,'MinPeakProminence',0.004,'WidthReference','halfheight','Annotate','extents');
[pks,locs,widths,proms]=findpeaks(sgf,'MinPeakProminence',0.004,'WidthReference','halfheight');
pks = -pks;
plot(locs,pks,'g*');
text(locs+.02,pks,num2str((1:numel(pks))'));

  0 件のコメント

サインイン to comment.

3 件の回答

回答者: Greg Dionne
2017 年 4 月 14 日
 採用された回答

It seems you are interested in the relative height of the spike with its immediate vicinity (not with respect to higher peaks). To do that, try subtracting off the results of a lowpass or median filter first.
findpeaks(sgf - medfilt1(sgf,21), ...)

  1 件のコメント

sarmad m
2017 年 4 月 20 日
thanks

サインイン to comment.


回答者: sarmad m
2017 年 4 月 27 日
編集済み: sarmad m
2017 年 4 月 27 日

I have added median filter, and tested this data below.
and I got these widths values using this code :
close all
% plot default annotated peaks
subplot(2,1,1);
order =11 ;
framelen =15;
lx = 20;
% generate sinal
x = 1:1:1432;
y = -(Averages)';
y = sgolayfilt(y,order,framelen);
% get derivatives
dy = diff(y);
dx = diff(x);
dy_dx = [0 dy./dx];
%plot(x);
findpeaks(y - medfilt1(y,50),x,'Annotate','extents','MinPeakProminence',0.003);
% get peaks with width computed by 'findpeaks'
[pks,locs,peakWidth1,p] = findpeaks(y,x,'MinPeakProminence',0.003);
subplot(212);
plot(x,y);
My problem is with peak number 6 width which is= 24 ?, I think it calculates the width at the start and end edges .

  1 件のコメント

Greg Dionne
2017 年 4 月 27 日
looks like you forgot the medfilt1 in the second call to findpeaks.
You may also try using 'WidthReference' 'halfheight' if you're after FWHM values once you've removed the baseline.
load data.csv
close all
% plot default annotated peaks
order =11 ;
framelen =15;
% generate sinal
y = -(data)';
y = sgolayfilt(y,order,framelen);
%plot(x);
findpeaks(y - medfilt1(y,50),'Annotate','extents','MinPeakProminence',0.003);
% get peaks with width computed by 'findpeaks'
[pks,locs,peakWidth1,p] = findpeaks(y - medfilt1(y,50),'MinPeakProminence',0.003);

サインイン to comment.


回答者: Matlaber
2019 年 1 月 14 日

I still cannot get the meaning how the width being calculated.

  0 件のコメント

サインイン to comment.



Translated by