-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathctrl_inf_block_extraction.m
More file actions
73 lines (67 loc) · 2.89 KB
/
ctrl_inf_block_extraction.m
File metadata and controls
73 lines (67 loc) · 2.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
% Gabriel Melendez Melendez
% October 2017
function [ rec_block, mark, payload_counter] = ctrl_inf_block_extraction(block, mark, payload_counter, lsb_backup_size)
block_dims = size(block);
array_size = block_dims(1)*block_dims(2);
block_array = reshape(block,[1,array_size]);
[sorted_block, sorted_index] = sort(block_array);
u = min(sorted_index(array_size),sorted_index(array_size-1));
v = max(sorted_index(array_size),sorted_index(array_size-1));
dmax = block_array(u) - block_array(v);
s = min(sorted_index(1),sorted_index(2));
t = max(sorted_index(1),sorted_index(2));
dmin = block_array(s) - block_array(t);
if (payload_counter < lsb_backup_size)
if dmax > 0
if (dmax == 1 || dmax == 2)
disp(strcat('extracted from dmax=',num2str(dmax)));
payload_counter = payload_counter + 1;
b = dmax-1;
mark(payload_counter) = num2str(b);
sorted_block(array_size) = block_array(u)-b;
else
disp(strcat('contract dmax',num2str(dmax)));
sorted_block(array_size) = block_array(u)-1;
end
else
if (dmax == 0 || dmax == -1)
disp(strcat('extracted from dmax=',num2str(dmax)));
payload_counter = payload_counter + 1;
b = dmax*-1;
mark(payload_counter) = num2str(b);
sorted_block(array_size) = block_array(v)-b;
else
disp(strcat('contract dmax',num2str(dmax)));
sorted_block(array_size) = block_array(v)-1;
end
end
if (payload_counter < lsb_backup_size)
if dmin > 0
if (dmin == 1 || dmin == 2)
disp(strcat('extracted from dmin=',num2str(dmin)));
payload_counter = payload_counter + 1;
b = dmin-1;
mark(payload_counter) = num2str(b);
sorted_block(1) = block_array(t)+b;
else
disp(strcat('contract dmin',num2str(dmin)));
sorted_block(1) = block_array(t)+1;
end
else
if (dmin == 0 || dmin == -1)
disp(strcat('extracted from dmin=',num2str(dmin)));
payload_counter = payload_counter + 1;
b = (-1)*dmin;
mark(payload_counter) = num2str(b);
sorted_block(1) = block_array(s)+b;
else
disp(strcat('contract dmin',num2str(dmin)));
sorted_block(1) = block_array(s)+1;
end
end
end
end
[~, inv_index] = sort(sorted_index);
unsorted_array = sorted_block(inv_index);
rec_block = reshape(unsorted_array,[block_dims(1),block_dims(2)]);
end