adpcm_exe.m

来自「Adaptive Difference PCM code in matlab」· M 代码 · 共 70 行

M
70
字号
function ADPCM_exe
s= wavread('D:\切苞2\钢萍固叼绢漂碍\project_files\sample2_10k.wav');
lplen = 20;
bitsize = input('input the bitzise 4 or 8 or 16 =    ');

slen = length(s);
d(1) = s(1) ; 

[b0, b, bb] = deci_to_bin(d(1), bitsize);
[Q(1)] = bin_to_deci(b0,b);
B = [b0,b];

st(1) = Q(1);

for i=2:slen
    if i<=lplen
        d(i) = s(i) - st(i-1);
        
        [b0, b, bb] = deci_to_bin(d(i), bitsize);
        [Q(i)] = bin_to_deci(b0,b);
         B = [b0,b];
        
        st(i) = st(i-1) + Q(i);
    else
        m=0;
        [a,G] = lpc(s(i-lplen:i-1),lplen);
        a = a*G;
        m = 1:lplen;
        j = 2:lplen + 1;
        sth = sum(a(j).*st(i-m));
        ai(i,:) = a;
        d(i) = s(i) - sth;
        
        [b0, b, bb] = deci_to_bin(d(i), bitsize);
        [Q(i)] = bin_to_deci(b0,b);
        B = [b0,b];
        
        st(i) = sth + Q(i);
    end
end
b=b';
b=b(:)';

[jj, size_ai] = size(ai);
slen2 = length(b);
k = 0 ;
for l = 1: bitsize:slen
      k = k+1;
      mask = j : j+bitsize-1;
      bb = b(mask);
      b0 = bb(1);
      b = bb(2:bitsize);
      Q(l) = bin_to_deci(b0,b);
end
st = cumsum(Q(1:size_ai-1));
slen3 = length(Q);

h = 1:size_ai-1;
t = 2:size_ai;
for r = size_ai:slen
    sth = sum(ai(r,t).*st(r-h));
    st(r) = Q(r) + sth;
end






⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?