没有合适的资源?快使用搜索试试~ 我知道了~
首页hdb3编译码 matlab
hdb3编译码 matlab
需积分: 10 268 浏览量
更新于2023-03-16
评论 2
收藏 753KB DOC 举报
基于matlab的hdb3编译码,内涵编码解码源程序,还有其他数字调制程序。
资源详情
资源评论
资源推荐

通信原理实验报告
姓名:
班级:
学号:
指导老师:
时间:

一、HDB3 码的编码和译码
1、实验要求:掌握 HDB3 码的编码规则,利用 MATLAB 设计并实现 HDB3 码的编码
和译码。
2、原理简述:
编码规则:
1) 先将消息代码变换成 AMI 码,若 AMI 码中连 0 的个数小于 4,此时的 AMI 码就是
HDB3 码;
2) 若 AMI 码中连 0 的个数大于 3,则将每 4 个连 0 小段的第 4 个 0 变换成与前一个非
0 符号(+1 或-1)同极性的符号,用表示(+1+,-1-);
3) 为了不破坏极性交替反转,当相邻符号之间有偶数个非 0 符号时,再将该小段的
第 1 个 0 变换成+B 或-B,符号的极性与前一非零符号的相反,并让后面的非零符
号从符号开始再交替变化。
例如:
消息代码: 1 0 0 0 0 10 0 0 01 1 0 0 0 0 1 1
AMI 码: +1 0 0 0 0 -10 0 0 0+1 -1 0 0 0 0 +1 -1
HDB3 码:+1 0 0 0 +V -10 0 0 -V+1 -1 +B 0 0 +V -1 +1
简易编码方法:
原理:HDB3 码既要包含 AMI 的交替特性使输出无直流特性,又要不出现四个以上的
连 0,因此可以先满足后者。
1)把"0000"换为取代节。
规则:先将"0000"分离开来,第一个"0000"直接变为"000V",然后数相邻两
个"0000"之间"1"的个数,奇数则变为"000V",偶数则变为" B00V"。
2)更新符号。
根据教材有:B 总是与其前面的 1 或 V 符号相反,V 总是与前面的 1 或 B 相符号相同,
1 总是与前面的 V 或 B 符号相反,就可以编符号了。
例如:
消息代码:1 0 0 0 0 10 0 0 01 1 0 0 0 0 1 10 0 0 00 0 0 0 1 1 10 0 0 01
中间码: 1 0 0 0 V 10 0 0 V1 1 B 0 0 V 1 1B 0 0 VB 0 0 V 1 1 10 0 0 V1
HDB3 码:+1 0 0 0 +V -10 0 0 -V+1 -1 +B 0 0 + V -1 +1 -B 0 0 -V+B 0 0 +V -1 +1 -
10 0 0 -V+1
解码规则:
1)虽然编码很复杂,但解码规则很简单,若 3 连“0”前后非零脉冲同极性,则将最后一
个非零元素译为零,如+1000+1 就应该译成“10000”;若 2 连 “0”前后非零脉冲极性相同,
则两零前后都译为零,如-100-1,就应该译为 0000.
2)再将所有的-1 变换成+1 后,就可以得到原消息代码。
3、程序运行结果

运行程序
可自定义二进制序列,第一个窗口显示所输入的二进制码元,第二个窗口为 HDB3 编码
后的结果,最后一个窗口为解码后的窗口。
4、程序源代码
% ch7example6prog1.m
% AMI 码的编码
xn=[1 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0];% 输入单极性码
yn=xn;% 输出 yn 初始化
num=0;% 计数器初始化
for k=1:length(xn)
if xn(k)==1
num=num+1; % "1"计数器
if num/2 == fix(num/2) % 奇数个 1 时输出-1,进行极性交替
yn(k)=1;
else
yn(k)=-1;
end
end
end
% HDB3 编码
num=0; % 连零计数器初始化
yh=yn; % 输出初始化
sign=0; % 极性标志初始化为 0
V=zeros(1,length(yn));% V 脉冲位置记录变量
B=zeros(1,length(yn));% B 脉冲位置记录变量
for k=1:length(yn)
if yn(k)==0
num=num+1; % 连“0”个数计数
if num==4 % 如果 4 连“0”
剩余13页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0