AMI,HDB3编码译码

A M I AMI AMI, H D B 3 HDB3 HDB3编码译码

有具体实验需求可私聊定制

A M I AMI AMI编码

  • 不含直流分量,低频成分少
  • ·三电平
  • 编译码电路简单,有宏观自检能力
    AMI编码缺点:信码有长连0串时,难以获取定时信息
    AMI编码应用: P C M 24 PCM24 PCM24路基群(北美系列) 1.544 M b / s 1.544Mb/s 1.544Mb/s的线路码型

H D B 3 HDB3 HDB3编译码

三阶高密度双( H D B 3 HDB3 HDB3码)是一种适用于基带传输的编码方式,它是为了克服 A M I AMI AMI码的缺点而出现的,具有能量分散,抗破坏性强等特点。

编码规则

  • 连0的个数不超过3时,规则与 A M I AMI AMI相同,即0不变,1变为-1、+1交替;

  • 若连0的个数超过3,则将每4个0看作一小节,定义为 B 00 V B00V B00V B B B可以是-1、0、+1, V V V可以是-1、+1;

  • B和V具体值满足以下条件: V V V和前面相邻非0符号极性相同;不看 V V V时极性交替; V V V V V V之间极性交替;

  • 一般第一个 B B B取0,第一个非0符取-1。在 V V V V V V之间如果出现偶数个B时,应在后一个V字节补一个 B ′ B' B,定义为 B ′ 00 V B'00V B00V B ′ B' B与前面相邻的 B B B之间符号极性相反,这个字节的 V V V B ′ B' B符号极性相同。 由于 V V V会破坏极性交替的规律、 B B B有3种变化以满足规则,所以 V V V称为破坏脉冲、 B B B称为调节脉冲, B 00 V B00V B00V称为取代节、破坏节。

编码特点

  • H D B 3 HDB3 HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
  • H D B 3 HDB3 HDB3中连0串的数目至多为3个,易于提取定时信号。
  • 编码规则复杂,但译码较简单。

译码规则

  • 译码的本质即把原来的取代节(4个连零)找到即可,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1 就应该译成“10000”,否则不用改动;若2连 “0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动.

  • 将所有的-1变换成+1后,就可以得到原消息码。

应用

数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,这不利于接收端的定时信号提取。而 H D B 3 HDB3 HDB3码因其无直流成份、低频成份少和连0个数最多不超过三个等特点,而对定时信号的恢复十分有利。

实验结果

在这里插入图片描述

在这里插入图片描述

% 初始化消息码
N = 22;% N = 100;        % 码元数
num_AMI = 0;        % 初始化计数器
num_HDB3 = 0;
ran_num = [1,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1]
% ran_num = randi([0, 1], 1, N); % 随机01串
ran_num_ori = ran_num;
ran_num_AMI = ran_num;
ran_num_HDB3 = ran_num;
num_0 = 0; % 0计数器
num_V = 0; % V计数器

% AMI编码
for i = 1:N
    if  ran_num_AMI(i) == 1
        num_AMI = num_AMI+1;
        ran_num_AMI(i) = (-1)^num_AMI*ran_num_AMI(i);
    end
end

% AMI解码
decode_AMI = ran_num_AMI;
for j = 1:N
    if  abs(decode_AMI(j)) == 1
        decode_AMI(j) = abs(decode_AMI(j));
    end
end

% HDB3编码
for j = 1:N
    if  ran_num_HDB3(j) == 1
        num_HDB3 = num_HDB3+1;
        ran_num_HDB3(j) = (-1)^num_HDB3*ran_num_HDB3(j);
        flag = ran_num_HDB3(j); % 上一个非0数作为标志
        num_0 = 0;        
    else if ran_num_HDB3(j) == 0            
        num_0 = num_0+1;
        if num_0 == 4
            num_V = num_V+1;
            num_0 = 0; % 连续四个0,0计数器清零
            if num_V == 1
                ran_num_HDB3(j) = 1*flag;
                flag_V = ran_num_HDB3(j);
                flag = flag_V;
            else
                ran_num_HDB3(j) = -flag_V; % 破坏脉冲
                flag_V = ran_num_HDB3(j);
                if ran_num_HDB3(j) ~= flag
                    ran_num_HDB3(j-3) = ran_num_HDB3(j); % 调节脉冲
                end
                flag = flag_V;
            end            
        end
    end
    end
end

% HDB3解码
decode_HDB3 = ran_num_HDB3;
count = 0;
for j = 1:N  
    if ran_num_HDB3(j) == 0 
        count  = count + 1;
        if  count == 3  %3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零
            if decode_HDB3(j + 1) * decode_HDB3(j - 3) == 1
                decode_HDB3(j + 1) = 0;
            end
        end
        if count == 2 %2连 “0”前后非零脉冲极性相同,则两零前后都译为零
            if decode_HDB3(j + 1) * decode_HDB3(j  - 2) == 1
                decode_HDB3(j  - 2) = 0;
                decode_HDB3(j + 1) = 0;
            end
        end
    else
         count = 0;   
    end
end
decode_HDB3 = abs(decode_HDB3);

% 绘图区
disp('消息码:'); disp(ran_num_ori);
disp('AMI码:'); disp(ran_num_AMI);
disp('HDB3码:'); disp(ran_num_HDB3);
figure;
subplot(3, 1, 1); stairs(0:(N-1), ran_num_ori); grid on; axis([0 21 -2 2]); title('消息码');
subplot(3, 1, 2); stairs(0:(N-1), ran_num_AMI); grid on; axis([0 21 -2 2]); title('AMI编码');
subplot(3, 1, 3); stairs(0:(N-1), ran_num_HDB3); grid on; axis([0 21 -2 2]); title('HDB3编码');
figure;
subplot(3, 1, 1); stairs(0:(N-1), ran_num_ori); grid on; axis([0 21 -2 2]); title('消息码');
subplot(3, 1, 2); stairs(0:(N-1), decode_AMI); grid on; axis([0 21 -2 2]); title('AMI解码');
subplot(3, 1, 3); stairs(0:(N-1), decode_HDB3); grid on; axis([0 21 -2 2]); title('HDB3解码');
  • 8
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想取名字的飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值