会飞的鱼

2020
辉小窝——分享更好的自己

HDB3码相关作业的资料

作者:好啊
链接:https://zhuanlan.zhihu.com/p/86177759
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

首先要说明的是HDB3码的由来,一个计算机发出的逻辑序列,经过一个通信系统的发送端所得到的编码,这个编码可以是差分码,AMI码,HDB3码等等,为了克服AMI码的缺点,这个缺点就是当原信码出现长连“0”串时,造成提取信号的困难,所以,为了解决这个方法,就有了HDB3码。这篇文章主要说明HDB3码是怎么编出来的

先说明HDB3码的编码规则

第一步 检查消息码中“0”的个数,当小于或等于3个连续时,HDB3码的编码规则与AMI码的编码规则一样

第二步 当“0”为4个或以上,就要补破坏码V了,为了保留AMI码的无直流成分这个特性,破坏码的极性也是交替出现的

记住:破坏码在序列中也是交替出现的,记住这一点很重要

好了,以上的这两步就可以解决一些简单的编码序列了

先看一个例子

一个消息码 0 1 1 0 0 0 0 0 1 0 0 0 0 1

一看到这个消息码,有5个“0”是连续出现的,那么根据上面的第二步就要不破坏码V了

不着急,先按第一步来,先把消息码转为AMI码(因为如果消息码中在不是连串的0的那一段。AMI是和HDB3是一样的),如下

AMI码 0 +1 -1 0 0 0 0 0 +1 0 0 0 0 -1 这里要加一个概念,就是“+1”“-1”称为信码,下文有个补信码B',这两个统称信码

这里要说明的就是“1”的正负是交替出现的,这里第一个“1”是“+1”可以,“-1”也可以,保证后面的“1”是正负交替出现就行了

好了,重点来了 ,AMI码中有一串是5个“0”连续出现的,按照规则,就要补破坏码V了

变为 0 +1 -1 0 0 0 V 0 +1 0 0 0 V-1

这个V的极性是什么呢,根据规则,每一个V的极性与前一个相邻的非“0”极性相同,你可以看到,第一个V相邻前面是“-1”,所以第一个V是负的,第二个V相邻前面是“+1”所以第二个V的极性是正的

所以变为了 0 +1 -1 0 0 0 -1 0 +1 0 0 0 +1-1 加黑的字体是破坏码

好了,现在看看,破坏码是不是交替出现的呢,-1 +1 (看加黑的+-1)是的,没错,就是正负交替出现的,所以这就是最终的HDB3码。

好了,现在如果是这样的消息码呢

0 1 1 0 0 0 0 1 1 0 0 0 0 0 1

对应的AMI码 0 +1 -1 0 0 0 0 +1 -1 0 0 0 0 0 +1

有4个连续的“0”,补破坏码

对应HDB3码 0 +1 -1 0 0 0 V +1 -1 0 0 0 V 0 +1

加上极性后 0 +1 -1 0 0 0 -1 +1 -1 0 0 0 -1 0 +1,有没有发现,破坏码的极性不是交替出现的,都是“-1”

这时候后该怎么办呢

这时候就需要调节脉冲了,也就是补信码B'

拿补信码B'应该放哪里呢

规则是这样的 序列中第二个破坏码向前面看(就是向左边看),这个破坏码极性如果与前面的一样,也就是不交替出现,注意:是第二个破坏码与第一个相比,那么就要在这个破坏码的前面的3个0中的第一个0改为补信码B',如下

0 +1 -1 0 0 0 -1 +1 -1 B' 0 0 -1 0 +1

补信码极性是什么呢,上文讲到,补信码也是信码,而信码的极性是交替出现的

所以0 +1 -1 0 0 0 -1 +1 -1 +1 0 0 +1 0 -1

注意,第二个 破坏码的极性要改变了,因为要和前面的非“0”信码的极性一样,而补信码也是信码

现在重新看这个HDB3码,你会发现信码的正负是交替出现的,破坏码的正负也是交替出现的 ,要把这两个分开来看,因为规则规定破坏码是极性是交替的,信码的极性也要交替

好了,暂时说这么多,想到再更新

2020.1.04号更新……

如果是连续的2个v如何编?比如

信息码:10000 10000 11 0000 0000 11

AMI码:-10000 +10000 -1+1 0000 0000 -1 +1

补破坏码 -1000v +1000v -1+1 000v 000v -1 +1

极性: -1000-1 +1000+1 -1+1 000+1 000+1 -1 +1

破坏码极性始终与前一个非0信码极性相同,不管有多少个V,后面再添加补信码纠正

-1000-1 +1000+1 -1+1 B00+1 B00+1 -1 +1

补信码也是信码,信码极性交替出现

-1000-1 +1000+1 -1+1 -100+1 +100+1 -1 +1

那刚才的破坏码极性就要改了

-1000-1 +1000+1 -1+1 -100-1 +100+1 -1 +1

这就是最终的HDB3码,破环码的极性是交替出现的、信码的极性也是交替出现的,连续3个V也是这样的规则编



以下是适用matlab计算HDB3码的代码
M=2;
Fd=2;Fs=40;
Pd=100;
x=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]  %定义源输入序列
m=pskmod(x,M);
k=rand(1);
noise=k*rand(size(x));
m=x+noise;
delay=5;
rcva = rcosflt(m,Fd,Fs,'fir/normal',.5,delay);
N=Fs/Fd;
propdelay=delay.*N+1;
rcv1=rcva(propdelay:end-(propdelay-1),:);
offset=0;  
h1=eyediagram(rcv1,N,1/Fd,offset);  
p=length(x);
last_V=-1;
last_one=-1;
y=zeros(size(x));    %初始化输出序列
count=0;             %连0计数器
for i=1:p
     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:p-1;
stairs(i,a);                   %画二维阶梯图
axis([0 ,p,0,1.5]);              %设定当前X轴和Y轴的范围
title('全0序列')        %为当前坐标轴添加标题
xlabel('x');                   %为x坐标轴命名
ylabel('y');                   %为y坐标轴命名
grid on                        %为当前的坐标轴添加主要的网格线
subplot(2,1,2);
a=y;
i=0:p-1;
stairs(i,a);
axis([0,p,-1.5,1.5]);
title('HDB3码型')
xlabel('x');
ylabel('y');
grid on

×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:辉小窝 » HDB3码相关作业的资料

发表评论

表情
看不清楚?点图切换

网友评论(0)