www.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');