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 %显示编码结果