MATLAB 中的增量压缩

Delta compression in MATLAB

我在 MATLAB 中尝试了增量压缩。我尝试使用数组而不是 for 循环,但在解压过程中遇到了问题。没有语法错误但无法取回原始流。请帮我。这是我的代码:

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')

那么为什么你的解码不起作用,让我们看看数学

假设我们有一个 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 ...

如评论中所述,您可以使用 cumsum(delta)

在没有 for 循环的情况下实现这一点