《CDMA通信系统仿真.doc》由会员分享,可在线阅读,更多相关《CDMA通信系统仿真.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、扩频通信仿真1. 设计思想为了研究CDMA 通信系统的多址干扰,实验利用Matlab 提供的m语言编写了m文件来建立CDMA 通信系统仿真模型,详细讲述各模块的设计及参数设置,并对仿真结果进行分析。结果表明,多址干扰是CDMA 系统的固有干扰,当同时通信的用户数增多时,多址干扰电平增大,导致系统的误码率也增大。因此,多址干扰是CDMA 通信系统本身存在的自我干扰,它限制了蜂窝系统的通信容量。实验讨论的CDMA通信系统的仿真,采用的是直扩方式,信息没有经过调制,伪随机码采用的是63位GOLD序列,仿真框图如图1所示。本课程的目的是熟悉CDMA通信系统的构架,了解m序列和gold码的软件实现, 以
2、及用gold序列实现扩频和解扩,最后了解整个系统的误比特率与哪些因素有关。2. 程序设计流程图Gold码程序流程图初始化2个m序列本原多项式初始化移位寄存器序列产生2个m序列2个m序列模2相加结束开始M码程序流程图初始化m序列本原多项式初始化移位寄存器序列寄存器反馈值模2加移位寄存器高位移出循环满63次?结束开始移位寄存器右移一位模2加后的数值赋值给寄存器低位No开始输入用户数及相关参数产生码长为63的gold序列随机输入窗口大小M的用户发射序列bi,i=1,2,M发送处理加入高斯噪声,获得到达接收端信号DN1设计匹配滤波器的输出YK11建立线性方程组求解发送比特处理完?计算接收用户信号的相关
3、矩阵RKK计算误比特率输出结果结束主程序流程图3.仿真环境本文讨论的CDMA通信系统的仿真是用MATLAB7.0模拟实现的,即数据流仿真模式,用MATLAB编程来实现对CDMA系统的模拟。仿真实验中选择了一组长度为63的gold码序列作为扩频序列,并假设在理想功率控制下,即接收到的所有用户的信号能量相等。整个仿真系统实现过程如下:1) 信源采用randint函数产生的1、1来代替实际的数字信号。实际的数字信号应该是模拟信号(如语音信号) 经量化和压缩编码得到的二进制信号,其特点是二值性和随机性。信源速率设置为10b/s。2) 扩频与解扩利用自编的m函数和gold函数,产生gold码 伪随机序列
4、来达到扩频和多址接入效果。扩频的运算是信息流与gold码相乘或模二加的过程。解扩的过程与扩频过程完全相同,即将接收的信号用gold 码进行第二次扩频处理。要求使用的gold 码与发送端扩频用gold 码不仅码字相同,而且相位相同。否则会使有用信号自身相互抵消。解扩处理将信号压缩到信号频带内,由宽带信号恢复为窄带信号。同时将干扰信号扩展,降低干扰信号的谱密度,使之进入到信息频带内的功率下降,从而使系统获得处理增益,提高系统的抗干扰能力。3) 信道采用加性高斯白噪声模块,均值设置为0 ,方差设置为1 。3. 实验结果分析误比特率的比较:在不同的信噪比下,不同用户数的不同的信噪比时的误码率比较如图4
5、.1,4.2,4.3所示。从图中可以看到,在一定的信噪比条件下,随着用户数的增加,误比特率也随之增加。在用户数一定时,误比特率随着信噪比的增加而减少。还有就是schur算法和解相关算法性能相近。硬判决算法的性能较差。用解 toeplitz矩阵的方法感觉性能有些不是很稳定。图4.1:信噪比SNR3dB图4.2:信噪比SNR5dB图4.3:信噪比SNR7dB4. 源程序% B 是用户输入的原始的数据流% X 是经过扩频,传输,解扩后得到的信号clc;clear;K=30;%K表示用户数%.产生K个用户的扩频码.pntaps1=1 0 0 0 0 1; %第一组反馈线的状态c1-cnpntaps2=
6、1 1 0 0 1 1; %第二组反馈线的状态c1-cnpninitial=0 0 0 0 0 1;%寄存器的初始状态for i=1:K feedback=rem(pninitial*pntaps1),2); pninitial=feedback,pninitial(1,1:length(pntaps1)-1); C(i,:)= goldPN(pntaps1,pntaps2,pninitial);%C表示扩频码,大小为K*N的矩阵end;N=2length(pntaps1)-1;%N表示扩频码的长度M=1000;%M表示每个用户输入的数据流的长度B=2*randint(K,M)-ones(K,
7、M);%B是K个用户数据流,每个用户的数据长度是N%.扩频,得到发送端信号A.方法一:扩频for k=1:M for i=1:N A1=0; for j=1:K A1=A1+B(j,k).*C(j,i); end A(i,k)=A1;%A表示发送端输出信号,大小是N*M endend;方法二:扩频A=zeros(1,M*N); for i=1:K for j=1:M; A(j-1)*N+1:j*N)=B(i,j)*C(i,:)+A(j-1)*N+1:j*N); %每个用户的m*N扩频结果都累加到同一m*N上(共用信道) end endA=reshape(A,N,M);%.同步条件下.%加入高斯
8、噪声后的结果%noise-power=10*log10(N)-SNR;SNR=5;D=awgn(A,SNR,measured);b=C*D;R0=C*C;%.方法一:用schur算法.for i=1:M X(:,i)= schur1(R0,b(:,i);enderrors=CountError(X,B,K,M);users=1:K;semilogy(users,errors/(K*M),r-*);% %.%.方法二:解相关,就是求R逆.for i=1:MX(:,i)=inv(R0)*b(:,i);%解相关,就是求R逆enderrors=CountError(X,B,K,M);users=1:K
9、;semilogy(users,errors/(K*M),b-);% %.%.方法三:用TOEPLZ矩阵求解.for i=1:M X(:,i)=toeplz(R0,b(:,i);enderrors=CountError(X,B,K,M);users=1:K;semilogy(users,errors/(K*M),b-o);%.%.方法四:只有硬判决.X=b;errors=CountError(X,B,K,M);% endusers=1:K;semilogy(users,errors/(K*M),b-+);title(信噪比一定时,用户数和误码率的关系);xlabel(用户数K);ylabel(
10、误比特率BER);legend(schur,解相关,toeplitz,硬判决,4);hold off;%.产生gold平衡码,.% 要求输入一对优选对,pntaps1,pntaps2,即m本原多项式系数,% 然后将产生的两个m序列模2相加,即可得到gold码function golddata=goldPN(pntaps1,pntaps2,pninitial)% pntaps1=1 1 0 1 1;%反馈线的状态c1-cn%pninitial=zeros(1,length(pntaps1)-1),1;%寄存器的初始状态N=2length(pntaps1)-1;%N表示扩频码的长度feedback
11、=rem(pninitial*pntaps1),2);pninitial=feedback,pninitial(1,1:length(pntaps1)-1);sqn1=mPN(pntaps1,pninitial);%sqn1表示扩频码,大小为N*N的矩阵pninitial2=zeros(1,length(pntaps1)-1),1;sqn2=mPN(pntaps2,pninitial2);%C表示扩频码,大小为1*N的矩阵golddata=2*rem(sqn1+sqn2),2)-1;%.产生m序列function pndata=mPN(pntaps,pninitial)%产生M序列,若本原多项
12、式为X6+X+1;% pntaps=1 0 0 0 0 1;%反馈线的状态c1-cn% pninitial=0 0 0 0 0 1;%寄存器的初始状态N=length(pntaps);%寄存器的个数pndata=zeros(1,2N-1);%寄存器输出向量pnregister=pninitial;n=0;kk=0;while kk = 0 n=n+1; pndata(1,n)=pnregister(1,N); feedback=rem(pnregister*pntaps),2);%计算反馈值,对应反馈系数为0 pnregister=feedback,pnregister(1,1:N-1); if pnregister=pninitial; kk=1; endend