AMI,HDB3编码译码
AMIAMIAMI,HDB3HDB3HDB3编码译码
文章目录
- AMIAMIAMI,HDB3HDB3HDB3编码译码
- AMIAMIAMI编码
- HDB3HDB3HDB3编译码
- 编码规则
- 编码特点
- 译码规则
- 应用
- 实验结果
AMIAMIAMI编码
- 不含直流分量,低频成分少
- ·三电平
- 编译码电路简单,有宏观自检能力
AMI编码缺点:信码有长连0串时,难以获取定时信息
AMI编码应用:PCM24PCM24PCM24路基群(北美系列)1.544Mb/s1.544Mb/s1.544Mb/s的线路码型
HDB3HDB3HDB3编译码
三阶高密度双(HDB3HDB3HDB3码)是一种适用于基带传输的编码方式,它是为了克服AMIAMIAMI码的缺点而出现的,具有能量分散,抗破坏性强等特点。
编码规则
连0的个数不超过3时,规则与AMIAMIAMI相同,即0不变,1变为-1、+1交替;
若连0的个数超过3,则将每4个0看作一小节,定义为B00VB00VB00V,BBB可以是-1、0、+1,VVV可以是-1、+1;
B和V具体值满足以下条件:VVV和前面相邻非0符号极性相同;不看VVV时极性交替;VVV与VVV之间极性交替;
一般第一个BBB取0,第一个非0符取-1。在VVV与VVV之间如果出现偶数个B时,应在后一个V字节补一个B′B'B′,定义为B′00VB'00VB′00V,B′B'B′与前面相邻的BBB之间符号极性相反,这个字节的VVV和B′B'B′符号极性相同。 由于VVV会破坏极性交替的规律、BBB有3种变化以满足规则,所以VVV称为破坏脉冲、BBB称为调节脉冲,B00VB00VB00V称为取代节、破坏节。
编码特点
- 由HDB3HDB3HDB3码确定的基带信号无直流分量,且只有很小的低频分量;
- HDB3HDB3HDB3中连0串的数目至多为3个,易于提取定时信号。
- 编码规则复杂,但译码较简单。
译码规则
译码的本质即把原来的取代节(4个连零)找到即可,若3连“0”前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1 就应该译成“10000”,否则不用改动;若2连 “0”前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动.
将所有的-1变换成+1后,就可以得到原消息码。
应用
数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,这不利于接收端的定时信号提取。而HDB3HDB3HDB3码因其无直流成份、低频成份少和连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:Nif ran_num_AMI(i) == 1num_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:Nif abs(decode_AMI(j)) == 1decode_AMI(j) = abs(decode_AMI(j));end
end% HDB3编码
for j = 1:Nif ran_num_HDB3(j) == 1num_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 == 4num_V = num_V+1;num_0 = 0; % 连续四个0,0计数器清零if num_V == 1ran_num_HDB3(j) = 1*flag;flag_V = ran_num_HDB3(j);flag = flag_V;elseran_num_HDB3(j) = -flag_V; % 破坏脉冲flag_V = ran_num_HDB3(j);if ran_num_HDB3(j) ~= flagran_num_HDB3(j-3) = ran_num_HDB3(j); % 调节脉冲endflag = flag_V;end endendend
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) == 1decode_HDB3(j + 1) = 0;endendif count == 2 %若2连 “0”前后非零脉冲极性相同,则两零前后都译为零if decode_HDB3(j + 1) * decode_HDB3(j - 2) == 1decode_HDB3(j - 2) = 0;decode_HDB3(j + 1) = 0;endendelsecount = 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解码');
AMI,HDB3编码译码相关推荐
- Verilog实现HDB3编码译码
Verilog实现HDB3编码译码 前言 一.使用的软件 二.具体实现 1.模块介绍 2.模块的.V文件 三.仿真结果 四.总结 1.关于编程的结构 2.收获 五.附testbench文件 前言 本次 ...
- 【编码译码】基于matlab HDB3编译码仿真【含Matlab源码 1961期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[编码译码]基于matlab HDB3编译码仿真[含Matlab源码 1961期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...
- HDB3 的译码 ③(Verilog 语言实现)2021-9-12
文章目录 前言 一.HDB3译码 1.实现代码以及仿真结果 1.代码实现 2.仿真结果 总结 前言 在之前的几篇文章中提到了HDB3编码和译码的课题,首先是使用MATLAB来实现了HDB3的编码和译码 ...
- 【FPGA教程案例88】编译码1——基于FPGA的HDB3编译码verilog实现
FPGA教程目录 MATLAB教程目录 目录 1.软件版本 2.HDB3编译码理论概述 2.1 HDB3编码 2.2 HDB3译码 3.verilog实现过程
- 基于FPGA的HDB3编译码verilog实现,包括testbench
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.verilog核心程序 4.完整算法代码文件 1.算法仿真效果 vivado2019.2仿真结果如下: 2.算法涉及理论知识概要 数字基带信号的传 ...
- 哈夫曼编码 译码java_基于Java的哈夫曼编码译码系统_报告毕业论文
基于Java的哈夫曼编码译码系统_报告毕业论文 1课 程 设 计Java 与面向对象程序设计课程设计基于 Java 的哈夫曼编码译码系统1.问题描述和分工情况1.1 问题描述使用 Java 语言实现哈 ...
- 二叉树的基本操作及哈夫曼编码/译码系统的实现
二叉树的基本操作及哈夫曼编码/译码系统的实现 实验目的和要求 掌握二叉树的二叉链表存储表示及遍历操作实现方法. 实现二叉树遍历运算的应用:求二叉树中叶结点个数.结点总数.二叉树的高度,交换二叉树的左右 ...
- 哈夫曼算法证明+哈夫曼编码译码程序实现
哈夫曼算法证明 哈夫曼算法是一种贪心算法,我们考虑证明其最优子结构和贪心选择性质: 最优子结构:假设一个树是哈夫曼树,则以其任意节点为根节点的最大子树也是哈夫曼树. 证明:子树的根节点的值是其所有叶子 ...
- (7,4)汉明码编码译码及计算最小码距——基于MATLAB编程
(7,4)汉明码编码译码及计算最小码距--基于MATLAB编程 编码 A=[1 1 1 0; 0 1 1 1; 1 1 0 1] %A 可随便写四个不为0的列向量,是为了生成一致校验矩阵 H=[A e ...
- 【编码译码】基于matlab QC-LDPC码编码和译码【含Matlab译码 2194期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[编码译码]基于matlab QC-LDPC码编码和译码[含Matlab译码 2194期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...
最新文章
- 给创新工场求职者的一封信
- eclipse android开发环境搭建_聊聊Spring boot2.X开发环境搭建和基本开发
- IPropertySet接口
- 工作335:uni-ele-el-date-picker限制选择时间
- _一文让你透彻理解Linux的SOCKET编程(含实例解析)
- 强健程序员体魄————减脂原理
- go语言 echo框架_如何在Go Echo Web框架中设置嵌套HTML模板
- 3-2Tensor的基本定义
- MySql安装错误代码1045的解决方案
- AfxGetMainWnd 函数
- 上位机、下位机、单片机的关系
- VS studio源代码管理辅助工具sourceoffsite使用过程中的错误解决方法
- Hadoop分布式系统架构详解
- 对车辆路试数据集mtcars进一步分析_【案例】图解电磁阀及其故障诊断分析
- 移动端web开发click touch tap区别
- 微信小程序全屏背景图
- The Things Network LoRaWAN Stack V3 学习笔记
- Hexo添加Live2D看板娘最新教程
- SQL 数字和字符串互转
- 迅捷在线压缩有什么办法可以压缩视频