Дельта-сжатие в MATLAB - PullRequest
       5

Дельта-сжатие в MATLAB

0 голосов
/ 21 января 2020

Я пробовал дельта-сжатие в MATLAB. Я попытался использовать массив вместо l oop, но столкнулся с проблемой во время распаковки. Нет синтаксических ошибок, но не удалось вернуть исходный поток. Пожалуйста, помогите мне. Вот мой код:

clear all;
close all;
m = [20,3,55,11,222,555,6,98,0,46];
subplot(3,1,1);plot(m);title('Raw Data');
delta(1) = m(1);
i = [1:(length(m)-1)];
delta(i+1) = m(i+1)-m(i);
subplot(3,1,2);plot(delta);title('Delta Encoding')
j =[1:(length(delta)-1)];
delta_decode(1) = delta(1);
delta_decode(j+1)=delta(j+1)+delta(j);
subplot(3,1,3);plot(delta_decode);title('Delta Decoding')

1 Ответ

0 голосов
/ 21 января 2020

Так почему же ваше декодирование не работает, давайте посмотрим на математику

Предположим, у нас есть последовательность N чисел X1,X2,...,XN

Переменная delta содержит следующее информация

delta= delta(1), delta(2),delta(3), ...,delta(N)
delta= X1      , X2-X1   , X3-X2  , ..., XN - X(N-1)

Итак, что вы сейчас делаете, это всегда добавляете две записи, которые приведут к следующему:

delta(1)+delta(2), delta(2)+delta(3), delta(3)+delta(4)
X1+X2-X1,          X2-X1+X3-X2,       X3-X2+X4-X3,...

Суммируя это:

X2, X3-X1, X4-X2

Таким образом, вы видите, что это не то, что вы хотите, для восстановления / декодирования реальных значений вам нужно накопление всей предыдущей информации. Вот почему вы должны добавить все

Это означает:

X2= X1 + delta(2)=X1+X2-X1=X2
X3= X1 + delta(2)+delta(3)=X2+delta(3)=X2+X3-X2=X3
X4= X1 + delta(2)+delta(3)+delta(4)=X2+delta(3)+delta(4)=X3 +delta(4)=X3+X4-X3=X4
and so on ...

Как уже упоминалось в комментариях, вы можете достичь этого без for-l oop, используя cumsum(delta)

...