Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Введение в теорию информации.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4 Мб
Скачать
☆

MatLab-программа декодирования арифметического кoда

function x=int_arithm_decoder(y,q,n);

% y is binary encoded data sequence,

% q is cumulative distribution (model)

% x is output sequence

% n is number of messages to decode

% Constants

k=16; R4=2*(k-2); R2=R4*2; R34=R2+R4; R=2*R2;

m=length(q);

% Start decoding. Reading first к bits

Value=0; y=[y zeros(1,k)];

for ib=1:k

Value=2*Value+y(ib);

end;

% Initialization

Low=0; High=R-1;

% Decoding

for j=1:n

Range=High-Low+1;

aux=fix(((Value-Low+1)*q(m)-1)/Range);

i=1; % message index

while q(i+1)<=aux, i=i+1; end;

x(j)=i;

High=Low+fix(Range*q(i+1 )/q(m))-1; Low=Low+fix(Range*q(i)/q(m));

% Normalization

while 1

if High<R2

High=High*2+1;Low=Low*2;

ib=ib+1;

Value = 2*Value+y(ib);

else

if Low>=R2

High=High*2-R+1;Low=Low*2-R;

ib=ib+1;

Value = 2*Value-R+y(ib);

else

if Low>=R4 & Hlgh<R34

High=2*Hlgh-R2+1; Low=2*Low-R2; lb=lb+1;

Value = 2*Value-R2+y(ib);

else

break;

end;

end;

end

end; % while

end; % for

91