function y=hdb3(x)
n=length(x);
v=-1;
b=-1;
y=zeros(size(x));
count=0;
for i=1:n
if x(i)==1
y(i)=-b;
b=y(i);
count=0;
else
count=count+1;
if count==4
count=0;
y(i)=-v;
v=y(i);
if y(i)*b==-1
y(i-3)=y(i);
end
b=y(i);
end
end
end
figure(1)
subplot(211)
a=x;
i=0:n-1;
stairs(i,a);
axis([0 n 0 1.2]);
title('原码型')
xlabel('x');
ylabel('y');
grid on
subplot(212)
a=y;
i=0:n-1;
stairs(i,a);
axis([0 n -1.2 1.2]);
title('HDB3码型')
xlabel('x');
ylabel('y');
grid on
译码:(本程序在写完之后,才发觉比较复杂,其实有一更简单的方法,待改天修改之后发上来)
function y=dehdb3(x)
n=length(x);
m=0;
for i=1:n
if x(i)==0 m=m+1;
end
if x(i)~=0
if m~=2&m~=3
y(i)=1;
m=0;
else if m==2
if x(i)==-x(i-4)&x(i)==x(i-3)
y(i-3)=0;
y(i)=0;
m=0;
else y(i)=1;
m=0;
end
else if m==3
if x(i)*x(i-4)==-1;
y(i)=1;
m=0;
else y(i)=0;
m=0;
end
end
end
end
end
end
figure(2)
subplot(211)
plot(x,i);
pause
a=x;
i=0:n-1;
stairs(i,a);
axis([0 n -1.2 1.2]);
title('HDB3码型')
xlabel('x');
ylabel('y');
grid on
subplot(212)
a=y;
i=0:n-1;
stairs(i,a);
axis([0 n 0 1.2]);
title('HDB3译码码型')
xlabel('x');
ylabel('y');
grid on