Counting number of bursts
13 次查看(过去 30 天)
显示 更早的评论
How can I count the number of periods of activity above a certain threshold?
I have an EMG signal with some bursts of activity above baseline. I have used the following code to identify those periods of activity (at least 200 points) above a predetermined threshold value that I have chosen:
above_threshold = (EMG_signal > threshold);
spanLocs = bwlabel(above_threshold);
spanLength = regionprops(spanLocs, 'area');
spanLength = [spanLength.Area];
goodSpans = find(spanLength>=200);
allInSpans = find(ismember(spanLocs, goodSpans));
Now I would like to count the number of bursts that have been identified above (i.e. see image attached. In this example, in red are shown the bursts identified).
Any help is much appreciated. Thanks a lot. Antonio

0 个评论
采纳的回答
Image Analyst
2016-8-9
Simply call bwareafilt and bwlabel. So get rid of all that and just simply have this:
EMG_signal = [1 2 4 2 0 0 2 2 0 2 0 2 2 2] % Sample signal with 2 bursts
threshold = 1.5
above_threshold = (EMG_signal > threshold)
minAcceptableLength = 3; % or 200 or whatever.
% Find spans that are long enough.
isLongEnough = bwareafilt(above_threshold, [minAcceptableLength, inf])
% Count the number of spans (bursts) that are long enough.
[labeledSpans, numberOfBursts] = bwlabel(isLongEnough)
4 个评论
Image Analyst
2017-1-16
Try this:
EMG_signal = [1 1 2 4 2 0 0 2 2 0 2 0 2 2 2 0 4 4 4 4 1] % Sample signal with 2 bursts
threshold = 1.5
above_threshold = (EMG_signal > threshold)
minAcceptableLength = 3; % or 200 or whatever.
% Find spans that are long enough.
isLongEnough = bwareafilt(above_threshold, [minAcceptableLength, inf])
% Specify the max number of zeros 0's there are that should be filled in.
maxHoleSize = 4;
holes = bwareafilt(~isLongEnough, [0, maxHoleSize])
% Don't take any holes if they are on the front or end of the vector
% because they are not bounded by spans on each side.
firstZero = find(holes, 1, 'first')
lastZero = find(holes, 1, 'last')
holes(1:firstZero) = 0;
holes(lastZero:end) = 0
% Now fill in the hoels by ORing:
isLongEnough = isLongEnough | holes;
% Count the number of spans (bursts) that are long enough.
[labeledSpans, numberOfBursts] = bwlabel(isLongEnough)
% Find the lengths of all the spans
props = regionprops(labeledSpans, 'Area');
allLengths = [props.Area]
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!