【数字基带信号】基于matlab三阶高密度双极型码【含Matlab源码 990期】

举报
海神之光 发表于 2022/05/29 02:58:09 2022/05/29
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【数字基带信号】基于matlab三阶高密度双极型码【含Matlab源码 990期】 获取代码方式2: 通过订阅紫极神光博客付费专栏,凭支付凭...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【数字基带信号】基于matlab三阶高密度双极型码【含Matlab源码 990期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、三阶高密度双极型码简介

要了解HDB3码的编码规则,首先要知道AMI码的构成规则,AMI码就是把单极性脉冲序列中相邻的“1”码(即正脉冲)变为极性交替的正、负脉冲。将“0”码保持不变,把“1”码变为+1、-1半占空归零码表示的交替的脉冲。如:

NRZ码:1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1
AMI码:-1 0 0 0 0 +1 0 0 0 0 -1 +1 0 0 0 0 -1 +1

HDB3码是一种AMI码的改进型,它的编码原理可简述为,在消息的二进制代码序列中:
(1)当连“0”码的个数不大于3时,HDB3编码规律与AMI码相同,即“1”码变为“+1”、“-1”交替脉冲;
(2)当代码序列中出现4个连“0”码或超过4个连“0”码时,把连“0”段按4个“0”分节,即“0000”,并使第4个“0”码变为“1”码,用V脉冲表示。这样可以消除长连“0”现象。为了便于识别V脉冲,使V脉冲极性与前一个“1”脉冲极性相同。这样就破坏了AMI码极性交替的规律,所以V脉冲为破坏脉冲,把V脉冲和前3个连“0”称为破坏节“000V”;
(3)为了使脉冲序列仍不含直流分量,则必须使相邻的破坏点V脉冲极性交替;
(4)为了保证前面两条件成立,必须使相邻的破坏点之间有奇数个“1”码。如果原序列中破坏点之间的“1”码为偶数,则必须补为奇数,即将破坏节中的第一个“0”码变为“1”,用B脉冲表示。这时破坏节变为“B00V”形式。B脉冲极性与前一“1”脉冲极性相反,而B脉冲极性和V脉冲极性相同。

如:
NRZ码:  1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1
AMI码:  -1 0 0 0 0 +1 0 0 0 0 -1 +1 0 0 0 0 -1 +1
HDB3码: -1 0 0 0 -V +1 0 0 0 +V -1 +1 –B 0 0 -V +1 -1

虽然HDB3码的编码规则比较复杂,但译码却比较简单。从上述原理看出:每一个破坏符号V总是与前一非0符号同极性(包括B在内)。这就是说,从收到的符号序列中可以容易地找到破坏点V,于是也断定V符号及其前面的3个符号必是连0符号,从而恢复4个连0码,再将所有-1变成+1后便得到原消息代码。
HDB3如此, HDBn是一样推的. 主要是破坏节的长度不同
这里记录一个自己理解的小概念
归零与不归零:
比如都是表示 “1”
像这种,在整个码元期间电平保持不变的 就是不归零
像这种在一个码元期间内发生变化的,比如先低后高,或者先高后低的就是归零的

三、部分源代码

x=[1 0 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0];% 输入原码
y=x;% 输出y初始化
num=0;% 计数器初始化
for k=1:length(x)
   if x(k)==1
      num=num+1;                % "1"计数器
         if num/2 == fix(num/2) % 奇数个1时输出-1,进行极性交替
              y(k)=1;
         else
              y(k)=-1;
         end
    end
end
        % HDB3编码
num=0;  % 连零计数器初始化
yh=y;  % 输出初始化
sign=0; % 极性标志初始化为0
V=zeros(1,length(y));% V脉冲位置记录变量 
B=zeros(1,length(y));% B脉冲位置记录变量
for k=1:length(y)
   if y(k)==0
       num=num+1;  % 连“0”个数计数
       if num==4   % 如果4连“0”
         num=0;    % 计数器清零
         yh(k)=1*yh(k-4); 
                            %0000的最后一个0改变为与前一个非零符号相同极性的符号
         V(k)=yh(k);        % V脉冲位置记录
         if yh(k)==sign     % 如果当前V符号与前一个V符号的极性相同
            yh(k)=-1*yh(k); % 则让当前V符号极性反转,以满足V符号间相互极性反转要求
            yh(k-3)=yh(k);  % 添加B符号,与V符号同极性
            B(k-3)=yh(k);   % B脉冲位置记录
            V(k)=yh(k);     % V脉冲位置记录
            yh(k+1:length(y))=-1*yh(k+1:length(y));
                            % 并让后面的非零符号从V符号开始再交替变化
         end
       sign=yh(k);          % 记录前一个V符号的极性
     end
  else
      num=0;                % 当前输入为“1”则连“0”计数器清零
  end
end                         % 编码完成
% re=[x',y',yh',V',B'];     % 结果输出: x AMI HDB3 V&B符号
                            % HDB3解码

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

四、运行结果

在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/117885245

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。