clear all;
%a=binary_generate(20);
%a=input('请输入序列= ');
i=20; %20个码元
x=(rand(1,i)); %rand函数产生在0-1之间随机数,共1-20个
a=round(x); %随机序列,round取最接近小数的整数
%>0.5的值就为1,<0.5的值就为0
a_num=length(a);
a_ami=a;
a_sign=-1;
for i=1:a_num
if a(i)==0
continue;
elseif a(i)==1&a_sign==-1
a_ami(i)=-a(i);
a_sign=1;
elseif a(i)==1&a_sign==1
a_ami(i)=a(i);
a_sign=-1;
end
end
%调用画图程序画出AMI码
AMIandHDB3paint(a_num,a_ami,1,'AMI');
%将产生的二进制码变为HDB3码
a_sign=-1; %先是按照负极性进行编码,即原初始位为‘1’,
a_hdb3=0; %则HDB3码的初始位为‘-1’
a_hdb3=0;
a_ov=0;
i=1;c=0;
for j=1:a_num
if i+3<=a_num
if sum(a([i:i+3]))==0
a_ov=a_ov+1;
if mod(a_ov,2)==1
a_hdb3(i+3)=-1;
a_sign=1;
if a_hdb3(i+3)~=a_hdb3(i-1);
a_hdb3(i)=a_hdb3(i+3);
end
elseif mod(a_ov,2)==0
a_hdb3(i+3)=1;
a_sign=-1;
if a_hdb3(i+3)~=a_hdb3(i-1);
a_hdb3(i)=a_hdb3(i+3);
end
end
i=i+4;c=1;
end
end
if c==1
c=0; continue;
end
if a(i)==0
i=i+1;continue;
elseif a(i)==1&a_sign==-1
a_hdb3(i)=-a(i);
a_sign=1; i=i+1;
elseif a(i)==1&a_sign==1
a_hdb3(i)=a(i);
a_sign=-1; i=i+1;
end
if i>a_num
break;
end
end
%调用画图程序画出HDB3码
AMIandHDB3paint(a_num,a_hdb3,2,'HDB3');