Я занимаюсь разработкой системы кодирования-декодирования DPCM с арифметическим кодером.Архитектура такова:
http://einstein.informatik.uni -oldenburg.de / rechnernetze / dpcm.htm
Моя проблема в том, что у меня есть матрица ошибок, которая содержит отрицательные числа (матрица, которая выводится из кодера DPCM), и передать ее arithenco невозможно.Я решил проблему, манипулируя значениями, но затем я получаю странное значение, когда пытаюсь вычислить битрейт, связанный с потоком arithenco.
min = 0;
error = encoderDPCM(g,a);
for j = 1:n %computing the minimum value of matrix error
for i = 1:m
if error(i,j)<min
min = error(i,j);
end
end
end
if min<0 % shifting all values to get positive numbers for the matrix
shift_error = error - min;
else
shift_error = error;
end
shift_error = shift_error + 1;
copy = zeros(m,n); %storing the values of shift-error
for j = 1:n % adjusting the values in order to pass the matrix to
arithenco
for i = 1:m
if shift_error(i,j)>2
copy(i,j) = shift_error(i,j);
shift_error(i,j) = 2;
end
end
end
[hist,loc] = imhist((uint8(shift_error))); %computing the values and the
occurrencies different from zero
tab = zeros(length(hist),2);
for i = 1:length(hist)
if hist(i) ~= 0
tab(i,1) = loc(i);
tab(i,2) = hist(i);
else
tab(i,1) = -1;
end
end
k = find(tab==-1);
tab(k',:) = [];
seq = shift_error(:); %sequence to be passed to arithenco
Для битрейта я получаю этот результат: 0,00014877, для битового потока39 бит (что я думаю, что это невозможно).Вот как я это вычисляю:
code_bin = de2bi(code);
bitenc = numel(code_bin); %computing the output stream
bitrate = bitenc /(length(seq)); %computing the bitrate