实验二基带传输常用码的编码解码方法一、实验目的了解基带传输常用码的编码解码方法。
二、实验内容设定一个信息码串,产生常见的编码如单极性非归零、双极性非归零、单极性归零、双极性归零、AMI、HDB3码的时域波形;不考虑噪声影响,以采样电平为依据恢复出原始信息串。
三、实验原理1、单极性非归零。
它用正电平和零电平分别对应二进制码“1”和“0”,波形特点是电脉冲之间无间隔,极性单一。
2.双极性非归零。
用正负电平的脉冲分别代表二进制代码“1”和“0”。
其正负电平的幅度相等、极性相反。
3.单极性归零。
是单极性非归零波形的形式。
4.双极性归零。
是双极性非归零波形的形式,兼有双极性和归零波形的特点。
5.AMI。
全称是传号交替反转码,其编码规则是将消息码的“1”交替的变换为“+1”和“-1”,而“0”保持不变。
6.HDB3。
全称是三阶高密度双极性码。
编码规则是:1)检查消息码中“0”的个数。
当连“0”数目小于等于3时,HDB3码与AMI码一样,+1、-1交替;2)当连“0”个数超过3时,将每四个连“0”化作一小节,定义为B00V,称为破坏节,其中V称为破坏脉冲,而B称为调节脉冲;3)V与前一个相邻的非“0”脉冲的极性相同,并且要求相邻的V码之间极性必须交替。
V的取值为+1或-1;4)B的取值可选0、+1或-1,以使V同时满足(3)中的两个要求;5)V码后面的传号码极性也要交替。
译码:从收到的符号序列中可以很容易的找到破坏点V,就可以断定V符号及前面的三个符号必须是连“0”符号,从而恢复四个连“0”码,再将所有-1变成+1后便得到原消息代码。
四、实验内容(一)单极性非归零、双极性非归零、单极性归零、双极性归零时域波形。
实验代码:M=10000; %产生码元数L=10; %每码元复制32次dt=0.1; %采样间隔T=L*dt; %码元时间TotalT=M*T; %总时间t=0:dt:TotalT; %时间F=1/dt; %仿真频宽df=1/T otalT; %频率间隔f=-F/2:df:F/2-df; %频率N=M*L; %总长度ShowM=16; %显示码元数ShowN=ShowM*L;ShowT=(ShowN-1)*dt;Showt=0:dt:ShowT; %时间dutyradio=0.5; %占空比randwave=round(rand(1,M)); %产生二进制随机码,M为码元个数randwave(1:16)=[1 0 1 0 0 1 0 0 1 1 0 1 0 1 0 0];onessample=ones(1,L); %定义复制的次数L,L为每码元的采样点数rerandwave=randwave(onessample,:); %复制的第1行复制L次unipolarwave=reshape(rerandwave,1,L*M); %重排成1*L*M数组%单极性不归零码subplot(4,1,1);plot(Showt,unipolarwave(1:ShowN));axis([0 20 -1.2 1.2]);%双极性不归零码bipolarwave=unipolarwave*2-1; %转换成双极性的subplot(4,1,2);plot(Showt,bipolarwave(1:ShowN)); axis([0 20 -1.2 1.2]);%单极性归零码:unipolarzerowave=zeros(1,N);for i=1:dutyradio*L %dutyradio为占空比unipolarzerowave(i+[0:M-1]*L)=randwave;endsubplot(4,1,3);plot(Showt, unipolarzerowave(1:ShowN)); axis([0 20 -1.2 1.2]);%双极性归零码bipolarzerowave=unipolarzerowave*2-1; %转换成双极性的subplot(4,1,4);plot(Showt, bipolarzerowave(1:ShowN)); axis([0 20 -1.2 1.2]);生成图像如下:此次实验产生的二进制码型是1010010011010100(可以更改),从实验结果看,与理论值是一致的。
第一个图像是单极性不归零码,第二个图像是双极性不归零码,第三个图像是单极性归零码,第四个图像是双极性归零码。
可以看出,(1)单极性不归零码“1”的表示方法:用正电平表示。
“0”的表示方法:用零电平表示。
(2)双极性不归零码“1”的表示方法:用正电平表示。
“0”的表示方法:用负电平表示。
(3)单极性归零码“1”的表示方法:半个码元周期用正电平表示,半个码元周期用零电平表示。
“0”的表示方法:半个码元周期用负电平表示,半个码元周期用零电平表示。
(4)双极性归零码“1”的表示方法:半个码元周期用正电平表示,半个码元周期用零电平表示。
“0”的表示方法:半个码元周期用负电平表示,半个码元周期用零电平表示。
(二) AMI、HDB3码时域波形实验代码:M=10000; %产生码元数L=20; %每码元复制32次dt=0.001; %采样间隔T=L*dt; %码元时间TotalT=M*T; %总时间t=0:dt:TotalT; %时间F=1/dt; %仿真频宽df=1/TotalT; %频率间隔f=-F/2:df:F/2-df; %频率N=M*L;ShowM=16; %显示码元数ShowN=ShowM*L;ShowT=(ShowN-1)*dt;Showt=0:dt:ShowT; %时间dutyradio=0.5; %占空比randwave=round(rand(1,M)); %产生二进制随机码,M为码元个数randwave(1:16)=[1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0];onessample=ones(1,L); %定义复制的次数L,L为每码元的采样点数rerandwave=randwave(onessample,:); %复制的第1行复制L次unipolarwave=reshape(rerandwave,1,L*M); %重排成1*L*M数组subplot(3,1,1);plot(Showt,unipolarwave(1:ShowN)); %绘制单极性码,便于与AMI码和HDB3码对照ylabel('单极性码');xlabel('时间(s)');axis([0 ShowT -0.2 1.2]);%AMI码生成方法amiwave=zeros(1,N);lastcode=1;for i=0:M-1if (randwave(i+1)==1) %有跳变if (lastcode==1)amiwave(i*L+1:i*L+L)=-1;lastcode=-1;elseamiwave(i*L+1:i*L+L)=1;lastcode=1;endelseamiwave(i*L+1:i*L+L)=0;endendsubplot(3,1,2);plot(amiwave); %绘制AMI码ylabel('AMI码');xlabel('时间(s)');axis([0 ShowN -1.2 1.2]);%解决HDB3码连续4个0及4个0以上的问题hdb3wave=zeros(1,N);lastcode=1; %上一个1状态vonevcount=0; %相邻V之间连1数目zerocount=0; %连零数目for i=0:M-1 %if (randwave(i+1)==1) %有跳变if (lastcode==1)hdb3wave(i*L+1:i*L+L)=-1;lastcode=-1;vonevcount=vonevcount+1;elsehdb3wave(i*L+1:i*L+L)=1;lastcode=1;vonevcount=vonevcount+1;endelsezerocount=zerocount+1;if (zerocount==4)if (mod(vonevcount,2)==1) %相邻V之间有奇数个1 if (lastcode==1) %插入000+Vhdb3wave(i*L+1:i*L+L)=1;else %插入000-Vhdb3wave(i*L+1:i*L+L)=-1;endvonevcount=0;elseif (lastcode==1) %插入-B00-Vhdb3wave((i-3)*L+1:(i-3)*L+L)=-1;hdb3wave(i*L+1:i*L+L)=-1;lastcode=-1;else %插入+B00+Vhdb3wave((i-3)*L+1:(i-3)*L+L)=+1;hdb3wave(i*L+1:i*L+L)=1;lastcode=1;endvonevcount=0;endzerocount=0;elsehdb3wave(i*L+1:i*L+L)=0;endendendsubplot(3,1,3);plot(hdb3wave); %绘制HDB3码ylabel('HDB3码');xlabel('时间(s)');axis([0 ShowN -1.2 1.2]);生成图像如下:此次实验产生的二进制码型是1000010000100000(可以更改),从实验结果看,与理论值是一致的。
第一个图像是单极性不归零码,第二个图像是AMI码,第三个图像是HDB3码。
可以看出,(1)单极性不归零码“1”的表示方法:用正电平表示。
“0”的表示方法:用零电平表示。
(2)AMI码“1”的表示方法:用正电平与负电平交替表示。
“0”的表示方法:用零电平表示。
(3)HDB3码“1”的表示方法:与AMI码一样,用正电平与负电平交替表示。
“0”的表示方法:当连续的0个数少于3个时,表示方法与AMI一样;当连续的0个数多于3个时,每4个0用B00V取代,其中,V必须要与前一个相邻的非零脉冲的极性相同,且两个V 码极性要相反,B可以取正电平、负电平、零电平,以使V的取值满足要求。
五、实验心得这次实验主要是关于基带传输常用码的编码解码方法,主要内容包括单极性非归零、双极性非归零、单极性归零、双极性归零、AMI、HDB3码的编解码。
通过实验,我对于这几种码型之间的区别与联系有了进一步的了解,之前用硬件实现过单极性非归零、双极性非归零、单极性归零、双极性归零、AMI、HDB3码的编解码。
通过此次实验,我明白了软件仿真与硬件实现的统一性,同一问题既可以用软件来实现,也可以用硬件来实现。