通信系统原理综合性、设计性实验报告基于MATLAB的CDMA系统仿真学院:物理与电信工程学院年级:指导老师:时间:2014年6月一、实验目的MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,本次实验利用MATLAB平台功能,并结合CDMA的实际通信情况,利用MATLAB组建出完整的CDMA通信系统,完成整体设计方案,实现完整的发送到接收的端到端的CDMA无线通信系统的建模、仿真和分析。
关键字:MATLAB CDMA 仿真二、实验原理2.1 CDMA的基本原理CDMA是指在各发送端使用不相同、相互(准)正交的地址码调制所传送的信息,而在接收端在利用码型的(准)正交性,通过相关检测,从混合信号中选出相应的信号的一种技术。
实现CDMA的理论基础是扩频通信,即在发送端将待发送的数据用伪随机码进行调制,实现频谱扩展,然后进行传输,而在接收端则采用同样的编码进行解扩及相关处理,恢复原始的数据信息。
扩频通信有直接序列(DS)、跳频(FH)、线性调频(chrip)、跳时(TH)等方式。
采用扩频通信的优点很多,如抗干扰、抗噪声、抗多径衰落的能力强,能在低功率谱密度下工作,保密性好、可多址复用和任意选址及进行高度测量等等。
2.2 CDMA 的系统框图2.3 交织编码的原理交织编码的目的是把一个较长的突发差错离散成随机差错,再用纠正随机差错的编码(FEC )技术消除随机差错。
交织深度越大,则离散度越大,抗突发差错能力也就越强。
但交织深度越大,交织编码处理时间越长,从而造成数据传输时延增大,也就是说,交织编码是以时间为代价的。
因此,交织编码属于时间隐分集。
在实际移动通信环境下的衰落,将造成数字信号传输的突发性差错。
利用交织编码技术可离散并纠正这种突发性差错,改善移动通信的传输特性。
2.4 卷积编码的原理卷积码编码的当前输出v(l)不仅与当前输入消息u(l)相关,还与此去前输入的m个消息u(l-1),…,u(l-m)相关,即v(l)=f(u(l),u(l-1),…,u(l-m)),l=0,1,2…卷积编码电路中移位寄存器初态可设定为全0,电路为按段工作方式,即对每段k比特输出入,产生一段n比特输出。
任意一输入段u(l-h)与输出v(l)的关系都是一个特殊的(n,k)线性分组码的编码关系,即存在k n的二元矩阵Gh,使得v(l)=u(l-h)Gh,h=0,1,2,…,m因此对于消息段序列u=(u(0),u(1),…,u(m),u(m+1),…),相应的输出端序列为v=(v(0),v(1),…,v(m),v(m+1),…),并满足v(0)=u(0)G0卷积编码电路在按段工作方式下只需存储或者记忆m段的消息输入,电路中输入移位寄存器最多只有km串转换作用。
因此称参量m为卷积码的记忆长度,下图为原理图2.5扩频通信的原理扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息所需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接受、解扩及恢复所传信息数据。
扩频通信理论基础香农公式:C=Wlog2(1+S/N)1、在给定的传输速率C不变的条件下,频带宽度W和信噪比S/N是可以互换的。
即可通过增加频带宽度的方法,在较低的信噪比情况下,传输信息。
2、扩展频谱换取信噪比要求的降低,正是扩频通信的重要特点,并由此为扩频通信的应用奠定了基础。
2.6 DPSK调制解调的原理DPSK,即差分移相键控,是数字调制方式的一种。
差分移相键控(DPSK):Differential Phase Shift Keying 利用调制信号前后码元之间载波相对相位的变化来传递信息。
用于光传输系统中对DPSK调制信号的接收解调。
DPSK是一个1 Bit延迟器,输入一个信号,可以得到两路相差一个比特的信号,形成信号对DPSK信号进行相位解调,实现相位到强度的转化。
三、MATLAB仿真实现3.1 交织编码3.2 卷积编码与解卷积(2,1,3)卷积编码function output = convolutionX( X )%UNTITLED Summary of this function goes here% Detailed explanation goes heren=length(X); %取得输入序列的长度%%%%%%%%%%%%%%%%%%%%%画出输入波形%%%%%%%%%%%%%n1=0.01:0.01:n;for(i=1:n)is((i-1)*100+1:i*100)=X(i);endfiguresubplot(2,1,1)plot(n1,is);axis([0,n+1,-0.1,1.1]);title('原始信号')gridY=[0 0 0]; %寄存器初始值置为全0for(i=1:n) %进行序列移位,得到卷积的序列Y(1)=Y(2);Y(2)=Y(3);Y(3)=X(i);Y;output(2*(i-1)+1)=mod(sum(Y),2); %三个寄存器模二相加output(2*(i-1)+2)=mod((Y(1)+Y(3)),2);%第一、三寄存器模二相加endoutput;%%%%%%%%%%%%%%%%%%%%%%画出卷积波形%%%%%%%%%%%%%%%%%%%a=length(output);a;t=0.01:0.01:a;for(i=1:a)st(((i-1)*100+1):i*100)=output(i);endst;subplot(2,1,2)plot(t,st);axis([0,a+1,-0.1,1.1]);title('卷积波形')gridend解卷积函数:维特比解码function Z = deconvolution(X)%UNTITLED Summary of this function goes here% Detailed explanation goes heren=length(X);Z=zeros(1,n);a=n/2; %解卷积输出序列长度M=zeros(2^a,a);%初始化存放解卷积的可能序列矩阵Y=zeros(2^a,n);%初始化维特比对比的可能序列矩阵%%%%%%%%%%%%%%产生所有的可能序列%%%%%%%%%%5for(i=1:2^a)M(i,:)=de2bi(i-1,a);%把十进制转化为二进制Y(i,:)=encoding(M(i,:));%进行卷积编码m(i)=distance(Y(i,:),X); %取得每个序列对比的汉明距endb=min(m); %%%%%%%%%取得汉明距最小的值b;%%%%%%%根据得到的最小汉明距进行译码%%%%%%%%%for(i=1:2^a)if(b==m(i))Z=de2bi(i-1,a);endend%%%%%%%%%%%画出译码的波形%%%%%%%%%%%%%%%t=0.01:0.01:a;st=zeros(1,100*a);for(i=1:a)st(((i-1)*100+1):i*100)=Z(i);endZ;figure%subplot(2,1,2)plot(t,st);axis([0,a+1,-0.1,1.1]);title('解卷积波形')gridend3.3 M序列的产生function mseq=m_sequence(fbconnection,register) %fbconnectionΪ·´À¡ÏµÊý£¬registerΪ³õʼ״̬n = length(fbconnection);N = 2^n-1; %mÐòÁеij¤¶Èmseq(1)= register(n); %mÐòÁеĵÚÒ»¸öÊä³öÂëÔªfor i = 2:Nnewregister(1)= mod(sum(fbconnection.*register),2);%¼Ä´æÆ÷Óë·´À¡µÄÄ£2ºÍfor j = 2:nnewregister(j)= register(j-1);end;register = newregister; %ÒÆÎ»ºóµÄ¼Ä´æÆ÷mseq(i) = register(n); %еļĴæÆ÷Êä³öend3.4 DPSK调制与解调function z=dpsk(X)%UNTITLED2 Summary of this function goes here% Detailed explanation goes herefs=200; %取样频率w=25; %载波角频率n=length(X); %获取序列的长度t=1:100;nn=1:100;n1=0.01:0.01:n;%os=zeros(1,100);for(i=1:n)is((i-1)*100+1:i*100)=X(i); %将每个信息码元用100个点表示,存储到is数组,提高精度。
st((i-1)*100+1:i*100)=0; %定义调制后的信息码存放的数组st,并初始化。
endfor(nn=1:100) %定义两个角频率相同,相位相反的正玄波oss(nn)=sin(2*pi*w*(t(nn )/100));osc(nn)=sin(2*pi*w*(t(nn)/100)+pi);end%figure%subplot(2,1,1)%plot(t/100,oss);%axis([0,n+1,-1.1,1.1]);%title('信号波形1')%grid%subplot(2,1,2)%plot(t/100,osc);%axis([0,n+1,-1.1,1.1]);%title('信号波形2')%gridfor(i=1:n) %调制if(X(i)==1)for(nn=1:100)st(100*(i-1)+nn)=oss(nn); %码元为1的点用oss填充endelsefor(nn=1:100)st(100*(i-1)+nn)=osc(nn); %码元为0的点用osc填充endendendst;figuresubplot(2,1,1)plot(n1,is);axis([0,n+1,-0.1,1.1]);title('原始信号')gridsubplot(2,1,2)plot(n1,st);axis([0,n+1,-1.1,1.1]);title('调制信号')grid%%%%%%%%%%%%%%%%%%%%%高斯白噪声信道tt=0.01:0.01:n;stt=awgn(st,5);figureplot(tt,stt);axis([0,n+1,-1.5,1.5]);title('通过高斯信道后的信号');grid%-------------------------------------加噪声及低通滤波--------------------------------------------- dt=stt.*sin(2*pi*w*tt); %乘以同频率载波,为滤波做准备figuresubplot(2,1,1)plot(tt,dt);axis([0,n+1,-1.5,1.5]);title('相乘后的波形');grid%-----------------------------------------低通滤波器-------------------------------------------------- [N,Wn]=buttord(2*pi*25,2*pi*50,3,25,'s'); %临界频率采用角频率表示[b,a]=butter(N,Wn,'s');[bz,az]=impinvar(b,a,fs); %映射为数字,得到filter函数的参数dt=filter(bz,az,dt); %数字低通滤波器subplot(2,1,2)%15?plot(tt,dt);axis([0,n+1,-1.5,1.5]);title('低通滤波后的波形');grid%---------------------------------------抽样判决------------------------------------------dt1=0;dt2=0;for(i=1:n)for(j=1:100)% if(dt(100*(i-1)+j)>0)% dt1= dt1+1;% else dt1=dt1;dt1=dt1+dt(100*(i-1)+j);% end% dt2=dt1/100;enddt2=dt1/100; %取平均值判断,若大于0,则判决为高电平,否则为低电平if(dt2>0)dtt(100*(i-1)+1:100*i)=1;dt2=0;dt1=0;else dtt(100*(i-1)+1:100*i)=0;dt2=0;dt1=0;endendfigure%subplot(2,1,2)plot(tt,dtt);axis([0,n+1,-0.1,1.1]);title('判决后的波形');grid%------------------------------------------逆码变换后的序列------------------------------------------- z=zeros(1,n);for(i=1:n)if(dtt(100*(i-1)+50)==1)z(i)=1;else z(i)=0;endendz;end3.5 主函数s0 = randint(1,56);%s0 Ëæ»úÐÅÔ´%s1 ½»Ö¯±àÂëºóµÄ¾ØÕó%s2 ½»Ö¯±àÂëºóµÄÐòÁÐ%s3 ¾í»ý±àÂëºóµÄ¾ØÕó%s4 À©ÆµºóµÄ¾ØÕó%s5 À©ÆµºóµÄÐòÁÐ%s6 DPSK½âµ÷ºóµÄÐòÁÐ%s7 ¾í»ý½âÂëµÄ¾ØÕó%s8 ½»Ö¯½âÂëǰµÄ¾ØÕó%s9 ÊÕµ½µÄÐòÁÐs1 = (reshape(s0,7,8)); %½»Ö¯±àÂëfor j=1:8s2(j) = s1(1,j);endfor j=1:8s2(j+8) = s1(2,j);endfor j=1:8s2(j+8*2) = s1(3,j);endfor j=1:8s2(j+8*3) = s1(4,j);endfor j=1:8s2(j+8*4) = s1(5,j);endfor j=1:8s2(j+8*5) = s1(6,j);endfor j=1:8s2(j+8*6) = s1(7,j);ends3 = zeros(7,16); %¾í»ý±àÂëfor i=1:7s3(i,:) = convolutionX(s2(((i-1)*8+1):(i*8))); ends4 = zeros(7,112); %À©Æµstart = zeros(7,7);fbconnection = [0 0 0 0 0 1 1];for i=1:7if(i==1)start(i,:) = [0 0 0 0 0 0 1];else if(i==2)start(i,:) = [0 0 0 0 0 1 1];else if(i==3)start(i,:) = [0 0 0 0 1 1 1];else if(i==4)start(i,:) = [0 0 0 1 1 1 1];else if(i==5)start(i,:) = [0 0 1 1 1 1 1];else if(i==6)start(i,:) = [0 1 1 1 1 1 1];elsestart(i,:) = [1 1 1 1 1 1 1];endendendendendendmseq=m_sequence(fbconnection,start(i,:)); for j=1:16f = s3(i,j);for k=1:7a = sign(mseq((j-1)*7+k)-0.5);b = sign(f-0.5);c = -a.*b;d = sign(c+1);s4(i,((j-1)*7+k)) = d;endendendfor j=1:112s5(j) = s4(1,j);endfor j=1:112s5(j+112) = s4(2,j);for j=1:112s5(j+112*2) = s4(3,j);endfor j=1:112s5(j+112*3) = s4(4,j);endfor j=1:112s5(j+112*4) = s4(5,j);endfor j=1:112s5(j+112*5) = s4(6,j);endfor j=1:112s5(j+112*6) = s4(7,j);ends6 = dpsk(s5); %DPSKµ÷ÖÆs7 = zeros(7,16); %½âÀ©for i=1:7if(i==1)start(i,:) = [0 0 0 0 0 0 1];else if(i==2)start(i,:) = [0 0 0 0 0 1 1];else if(i==3)start(i,:) = [0 0 0 0 1 1 1];else if(i==4)start(i,:) = [0 0 0 1 1 1 1];else if(i==5)start(i,:) = [0 0 1 1 1 1 1];else if(i==6)start(i,:) = [0 1 1 1 1 1 1];elsestart(i,:) = [1 1 1 1 1 1 1];endendendendendendmseq=m_sequence(fbconnection,start(i,:)); for j=1:16for k=1:7a = sign(mseq((j-1)*7+k)-0.5);b = sign(s6(112*(i-1)+7*(j-1)+k)-0.5);c = -a.*b;d(k) = sign(c+1);endif(d(1)==d(2)==d(3)==d(4)==d(5)==d(6)==d(7)) s7(i,j) = d(1);endendends8 = zeros(7,8); %¾í»ý½âÂëfor i=1:7s8(i,:) = deconvolution(s7(i,:));ends9 = (reshape(s8,1,56)); %½»Ö¯½âÂëkkk=0;for(i=1:7)for(j=1:8)if(s1(i,j)~=s8(i,j))kkk=kkk+1;else kkk=kkk;endendbbb=kkk;endbbb四、仿真结果信源序列交织编码后的矩阵序列卷积编码后的矩阵序列扩频后的序列DPSK调制载波DPSK调制后的信号波形DPSK低通滤波后的信号波形DPSK解调后的序列扩频解扩后的序列卷积解码后的序列信宿收到的序列五、CDMA系统分析本次综设设计的CDMA系统,源信元采用56位的数字信号,码速率为56 bps/s 。