clc
clear
%================================================
%已知抽样值以△为单位
x = 500
pcmcode = pcmEnCode(x)
amp = pcmDeCode(pcmcode)
qerror = x-amp
%已知抽样值为实际电压值,则需先转换为以△为单位
M = 5
d = M/2^11;
x = 2.5
x0 = round(x/d)
pcmcode = pcmEnCode(x0);
amp0=pcmDeCode(pcmcode);
amp0 = amp0*d
qerror=x-amp0
function pcmcode = pcmEnCode(s)
start_t=[0,2.^(4:11)];
width_t=[1,1,2,4,8,16,32,64];
pcm=0;
if s>0
pcm=pcm+bitshift(1,7);
else
s=abs(s);
end
for i = 0:7
if s < start_t(i+2)
pcm=pcm+bitshift(i,4);
pcm=pcm+floor((s-start_t(i+1))/width_t(i+1));
break
pcmcode=dec2bin(pcm,8);
function amp = pcmDeCode(pcmcode)
code=bin2dec(pcmcode);
ucode=bitand(code,0b01111111);
k=bitshift(ucode,-4);
m=bitand(ucode,0b00001111);
amp=start_t(k+1)+double(m)*width_t(k+1)+width_t(k+1)/2;
if code<=128
amp=-amp;
amp=amp;