MATLAB设计通信原理基带传输的常用码型AMI和HDB3 |
您所在的位置:网站首页 › matlab码型变换 › MATLAB设计通信原理基带传输的常用码型AMI和HDB3 |
实验内容
采用MATLAB产生长度为16位的随机二进制序列进行HDB3编码和解码,并打印出原始码元、HDB3编码、解码波形。 先用seq = randi([0, 1], 1, 16)生成16位的随机二进制序列,再进行AMI编码得到AMI,在AMI编码的基础上判断0的个数和非0元素的极性,进行HDB3的编码。解码过程是先把HDB3解码为AMI,再通过decode = abs(decode);解码为原始二进制序列。流程如图1所示。 将消息码的“1”(传号)交替地变换为“+1”和“-1”,而“0”(空号)保持不变。 例如:消息码:0 1 1 0 0 0 0 0 0 0 1 1 0 0 1…… AMI码:0 -1 +1 0 0 0 0 0 0 0 -1 +1 0 0 -1…… AMI码对应的波形是具有正、负、零三种电平的脉冲序列。 %% AMI部分 seq = randi([0, 1], 1, 16);% 生成随机二进制序列 % AMI码 polarity = 1; % 初始符号 AMI=zeros(1,length(seq)); % 初始化 for i = 1:length(seq) if seq(i) == 1 polarity = -polarity; AMI(i) = polarity; end end 2.HDB3HDB3是AMI码的一种改进型,使连“0”个数不超过三个。 (1)检查消息码中“0”的个数。当连“0”数目小于等于3时HDB码与AMI码一样,+1与-1交替; (2)当连“0”数目超过3个时,将每4个连“0”化作一小节定义为 BOOV,称为破坏节,其中V称为破坏脉冲,而B称为调节脉冲; (3)V与前一个相邻的非“0”脉冲的极性相同,并且要求相邻的V码之间极性必须交替。V的取值为+1或-1; (4)B的取值可选0+1或-1,以使V同时满足(3)中的两个要求 (5)V码后面的传号码极性也要交替。 遇到与前面相同的级数,将其和之前的3位(共4位)清零。 input=HDB3; % HDB3码输入 decode=input; % 解码初始化 sign=0; % 极性标志初始化 for i=1:length(HDB3) if input(i)~=0 if sign==HDB3(i) % 当前码与前一个非零码的极性相同 decode(i-3:i)=[0 0 0 0]; % 则判断该码为V码,将B00V清0 end sign=input(i); if input(i) == -1 decode(i) = 1; end end end decode = abs(decode); % AMI解码 整体代码 % seq=[1 0 0 1 0 0 0 0 0 0 0 0]; seq = randi([0, 1], 1, 16);% 生成随机二进制序列 %% 编码 % AMI码 polarity = 1; % 初始符号为负 AMI=zeros(1,length(seq)); % 初始化 for i = 1:length(seq) if seq(i) == 1 polarity = -polarity; AMI(i) = polarity; end end % HDB3码,在AMI的基础上 count=0; % 连0计数器初始化 HDB3=AMI; % HDB3初始化 sign=0; % 极性标志初始化为0 V=zeros(1,length(AMI)); % V脉冲位置记录变量 B=zeros(1,length(AMI)); % B脉冲位置记录变量 for i = 1:length(AMI) if AMI(i) == 0 count = count + 1; % 连0个数计数 if count == 4 % 如果4连0 count = 0; % 计数器清0 if i==4 % 特殊情况:前四位都为0 HDB3(1:4)=[1 0 0 1]; else %否则,先让0000--0001或者000-1 HDB3(i)=1*HDB3(i-4); end V(i)=HDB3(i); % V脉冲位置记录 if HDB3(i)==sign % 如果当前V符号与前一个V符号极性相同 HDB3(i)=-1*HDB3(i); % 进行V符号反转 HDB3(i-3)=HDB3(i); % 添加B符号,与V符号同极性 B(i-3)=HDB3(i); % B脉冲位置记录 V(i)=HDB3(i); % V脉冲位置记录 HDB3(i+1:length(AMI))=-1*HDB3(i+1:length(AMI));%让后面的符号重新交替变化 end sign=HDB3(i);%记录前一个V符号的极性 end else % AMI(i) == 1或-1 count=0; end end fprintf('原始码元: %s\n', num2str(seq)); fprintf('AMI码元: %s\n', num2str(AMI)); fprintf('HDB3码元: %s\n', num2str(HDB3)); %% 解码 input=HDB3; % HDB3码输入 decode=input; % 解码初始化 sign=0; % 极性标志初始化 for i=1:length(HDB3) if input(i)~=0 if sign==HDB3(i) % 当前码与前一个非零码的极性相同 decode(i-3:i)=[0 0 0 0]; % 则判断该码为V码,将B00V清0 end sign=input(i); if input(i) == -1 decode(i) = 1; end end end decode = abs(decode); fprintf('解码码元: %s\n', num2str(decode)); %% 绘制波形 subplot(4,1,1); stairs(0:length(seq)-1,seq); ylim([-2,2]); title('原码'); subplot(4,1,2); stairs(0:length(seq)-1,AMI); ylim([-2,2]); title('AMI'); subplot(4,1,3); stairs(0:length(seq)-1,HDB3); ylim([-2,2]); title('HDB3'); subplot(4,1,4); stairs(0:length(seq)-1,decode); ylim([-2,2]); title('解码'); 实验结果原始码元: 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1 AMI码元: -1 0 0 1 0 0 0 0 0 0 0 -1 1 -1 0 1 HDB码元: -1 0 0 1 0 0 0 1 0 0 0 -1 1 -1 0 1 -1 0 0 1 0 0 0 V 0 0 0 -1 1 -1 0 1 解码码元: 1 0 0 1 0 0 0 0 0 0 0 1 1 1 0 1
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |