Asked by Anastasia
on 25 Apr 2016

Hello! I am new to Matlab, thank you in advance for helping me. I have a serie (called S) of around 800 numbers (or more) composed of values 1,2 or 4 (for ex. 111122111142222211 etc). In this series, I would like to find out when for every 100 numbers for ex. (this number can vary) more than/or equal to 80% (the % can vary) of the numbers have the value 2. Is it possible to create something like a sliding window which would slide through the serie S (beginning by 1-100, then 2-101, then 3-102 something like that) and tell me at what point >80% of the numbers have value 2? Thank you very much in advance, and feel free to ask me any questions!

Answer by David Young
on 25 Apr 2016

The answer to problems involving a sliding window is very often to use the convolution operation, as here.

% some random test data, with 1s, 2s and 4s (mainly 2s)

N = 800; % length of series

S = ones(1, N);

r = rand(1, N);

S(r < 0.75) = 2;

S(r > 0.9) = 4;

fprintf('First 20 values: '); fprintf('%d ', S(1:20)); fprintf('\n');

% Now the computation to find where a window of 100 has more than a

% certain fraction of twos

% parameters for the search

windowLength = 100;

testPercent = 80;

% find which of the values are 2

twoPositions = S == 2;

% count the number of twos in each window of length 100

twoSums = conv(double(twoPositions), ones(1, windowLength), 'valid');

% find the positions where the threshold is exceeded

manyTwos = find(twoSums >= windowLength * testPercent / 100);

% Print out the positions of the start of the window where

% there are the required number of twos

fprintf('Positions with many twos: '); fprintf('%d ', manyTwos); fprintf('\n');

Anastasia
on 26 Apr 2016

Thank you very much for your response. So, in my program, I only use this part, right?

% Now the computation to find where a window of 100 has more than a % certain fraction of twos % parameters for the search windowLength = 100; testPercent = 80; % find which of the values are 2 twoPositions = S == 2; % count the number of twos in each window of length 100 twoSums = conv(double(twoPositions), ones(1, windowLength), 'valid'); % find the positions where the threshold is exceeded manyTwos = find(twoSums >= windowLength * testPercent / 100); % Print out the positions of the start of the window where % there are the required number of twos fprintf('Positions with many twos: '); fprintf('%d ', manyTwos); fprintf('\n');

It seems to be working well, i should test some more :)

However, I was wondering if it is possible to plot the result rather than print out the positions of the start of the window? Thank you again!

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 1 Comment

## Azzi Abdelmalek (view profile)

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/280933-create-a-sliding-window-to-determine-when-a-of-numbers-in-a-sequence-equal-a-certain-value#comment_361567

Sign in to comment.