how to count no. of elements exceeding given threshold value in selected moving window
Afficher commentaires plus anciens
I have time vs values plot. time length=100, I want count number of values exceeds 20 for time window 4, then skipping 1st & adding next time so window size should be constant 4, and count number of values which exceeds 20.
1 commentaire
Walter Roberson
le 27 Oct 2016
Duplicated by later http://www.mathworks.com/matlabcentral/answers/309526-count-number-values-exceeds-given-threshold-in-moving-window which also has an answer.
Réponses (3)
Image Analyst
le 27 Oct 2016
Try movsum(). (It's a fairly new function).
% Create 30 random values.
signal = randi(100, 1, 30)
% Only want values more than 20 in the sum so set those under to 0
signal(signal <= 20) = 0
% Compute the moving sum
summedSignal = movsum(signal, 4)
9 commentaires
Jay Hanuman
le 27 Oct 2016
Image Analyst
le 27 Oct 2016
Modifié(e) : Image Analyst
le 27 Oct 2016
Regarding your comment to Steven, try this
% Create 100 random values.
signal = randi(100, 1, 100)
% Only want values more than 20 in the sum so set those under to 0
signal(signal <= 20) = 0
% Compute the moving sum
summedSignal = conv(signal, [1,1,1,1], 'valid');
Jay Hanuman
le 27 Oct 2016
Image Analyst
le 27 Oct 2016
Modifié(e) : Image Analyst
le 27 Oct 2016
To sum elements above a threshold:
aboveThreshold = signal > yourThresholdValue;
theSum = conv(aboveThreshold, [1,1,1,1], 'valid');
Jay Hanuman
le 27 Oct 2016
Modifié(e) : Jay Hanuman
le 27 Oct 2016
Image Analyst
le 27 Oct 2016
I guess it didn't like that aboveThreshold was logical instead of double. So try this:
theSum = conv(double(aboveThreshold), [1,1,1,1], 'valid');
Jay Hanuman
le 27 Oct 2016
Image Analyst
le 27 Oct 2016
Nothing in my code (other than generating some sample data) has any reliance on the length of the signal being 40 or 100 or anything else. Any length signal will work. If it's longer and you only want the first 40, then crop it off
theSum = theSum(1:40); % Take only the first 40.
Jay Hanuman
le 27 Oct 2016
Modifié(e) : Jay Hanuman
le 27 Oct 2016
Steven Lord
le 27 Oct 2016
0 votes
It's not really clear to me from your description whether the window length is fixed (in which case I recommend using the movsum function that was introduced in release R2016a) or whether the window length can vary and the endpoints of the window are selected based on the sum of the elements in the window.
Walter Roberson
le 27 Oct 2016
above_threshold = (values(:) > 20) .';
cum_above = cumsum([0 above_threshold]);
running_count = cum_above(5:end) - cum_above(1:end-4);
or
above_threshold = (values(:) > 20) .';
running_count = conv(above_threshold, ones(1,4), 'valid');
Note that these will be shorter than the original time series because they only use full windows.
Catégories
En savoir plus sur Multirate Signal Processing dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!