gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第9章/pcmcode.m

    function f=pcmcode(y)
% 本函数实现将输入的值(已量化好)编码输入y为量化后的序列,
%其值应该在0到1之间
%定义出一个二维数组,第一行的8位代表了对应的输入值的编码(8位)
f=zeros(length(y),8); 
z=sign(y);  %得到输入序列的符号,确定编码的首位
y=y*128;  %将序列值扩展到0到128之间,便于编码
f=fix(y);  %将计算取整
y=abs(y);  %只计算绝对值的编码
for i=1:length(y),
    if (y(i)==128), %如果输入为1,得到128,为避免出现编码位为2的错误
        y(i)=127.999;  %将其值近似为127.999
    end
end
for i=1:length(y),  %下面的一段循环时将十进制转化为二进制数
    for j=6:-1:0   %分别计算序列指除以从64到1的数的商
        f(i,8-j)=fix(y(i)/(2^j));
        y(i)=mod(y(i),(2^j));
    end
end
for i=1:length(y),
    if (z(i)==1),  %输入值是负数
        f(i,1)=0;  %首位取0
    else
        f(i,1)=1;  %输入是正数,首位取1
    end
end
f   %显示编码结果