本程序主要是实现AMI与HDB3编码规则的实现,由于自己编写的时间长了,现在无法检验,读者自己弄吧。
clear all;
a=input('请输入序列= ');
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
%the part of painting
AMIandHDB3paint(a_num,a_ami,1,'AMI');
%the part of 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
%the part of painting
AMIandHDB3paint(a_num,a_hdb3,2,'HDB3');
%本程序是对AMIcodeANDHDB3code.m 模块化的尝试;
%主要是将计算程序与画图程序分隔开来;
function AMIandHDB3paint(a_num,a_matrix,n,a_name)
%the part of painting
t0=25;
t=0:1/t0:a_num;
a_paint=0;
for i=1:a_num
for j=1:t0
a_paint=[a_paint a_matrix(i)];
end
end
t=[t a_num+1/t0];
a_paint=[a_paint,0];
subplot(2,1,n);
plot(t,a_paint,'LineWidth',2);grid minor;
axis([-0.05 a_num+0.05 -1.05 1.05]);
title([num2str(a_name),'输出波形']);
xlabel([num2str(a_name),'输出序列= ',[num2str(a_matrix)]]);
disp([num2str(a_name),'输出序列= ',num2str(a_matrix)]);