%对一个二进制序列进行hdb3编码运算
%y=hdb3(x)
%x为原始序列
function y=hdb3(x)
n=length(x);
last_V=-1;
last_one=-1;
y=zeros(size(x)); %初始化输出序列
count=0; %连0计数器
for i=1:n
if x(i)==1 %遇1则极性反转
y(i)=-last_one;
last_one=y(i);
count=0;
else
count=count+1;
if count==4
count=0;
y(i)=-last_V; %遇4连零则置为V,相邻的V极性反转
last_V=y(i);
if y(i)*last_one==-1 %V与前一个非0符号必须同极性
y(i-3)=y(i); %否则置B
end
last_one=y(i);
end
end
end
figure(1);
subplot(2,1,1); %分区绘制子图函数
a=x;
i=0:n-1;
stairs(i,a); %画二维阶梯图
axis([0 ,n,0,2]); %设定当前X轴和Y轴的范围
title('原码型'); %为当前坐标轴添加标题
xlabel('x'); %为x坐标轴命名
ylabel('y'); %为y坐标轴命名
grid on %为当前的坐标轴添加主要的网格线
subplot(2,1,2);
a=y;
i=0:n-1;
stairs(i,a);
axis([0,n,-2,2]);
title('HDB3码型')
xlabel('x');
ylabel('y');
grid on