# How to create overlapping blocks using a matrix rows ?

22 views (last 30 days)
Sarah A on 19 Jan 2019
Commented: Star Strider on 20 Jan 2019
Hello,
Suppose that we have the matrix A where:
A=[0 1 0 0 1 1 0 1 0 1 0 1 0]
now, we want to create 10 blocks where each block contains four bits and put it in the cell matrix B where:
B= {[0,1,0,0] [1,0,0,1] [0,0,1,1] [0,1,1,0] [1,1,0,1] [1,0,1,0] [0,1,0,1] ...
[1,0,1,0] [0,1,0,1] [1,0,1,0] }
As you can see, each block is resulted by shifting a sliding window (of size four) by one bit each time, for example:
% the sequence 01001 will gives:
% [0,1,0,0] and [1,0,0,1]
So how I can implement that?

Stephan on 19 Jan 2019
Are you sure that B looks like you want it to look?
Sarah A on 19 Jan 2019
yes. it supposed to be cell matrix. I editted the question.

Star Strider on 19 Jan 2019
Try this:
A=[0 1 0 0 1 1 0 1 0 1 0 1 0];
S = hankel(A, [0 1 1 1]);
S = S(1:10,:);
B = mat2cell(S, ones(1,size(S,1)), size(S,2))';
If you prefer a loop:
L = 4;
for k1 = 1:numel(A)-L
S(k1,:) = A(k1:k1+L-1);
end
B = mat2cell(S, ones(1,size(S,1)), size(S,2))';
B{:} % Display Result (Delete Later)

Star Strider on 20 Jan 2019
Great!
I was not sure what result you wanted with a matrix (rather than a vector) for ‘A’.
Sarah A on 20 Jan 2019
This is the final form, I wasnt do it without your help so Thank you :)
matrix = [ 0 0 0 0 1 1 0 1 0 1 1 1 1; 0 1 0 1 1 1 0 0 1 1 1 0 1]
for i=1:size(matrix,1)
A=matrix(i,:);
S = hankel(A, [0 1 1 1]);
L = 4; %sliding window size
S = S(1:(size(A,2)-(L-1)),:);
for k1 = 1:numel(A)-L
S(k1,:) = A(k1:k1+L-1);
end
B = mat2cell(S, ones(1,size(S,1)), size(S,2))';
C{i}=B;
end
and the output will be:
C(1,1):
[0,0,0,0][0,0,0,1][0,0,1,1][0,1,1,0][1,1,0,1][1,0,1,0][0,1,0,1][1,0,1,1][0,1,1,1][1,1,1,1]
C(1,2):
[0,1,0,1][1,0,1,1][0,1,1,1][1,1,1,0][1,1,0,0][1,0,0,1][0,0,1,1][0,1,1,1][1,1,1,0][1,1,0,1]
Star Strider on 20 Jan 2019
As always, my pleasure!