Как передать матрицу ошибок (с отрицательными числами) arithenco? - PullRequest
0 голосов
/ 24 мая 2019

Я занимаюсь разработкой системы кодирования-декодирования 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
...