第1页共9页AMI、HDB3、密勒码编码实现——matlab仿真模拟【任务描述】A.产生一个长为1000的二进制随机序列,“0”的概率为0.8,”1”的概率为0.2;B.对上述数据进行归零AMI编码,脉冲宽度为符号宽度的50%,波形采样率为符号率的8倍,画出前20个符号对应的波形(同时给出前20位信源序列);C.改用HDB3码,画出前20个符号对应的波形;D.改用密勒码,画出前20个符号对应的波形;E.分别对上述1000个符号的波形进行功率谱估计,画出功率谱;F.改变信源“0”的概率,观察AMI码的功率谱变化情况;【基本思路】采用调用子函数的方法,在掌握了各种码的编码规律之后实现编码功能。具体实现了AMI码、HDB3码以及密勒码的编码。而且调用了功率谱函数spectrum对各种码的功率谱以及不同信源概率下的功率谱进行了比较。下面就详细介绍各种码形的变换思路:1.AMI码AMI码中信息码“0”对应着三元码序列中的“0”,信息码“1”则交替地变换为“+1”和“-1”的归零码。2.HDB3码在AMI码的基础上,当出现多于3个零的情况,利用其检错能力,使用异常代替长连零,以平衡码中的极性使得直流分量为0。3.密勒码密勒码中使用码元周期中点的跳变来代表“1”,当出现连续的“0”时出现电平跳变,否则码元周期内不出现跳变。【程序清单】Code.m:完成产生随机0、1序列并且将其用波形表示的功能。AMI_Code.m:将随机序列转换为AMI码HDB3_Code.m:将随机序列转换为HDB3码Miller_Code.m:将随机序列转换为密勒码Plot_spectrum.m:使用库函数绘制功率谱曲线【仿真分析】第2页共9页1.前20个符号所对应的各种码形在一次的仿真中随机产生的前20个符号为:00000000001100100010显然,NRZ(L)码的波形即为原始的序列信息码对应的AMI码为:00000000001-1001000-10对应的HDB3码为:1001-100-1001-1001000-10对应的密勒码为:0011001100110011001110011100011100111000可以看出:编码结果完全正确!2.四种码形的功率谱第3页共9页3.不同概率‘0’下AMI码形功率谱变化第4页共9页第5页共9页第6页共9页【程序代码】figuresubplot(3,1,1)plot(x_t(1:20*8))axis([1,20*8,-1.5,1.5]);title('initialcode')subplot(3,1,2)plot(y_AMI(1:20*8))axis([1,20*8,-1.5,1.5]);title('AMIcode')subplot(3,1,3)plot(y_HDB3(1:20*8))axis([1,20*8,-1.5,1.5]);title('HDB3code')figureplot_spectrum(x_t,'b');holdonplot_spectrum(y_AMI,'r');第7页共9页plot_spectrum(y_HDB3,'g');title('PowerspectrumofNRZ,AMIandHDB3Code')legend('NRZ','AMI','HDB3')%Code.mN=1000;fs=8;x=ceil(rand(1,N)-0.8);AMI=AMI_Code(x);HDB3=HDB3_Code(x);Miller=Miller_Code(x);y=zeros(1,N*fs);x_t=zeros(1,N*fs);y_AMI=zeros(1,N*fs);y_HDB3=zeros(1,N*fs);y_Miller=zeros(1,N*fs);fori=1:N*fsif(mod(i-1,8)=5&mod(i-1,8)=2)y(i)=1;elsey(i)=0;end%分别给画图序列赋值y_AMI(i)=y(i)*AMI(ceil(i/8));y_HDB3(i)=y(i)*HDB3(ceil(i/8));y_Miller(i)=Miller(ceil(i/4));x_t(i)=x(ceil(i/8));end%AMI_Code.mfunctionAMI=AMI_Code(x)m=length(x);%初始化AMI编码AMI=zeros(1,m);%反转标志初始化f=0;fori=1:m%若原码为0,直接将AMI码置0ifx(i)==0AMI(i)=0;第8页共9页%否则,使得AMI码交替为+1,-1elsef=XOR(f,1);AMI(i)=2*f-1;endendreturn;%HDB3.mfunctionHDB3=HDB3_Code(x)m=length(x);%初始化HDB3编码HDB3=zeros(1,m);%初始化信息“1”标志B和连0数标志VB=-1;V=-1;i=1;while(i=m-3)%若原码为1,交替为+1,-1if(x(i)==1)HDB3(i)=-1*B;B=HDB3(i);i=i+1;else%原码只有一个0if(x(i+1)==1)HDB3(i)=0;HDB3(i+1)=-1*B;B=HDB3(i+1);i=i+2;else%原码有两个连续0if(x(i+2)==1)HDB3(i)=0;HDB3(i+1)=0;HDB3(i+2)=-1*B;B=HDB3(i+2);i=i+3;else%原码有三个连续0if(x(i+2)==1)HDB3(i)=0;HDB3(i+1)=0;HDB3(i+2)=0;HDB3(i+3)=-1*B;第9页共9页B=HDB3(i+3);i=i+4;%原码出现了四个连续0else%原始B、V标志不相同if(Xor(B,V))HDB3(i)=01;HDB3(i+1)=0;HDB3(i+2)=0;HDB3(i+3)=B;V=B;i=i+4;%B、V标志相同elseHDB3(i)=-1*B;HDB3(i+1)=0;HDB3(i+2)=0;HDB3(i+3)=-1*B;B=-1*B;V=B;i=i+4;endendendendendendforj=i:mif(x(j)==1)HDB3(j)=-1*B;B=HDB3(j);elseHDB3(j)=0;endendreturn;%plot_spectrum.mfunctionplot_spectrum(x,str)P=spectrum(x,8000,0,hanning(300));plot(10*log10(P(:,1)),str);return;functionplot_spectrum(x,str)P=spectrum(x,8000,0,hanning(300));plot(10*log10(P(:,1)),str);return;