peak width calculation methods
조회 수: 5 (최근 30일)
이전 댓글 표시
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
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/162911/image.png)
? . 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);
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/162912/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/162913/image.jpeg)
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
채택된 답변
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), ...)
추가 답변 (2개)
sarmad m
2017년 4월 27일
편집: sarmad m
2017년 4월 27일
댓글 수: 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);
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!