pcm_deco_quan.m
来自「dpcm matlab code in zip format」· M 代码 · 共 74 行
M
74 行
function [Q] = pcm_deco_quan(B,bitsize)
% function [Q,b] = pcm_deco_quan(b,bitsize)
% pcm decoder and quantizer
% bitsize : encoder bit size
% B : input to decoder from encoder ouput
% Q : qunatazer output
if bitsize<4
b=B;
slen = length(b);
D = 2^(-bitsize);
i = 0;
for j=1:bitsize:slen
mask=j:j+bitsize-1;
i = i+1;
switch bitsize
case 3,
if b(mask) == [ 0 0 0 ]
Q(i) = -(7/2)*D;
elseif b(mask) == [ 0 0 1 ]
Q(i) = -(5/2)*D;
elseif b(mask) == [ 0 1 0 ]
Q(i) = -(3/2)*D;
elseif b(mask) == [ 0 1 1 ]
Q(i) = -(1/2)*D;
elseif b(mask) == [ 1 0 0 ]
Q(i) = (1/2)*D;
elseif b(mask) == [ 1 0 1 ]
Q(i) = (3/2)*D;
elseif b(mask) == [ 1 1 0 ]
Q(i) = (5/2)*D;
elseif b(mask) == [ 1 1 1 ]
Q(i) = (7/2)*D;
end
case 2,
if b(mask) == [ 0 0 ]
Q(i) = -(3/2)*D;
elseif b(mask) == [ 0 1 ]
Q(i) = -(1/2)*D;
elseif b(mask) == [ 1 0 ]
Q(i) = (1/2)*D;
elseif b(mask) == [ 1 1 ]
Q(i) = (3/2)*D;
end
case 1,
if b(mask) == [ 0 ]
Q(i) = -(1/2)*D;
elseif b(mask) == [ 1 ]
Q(i) = (1/2)*D;
end
otherwise
fprintf('choose a bit size 1,2 or 3.\n');
end
end
else
slen=length(B)
i = 0;
for j=1:bitsize:slen
i = i + 1;
mask=j:j+bitsize-1;
bb = B(mask);
b0 = bb(1);
b = bb(2:bitsize);
Q(i)=bdc(b0,b);
end
end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?