-
Notifications
You must be signed in to change notification settings - Fork 0
/
exp_Golomb_Dec.m
36 lines (33 loc) · 995 Bytes
/
exp_Golomb_Dec.m
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
function decoded = exp_Golomb_Dec(inpt,k,len,total)
idx=0;
arrayIndex=1;
while 1
% Count the number of 1's followed by the first 0
idx=idx+1;
q = 0;
for i = arrayIndex:length(inpt)
if inpt(i) == 1
q = q + 1; %count the number of 1s-> q is counted here
else
ptr = i; % first 0
break;
end
end
if(idx>len*total)
break;
end
arrayIndex=ptr;
% decoding the remainder
r_code = inpt(arrayIndex+1:arrayIndex+q+k);
r = bi2de(r_code,'left-msb');
arrayIndex=arrayIndex+q+k+1;
if (k == 0)
decoded(idx) = q; % special case for m = 1
else
% su=0;
% for j=0:q-1
% su=su+2^(j+k);
%end
decoded(idx) = r+(2^k)*(2^q-1); %computing the symbol from the decoded quotient and remainder
end
end