logo资料库

matlab实现HDB3解码译码程序.doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
MATLAB仿真 HDB3码程序
MATLAB 仿真 HDB3 码程序 clear clc a=1024; 数如 1024 r=unidrnd(2,1,a-1); a-1 个 rn=r-1; rn=[1,rn]; 二值分布(1,2),共 a 个 ori=rn; ori l=1; for n=1:a if rn(n)==1 ; l=-l; rn(n)=l; end end AMI=rn; 变一次号 AMI m=-1; for k=1:a-3 if abs(rn(k))==1 m=rn(k); %a 表示元素个数,可以修改码元为任意个 %随机产生离散均匀二值分布(1,2),共 %每个元素减 1 变为(0,1)二值随机数列 %跟书上一致,从 1 开始随机产生离散均匀 %将原序列保存起来,便于后面解码后比较 %每检测到一个 1 变一次符号 %变为 AMI 码:每过一个 1 就使原来的 1 %符号初始化 %m 记录可能存在的连续 4 个 0 前面非零码元 的符号 end if rn(k)==0 if rn(k+1)==0 if rn(k+2)==0 if rn(k+3)==0 %检测是否连续 4 个码元都是 0 rn(k+3)=2*m; %用 2 表示书上的 V end end end end end rn ; 后 checked l=1; 码,0 是偶数,所以初始为 1,l=-1 表示两个 V 之间有奇数个非零码 for s=1:a %插入 V(2) %l=1 表示两个 V 之间有偶数个非零
if abs(rn(s))==2 for d=s+1:a if abs(rn(d))==1 一个一使 l 变一次号,表示偶数或奇数 l=-l; end if abs(rn(d))==2 if l~=1 l=1; 也应把计数器清零 为偶数个,则插入 B 4)))); else %V 之间的非零码只有+1,-1 遇到 %不需要插入 B 时若检测到 V %最初版本的升级处 1 %检测到下一个 V 时,若 rn(d-3)=3*(-(rn(d-4))/(abs(rn(d- %3 代表 B,插入不带符号的 B rn(d:a)=-rn(d:a); end %V 后的符号再交替 %到此处完成了插入不带符号的 B end end end end rn %for s=1:a %找到 B %B % if abs(rn(s))==3 %rn(s)=rn(s)*(-(rn(s-1))/(abs(rn(s-1)))); (3)与前一个位置的带符号的归一值相乘再取反,实现符号 B(3)的极性与前一非符号的 相反 来的 V,从它开始非零码正负号交替变化 %end %end HDB=rn; 且实现了 V 后的符号再交替 HDB ; 编码 for k=1:a if abs(rn(k))==2 rn(k-3)=0;rn(k)=0; 0,V 前面第三个有可能是 B(3)有可能是 0 也恢复为 0 end if abs(rn(k))==1 rn(k)=1; %B 后面第三个就是接下 %给 B(3)添加了符号,并 %以上便实现了 HDB3 的 %下面进行解码 %每个 V(2)都变成
end end rn; rn-ori 则解码正确 %解码后的恢复序列 %解码与原码比较全为 0
分享到:
收藏