HDB3编码及其功率谱密度

时间:2021-02-10 22:42:56

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