function y=hdb3(x)
%HDB3码
% 输入x为信息代码,输出y为相应的HDB3码
n=length(x);
y=zeros(1,n);
last_y=-1;
%设定初始参考值
last_v=-1;
zero_flag=0;
for i=1:n
if(x(i)==1)
y(i)=-last_y;
last_y=y(i);
zero_flag=0;
else
y(i)=0;
zero_flag=zero_flag+1;
end
if(zero_flag==4)
if(last_y==last_v)
y(i-3)=-last_y;
y(i)=y(i-3);
last_y=y(i);
last_v=y(i);
else
y(i)=last_y;
last_y=y(i);
last_v=y(i);
end
zero_flag=0;
end
end
%%%%%%%%%%%%%%%%% 以下绘制波形 %%%%%%%%%%%%%%%%%
t0=100;
t=0:1/t0:length(x);
for i=1:length(x)
for
j=1:t0
h((i-1)*t0+j)=y(i);
%把等式右边改为(y(i)==1)可以绘制HDB3正极性编码+H
%把等式右边改为-(y(i)==-1)可以绘制HDB3负极性编码-H
end
end
h=[h,h(i*t0)];
M=max(h);
m=min(h);
figure();
subplot(411)
plot(t,zeros(1,length(t)),'LineWidth',1);hold on
plot(t,h,'LineWidth',2);
set(gca,'Xtick',[0:1:length(x)],'Ytick',[0,1])
grid on
box
axis([0 i m-.1 M+.1]);
title('HDB3');