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

    function y=dmachester(x)
% 输入x为二进码,输入y为编好的码
grid =100;
t=0:1/grid:length(x);
i=1;       %定义时间序列
if (x(i)==1)      %因为这里是直接对一段二进制数编码
    for j=1:grid/2    %前面的值不定,所以第1个值单独给出
        y(grid/2*(2*i-2)+j)=0;     %定义前半时间值为0
        y(grid/2*(2*i-1)+j)=1;     %定义后半时间值为1
    end
else
    for j=1:grid/2      %反之,输入信息为0
        y(grid/2*(2*i-2)+j)=1;     %定义前半时间为1
        y(grid/2*(2*i-1)+j)=0;      %定义后半时间为0
    end
end
for i=2:length(x);     %从第2个信息起编码与前面的码元有关系
    if (x(i)==1),      %如果信息为1
        for j=1:grid/2, 
           %前半时间与前一码元后半时间值相反
            y(grid/2*(2*i-2)+j)=1-y(grid/2*(2*i-3)+grid/4); 
            %后半时间值与本码元前半时间值相反
            y(grid/2*(2*i-1)+j)=1-y(grid/2*(2*i-2)+j); 
        end
    else
        for j=1:grid/2,    %反之,信息为0
          %前半时间与前一码元后半时间值相同
            y(grid/2*(2*i-2)+j)=y(grid/2*(2*i-3)+grid/4); 
            %后半时间值与本码元前半时间值相同
            y(grid/2*(2*i-1)+j)=y(grid/2*(2*i-2)+j); 
        end
    end
end
y=[y,y(i*grid)]; 
M=max(y); m=min(y)
subplot(2,1,1);plot(t,y);
axis([0,i,m-0.1,M+0.1]);
% 采用了title函数来实现标记出各码元对应的二元信息
title('1       0        0       1         1        0    0       0        0        1        0        1');