信道编码与扩频通信直接扩频技术是二十一世纪通信的主要潮流之一。
特别是在移动通信领域,码分多址已经成为公认的二十一世纪蜂窝式移动通信基本特征。
故而通过仿真手段讨论扩频通信与信道编码的关系,具有相当重要的现实意义。
从某种意义上说,直接扩频技术也可以看作一种信道编码的分组编码形式,编译码都是通过码序列分组和同一个PN码的乘运算实现。
应用这一思想,可以进行二进制双极性扩频通信系统的蒙特卡罗仿真。
二进制双极性扩频通信系统的蒙特卡罗仿真双用户二进制双极性扩频通信系统的蒙特卡罗仿真模型双用户二进制双极性扩频通信系统的蒙特卡罗仿真流程图为了简化二进制双极性扩频通信系统的蒙特卡罗仿真模型,使我们把主要精力真正集中于编码仿真本身,本次仿真用户数为2,PN码采用长度为30的gold码。
如上图所示,双用户二进制双极性扩频通信系统的蒙特卡罗仿真模型中还加入了正弦干扰序列发生器,以用来测试扩频技术对人为正弦干扰的抑制作用。
在双用户二进制双极性扩频通信系统的蒙特卡罗仿真流程图中,正弦干扰被视做噪声的一部分置于叠加噪声模块。
MATLAB源程序function [p1,p2]=ss_Pe94_2105(snr_in_dB,A,w)%ss_Pe94_2105.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真%snr_in_dB 信噪比%p 误码率%A 正弦干扰幅度%w 正弦干扰角频率%PN码采用长度Lc为30的gold码,Lc=length(gold)=30snr=10^(snr_in_dB/10);sgma=1;Eb=2*sgma^2*snr;N=10^5; %仿真序列长度10^5,运行时间约3分钟p1=0;p2=0;gold1=[0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0];gold2=[0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1];Lc=length(gold1); %Lc=30;pn_seq1=2*gold1-1;pn_seq2=2*gold2-1;E_chip=Eb/Lc;temp=0;data1=0;data2=0;repeated_data1=zeros(1,Lc);repeated_data2=zeros(1,Lc);trans_sig1=zeros(1,Lc);trans_sig2=zeros(1,Lc);noise=zeros(1,Lc);n=1:Lc;interference=zeros(1,Lc);rec_sig=zeros(1,Lc);temp1=zeros(1,Lc);temp2=zeros(1,Lc);decision_variable1=0;decision_variable2=0;decision1=0;decision2=0;num_of_err_1=0;num_of_err_2=0;time=0;for i=1:Ntemp=rand;if (temp<0.5)data1=-1;elsedata1=1;endfor j=1:Lcrepeated_data1(j)=data1;endtrans_sig1=sqrt(E_chip)*repeated_data1.*pn_seq1;temp=rand;if (temp<0.5)data2=-1;elsedata2=1;endfor j=1:Lcrepeated_data2(j)=data2;endtrans_sig2=sqrt(E_chip)*repeated_data2.*pn_seq2; noise=sgma*randn(1,Lc);time=time+1,n=(time-1)*Lc+1:time*Lc;interference=A*sin(w*n);rec_sig=trans_sig1+trans_sig2+noise+interference; temp1=rec_sig.*pn_seq1;decision_variable1=sum(temp1);if (decision_variable1<0)decision1=-1;elsedecision1=1;endif (decision1~=data1)num_of_err_1=num_of_err_1+1;endtemp2=rec_sig.*pn_seq2;decision_variable2=sum(temp2);if (decision_variable2<0)decision2=-1;elsedecision2=1;endif (decision2~=data2)num_of_err_2=num_of_err_2+1;endendnum_of_err_1,num_of_err_2,p1=num_of_err_1/N;p2=num_of_err_2/N;%ss_Pe94_2105.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真echo on%cd94_2_030_105.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真绘图%PN码采用长度Lc为30的gold码,Lc=length(gold)=30%仿真序列长度10^5,运行时间约1小时A1=3;A2=7;A3=12;A4=0;%A1 A2 A3 A4 正弦干扰幅度w0=1;%w0 正弦干扰角频率SNRindB=0:2:30;for i=1:length(SNRindB)[smld_err_prb11(i),smld_err_prb12(i)]=ss_Pe94_2105(SNRindB(i),A1,w0);[smld_err_prb21(i),smld_err_prb22(i)]=ss_Pe94_2105(SNRindB(i),A2,w0);[smld_err_prb31(i),smld_err_prb32(i)]=ss_Pe94_2105(SNRindB(i),A3,w0);[smld_err_prb41(i),smld_err_prb42(i)]=ss_Pe94_2105(SNRindB(i),A4,w0);end;%绘图函数semilogy(SNRindB,smld_err_prb11,'mx-');title('双用户二进制双极性扩频通信系统的蒙特卡罗仿真')axis([0,30,10^(-5),1])hold onsemilogy(SNRindB,smld_err_prb12,'mo-');semilogy(SNRindB,smld_err_prb21,'gx-');semilogy(SNRindB,smld_err_prb22,'go-');semilogy(SNRindB,smld_err_prb31,'kx-');semilogy(SNRindB,smld_err_prb32,'ko-');semilogy(SNRindB,smld_err_prb41,'rx-');semilogy(SNRindB,smld_err_prb42,'ro-');%绘图函数SNRindB2=0:0.1:30;theo_err_prb=zeros(1,length(SNRindB2));for i=1:length(SNRindB2)SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(2*SNR));%Qfunct y=(1/2)*erfc(x/sqrt(2)); 理论误码率公式endsemilogy(SNRindB2,theo_err_prb,'b:'); %绘图函数%cd94_2_030_105.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真绘图运行结果下图(cd94_2_030_105的运行结果)给出了不同信噪比条件(0dB-30dB)和不同幅度(A1=3、A2=7、A3=12、A4=0)正弦干扰下,发送100000比特的双用户二进制双极性扩频通信系统的蒙特卡罗仿真结果以及理论值曲线。
从仿真结果来看,无正弦干扰下的蒙特卡罗仿真结果与理论值曲线吻合程度好的令人惊叹,仿真中两用户在同一信道真正实现了和平共处,因此用蒙特卡罗仿真模型来模拟实际双用户二进制双极性扩频通信系统,是可以被接受的;同时可以看出,扩频技术对人为的正弦干扰具有抑制能力,并且对于同样的人为正弦干扰,不同gold码的抑制干扰能力相对来说也有高下之分,在本次仿真中,用户1使用的gold码抑制正弦干扰能力更强。
级联码对双用户二进制双极性扩频系统误码性能的改善无正弦干扰下的仿真结果和扩频理论都已经说明,从单个用户角度来看,双用户二进制双极性扩频通信系统和原来的单用户二进制双极性通信系统是相同的。
于是我们可以推论,在双用户二进制双极性扩频通信系统中对上文各种信道编码性能测试结果,也将和前面的测试结果相同,即按照误码率性能指标,信道编码的最好方案是级联码。
另外,考虑到实际应用信道编码时通常采用级联码,本次双用户二进制双极性扩频通信系统中的信道编码仿真采用了级联码。
在双用户二进制双极性扩频通信系统的蒙特卡罗仿真模型框图中加入级联码的编译码器,就构成了测试级联码对双用户二进制双极性扩频通信系统误码性能改善的蒙特卡罗仿真模型,系统框图如下:双用户二进制双极性扩频级联码通信系统的蒙特卡罗仿真模型双用户二进制双极性扩频级联码通信系统的蒙特卡罗仿真流程图MATLAB源程序function [p1,p2]=ss_Pe94_2(snr_in_dB,A,w)%ss_Pe94_2.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真函数%snr_in_dB 信噪比%p 误码率%A 正弦干扰幅度%w 正弦干扰角频率%PN码采用长度Lc为30的gold码,Lc=length(gold)=30snr=10^(snr_in_dB/10);sgma=1;Eb=2*sgma^2*snr;N=16; %Nloop=10^4; %loopNs=N*loop1*loop2; %仿真序列长度loop*N=16*10^4,运行时间约5分钟p1=0;p2=0;gold1=[0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0]; gold2=[0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1]; Lc=length(gold1); %Lc=30;pn_seq1=2*gold1-1;pn_seq2=2*gold2-1;E_chip=Eb/Lc;temp=0;data1=0;data2=0;repeated_data1=zeros(1,Lc);repeated_data2=zeros(1,Lc);trans_sig1=zeros(1,Lc);trans_sig2=zeros(1,Lc);noise=zeros(1,Lc);n=1:Lc;interference=zeros(1,Lc);rec_sig=zeros(1,Lc);temp1=zeros(1,Lc);temp2=zeros(1,Lc);decision_variable1=0;decision_variable2=0;decision1=0;decision2=0;num_of_err_1=0;num_of_err_2=0;time=0;for h=1:loopfor i=1:Ntemp=rand;if (temp<0.5)data1=-1;elsedata1=1;endfor j=1:Lcrepeated_data1(j)=data1;endtrans_sig1=sqrt(E_chip)*repeated_data1.*pn_seq1; temp=rand;if (temp<0.5)data2=-1;elsedata2=1;endfor j=1:Lcrepeated_data2(j)=data2;endtrans_sig2=sqrt(E_chip)*repeated_data2.*pn_seq2; noise=sgma*randn(1,Lc);time=time+1,n=(time-1)*Lc+1:time*Lc;interference=A*sin(w*n);rec_sig=trans_sig1+trans_sig2+noise+interference;temp1=rec_sig.*pn_seq1;decision_variable1=sum(temp1);if (decision_variable1<0)decision1=-1;elsedecision1=1;endif (decision1~=data1)num_of_err_1=num_of_err_1+1;endtemp2=rec_sig.*pn_seq2;decision_variable2=sum(temp2);if (decision_variable2<0)decision2=-1;elsedecision2=1;endif (decision2~=data2)num_of_err_2=num_of_err_2+1;endendendnum_of_err_1,num_of_err_2,p1=num_of_err_1/Ns;p2=num_of_err_2/Ns;%ss_Pe94_2.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真函数function [p1,p2]=ss_Pe94_2_cnv_jz_74(snr_in_dB,A,w)%ss_Pe94_2_cnv_jz_74.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真函数%snr_in_dB 信噪比%p 误码率%A 正弦干扰幅度%w 正弦干扰角频率%PN码采用长度Lc为30的gold码,Lc=length(gold)=30snr=10^(snr_in_dB/10);sgma=1;Eb=2*sgma^2*snr;N=16; %Nloop=10^4; %loopNs=N*loop; %仿真序列长度Ns=loop*N=16*10^4,运行时间约15分钟dsource1=zeros(1,N); dsource2=zeros(1,N);output1_h74=hamming74(dsource1);output2_h74=hamming74(dsource2);G=[1 0 1 1 ; 1 1 1 1 ];k=1;output_cnv_encd1=cnv_encd(G,k,output1_h74);output_cnv_encd2=cnv_encd(G,k,output2_h74);channel_output1=zeros(1,length(output_cnv_encd2));channel_output2=zeros(1,length(output_cnv_encd2));[decoder_output1,survivor_state1,cumulated_metric1]=viterbi(G,k,channel_output1) ;[decoder_output2,survivor_state2,cumulated_metric2]=viterbi(G,k,channel_output2) ;[h4output1,h7output1]=h47(decoder_output1);[h4output2,h7output2]=h47(decoder_output2);p1=0;p2=0;numoferr1=0;numoferr2=0;num_of_err_1=0;num_of_err_2=0;cnv_jz_74_time=0;gold1=[0 1 1 1 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 1 0 1 1 1 1 0 0 0 0 0];gold2=[0 1 0 1 1 0 1 1 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 0 0 1];Lc=length(gold1); %Lc=30;pn_seq1=2*gold1-1;pn_seq2=2*gold2-1;E_chip=Eb/Lc;temp=0;data1=0;data2=0;repeated_data1=zeros(1,Lc);repeated_data2=zeros(1,Lc);trans_sig1=zeros(1,Lc);trans_sig2=zeros(1,Lc);noise=zeros(1,Lc);n=1:Lc;interference=zeros(1,Lc);rec_sig=zeros(1,Lc);temp1=zeros(1,Lc);temp2=zeros(1,Lc);decision_variable1=0;decision_variable2=0;decision1=0;decision2=0;for h=1:loopfor i=1:Ntemp=rand;if (temp<0.5)dsource1(i)=0;elsedsource1(i)=1;endtemp=rand;if (temp<0.5)dsource2(i)=0;elsedsource2(i)=1;endend%length(dsource) 28output1_h74=hamming74(dsource1);output2_h74=hamming74(dsource2);output1_jz28=jiaozhi(output1_h74,28);output2_jz28=jiaozhi(output2_h74,28);output_cnv_encd1=cnv_encd(G,k,output1_jz28);output_cnv_encd2=cnv_encd(G,k,output2_jz28);%length(output_cnv_encd),pausefor m=1:length(output_cnv_encd1)%=length(output_cnv_encd2) data1=2*output_cnv_encd1(m)-1;data2=2*output_cnv_encd2(m)-1;for j=1:Lcrepeated_data1(j)=data1;repeated_data2(j)=data2;endtrans_sig1=sqrt(E_chip)*repeated_data1.*pn_seq1;trans_sig2=sqrt(E_chip)*repeated_data2.*pn_seq2;noise=sgma*randn(1,Lc);cnv_jz_74_time=cnv_jz_74_time+1;n=(cnv_jz_74_time-1)*Lc+1:cnv_jz_74_time*Lc;interference=A*sin(w*n);rec_sig=trans_sig1+trans_sig2+noise+interference;%temp1=rec_sig.*pn_seq1;decision_variable1=sum(temp1);if (decision_variable1<0)decision1=-1;elsedecision1=1;endif (decision1~=data1)num_of_err_1=num_of_err_1+1;end%temp2=rec_sig.*pn_seq2;decision_variable2=sum(temp2);if (decision_variable2<0)decision2=-1;elsedecision2=1;endif (decision2~=data2)num_of_err_2=num_of_err_2+1;end%channel_output1(m)=(decision1+1)/2;channel_output2(m)=(decision2+1)/2;%end[decoder_output1,survivor_state1,cumulated_metric1]=viterbi(G,k,channel_output1) ;[decoder_output2,survivor_state2,cumulated_metric2]=viterbi(G,k,channel_output2) ;[decoder_output1_jjz28]=jiejiaozhi(decoder_output1,28);[decoder_output2_jjz28]=jiejiaozhi(decoder_output2,28);[h4output1,h7output1]=h47(decoder_output1_jjz28);[h4output2,h7output2]=h47(decoder_output2_jjz28);for i=1:N%=length(dsource1)=length(dsource2)if(h4output1(i)~=dsource1(i))numoferr1=numoferr1+1;endif(h4output2(i)~=dsource2(i))numoferr2=numoferr2+1;endendendnum_of_err_1,numoferr1,num_of_err_1-numoferr1,num_of_err_2,numoferr2,num_of_err_2-numoferr2,p1=numoferr1/Ns;p2=numoferr2/Ns;%ss_Pe94_2_cnv_jz_74.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真函数echo on%cd94_2_0216_jz.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真绘图%仿真序列长度Ns=loop*N=16*10^4,运行时间约12小时A1=3;A2=7;A3=12;A4=0;%A1 A2 A3 A4 正弦干扰幅度w0=1;%w0 正弦干扰角频率SNRindB=0:2:16;smld_err_prb110=zeros(1,length(SNRindB));smld_err_prb120=zeros(1,length(SNRindB));smld_err_prb210=zeros(1,length(SNRindB));smld_err_prb220=zeros(1,length(SNRindB));smld_err_prb310=zeros(1,length(SNRindB));smld_err_prb320=zeros(1,length(SNRindB));smld_err_prb410=zeros(1,length(SNRindB));smld_err_prb420=zeros(1,length(SNRindB));smld_err_jz_prb11=zeros(1,length(SNRindB));smld_err_jz_prb12=zeros(1,length(SNRindB));smld_err_jz_prb21=zeros(1,length(SNRindB));smld_err_jz_prb22=zeros(1,length(SNRindB));smld_err_jz_prb31=zeros(1,length(SNRindB));smld_err_jz_prb32=zeros(1,length(SNRindB));smld_err_jz_prb41=zeros(1,length(SNRindB));smld_err_jz_prb42=zeros(1,length(SNRindB));for i=1:length(SNRindB)i,SNRindB(i),[smld_err_prb110(i),smld_err_prb120(i)]=ss_Pe94_2(SNRindB(i),A1,w0);[smld_err_prb210(i),smld_err_prb220(i)]=ss_Pe94_2(SNRindB(i),A2,w0);[smld_err_prb310(i),smld_err_prb320(i)]=ss_Pe94_2(SNRindB(i),A3,w0);[smld_err_prb410(i),smld_err_prb420(i)]=ss_Pe94_2(SNRindB(i),A4,w0);end;for i=1:length(SNRindB)i,SNRindB(i),[smld_err_jz_prb11(i),smld_err_jz_prb12(i)]=ss_Pe94_2_cnv_jz_74(SNRindB(i),A1,w0 );[smld_err_jz_prb21(i),smld_err_jz_prb22(i)]=ss_Pe94_2_cnv_jz_74(SNRindB(i),A2,w0 );[smld_err_jz_prb31(i),smld_err_jz_prb32(i)]=ss_Pe94_2_cnv_jz_74(SNRindB(i),A3,w0 );[smld_err_jz_prb41(i),smld_err_jz_prb42(i)]=ss_Pe94_2_cnv_jz_74(SNRindB(i),A4,w0 );end;%绘图函数figure;semilogy(SNRindB,smld_err_jz_prb42,'r>:');axis([0,16,1e-5,1]);xlabel('Eb/N0 in dB');ylabel('Pe');title('双用户级联编码及未编码扩频系统仿真误比特率曲线比较');hold onsemilogy(SNRindB,smld_err_jz_prb11,'m<:');semilogy(SNRindB,smld_err_jz_prb12,'m>:');semilogy(SNRindB,smld_err_jz_prb21,'g<:');semilogy(SNRindB,smld_err_jz_prb22,'g>:');semilogy(SNRindB,smld_err_jz_prb31,'k<:');semilogy(SNRindB,smld_err_jz_prb32,'k>:');semilogy(SNRindB,smld_err_jz_prb41,'r<:');semilogy(SNRindB,smld_err_jz_prb42,'r>:');semilogy(SNRindB,smld_err_prb110,'mx-');semilogy(SNRindB,smld_err_prb120,'mo-');semilogy(SNRindB,smld_err_prb210,'gx-');semilogy(SNRindB,smld_err_prb220,'go-');semilogy(SNRindB,smld_err_prb310,'kx-');semilogy(SNRindB,smld_err_prb320,'ko-');semilogy(SNRindB,smld_err_prb410,'rx-');semilogy(SNRindB,smld_err_prb420,'ro-');%绘图函数SNRindB2=0:0.1:16;theo_err_prb=zeros(1,length(SNRindB2));for i=1:length(SNRindB2)SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(2*SNR));%Qfunct y=(1/2)*erfc(x/sqrt(2)); 理论误码率公式endhold onsemilogy(SNRindB2,theo_err_prb,'b:'); %绘图函数%cd94_2_0216_jz.m 双用户二进制双极性扩频通信系统的蒙特卡罗仿真绘图运行结果下图(cd94_2_0216_jz的运行结果)给出了不同信噪比条件(0dB-16dB)和不同幅度(A1=3、A2=7、A3=12、A4=0)正弦干扰下,发送160000比特的双用户二进制双极性扩频级联码( 外编码采用(7,4)HAMMING码,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码) 通信系统和未编码的双用户二进制双极性扩频通信系统蒙特卡罗仿真结果以及理论值曲线。