基于MATLAB的CDMA系统仿真分析_第1页
基于MATLAB的CDMA系统仿真分析_第2页
基于MATLAB的CDMA系统仿真分析_第3页
基于MATLAB的CDMA系统仿真分析_第4页
基于MATLAB的CDMA系统仿真分析_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于MATLAB的CDMA系统仿真分析

【摘要】本设计基于MATLAB仿真软件,完整地实现了CDMA通信系统的建模、仿真和分析过程

REF_Ref355453241\r\h

[1]

;仿真系统包括了CDMA编码技术、扩频技术、调制技术、信道传输以及解调恢复技术等各个功能模块。全面的介绍了整个CDMA通信系统的工作原理和工作方式,并介绍了各个模块的参数设置;文章内容包括CDMA的发展现状以及发展趋势、CDMA通信系统的技术优势和应用领域,从而说明CDMA通信系统在的研究价值和潜力。同时,本文也通过举例简单介绍了MATLAB软件,对用于实现系统模块功能的MATLAB仿真语句有了进一步的了解。MATLAB软件功能齐全,操作简单,应用广泛。通过本次设计得出,CDMA系统的抗干扰能力强,单用户的情况下,即使在各种人为和物理噪声的干扰下,依旧可以准确接收到数据。

【关键词】CDMA,MATLAB,仿真,通信系统

AnalysisofCDMASystemSimulationBasedonMATLAB

【Abstract】ThisthesisisbasedonthesimulationfunctionoftheMATLABsoftware,usingMATLABlanguagetocarryoutthemodeling,simulation,andanalysisoftheCDMAcommunicationsystem.Atthesametime,theimportantpartsofcommunicationsystemareintroducedindetail,includingcoding,spreadspectrum,decoding,modulationandchanneltransmission,etc.Thisthesisalsoreferstothecondition,advantagesanddevelopmentofCDMAsystemtoshowitspotentialandvalueforresearch.What’smore,thethesisalsousinganexampletogiveabriefintroductionofthesimulationplatformofMATLABsoftware,itissuchapowerful,easyoperatingsoftwarethatiswidelyusedinmanyfields.ThissimulationplatformdisplaysthesuperiorityofCDMAeffectively,andtheresultshowsthatCDMAcanreceivetheaccuratelydataeveninabignoise.

【Keywords】CodeDivisionMultipleAccess,communicationsystem,MATLAB,simulation

目录

TOC\o"1-3"\h\u

20936

第一章绪论

[8]

。即系统为每个用户分配不同的扩频序列之间一般情况下不是完全正交的。在这种不在理想状态下的相关性会在用户和用户之间的相互干扰,这种干扰就称为多址干扰。当CDMA通信系统中的用户较少的时候这种干扰现象较轻;系统的用户数目变多以后,信号功率的增大,MAI的功率也增大,就会导致系统性能降低。影响所用用户的噪声和干扰都来自所有用户,但是其输出功率被控制到最低可能。虽然在这中干扰和噪声的影响之下,通信系统的容量会受到限制,但最终的通信系统的容量还是比频分和时分系统的容量要大的多。

此次设计仿真实现了CDMA通信系统每个模块的功能并进行分析。研究通信过程中CDMA系统的抗噪声和抗干扰能力,以及准确接收数据的能力跟信噪比之间的关系。

1.3.2研究思路

首先,从目的出发对整个通信系统进行分析,对CDMA通信系统的数据发送端、信道和接收端的各个环节功能分解,掌握系统的整体运作过程。

其次,将CDMA系统划分为卷积编码、扩频、加扰码、调制和解调等多个模块,了解每个模块的功能作用。

再次,分析各个模块功能,针对各个功能模块确定算法,进行源程序编写。

最后,整合各个模块的程序。仿真调试得到最终结果。

本论文主要从这几部分展开:

第一章为绪论,主要讨论CDMA通信系统的背景、该系统当今发展现状和未来趋势、研究该系统目的。这几个方面的讨论让我们了解该通信系统的基本情况,给本文奠定一个方向和思路,方便理解对该通信系统研究的重要意义。

第二章为CDMA的技术原理,这部分是本文乃至研究过程中的重要部分。只有在完全理解通信系统的基本工作原理和CDMA先进技术的基础上,用理论指导实践,才能了解通信系统在工作过程中每个环节如何实现,结果是否有误。这部分主要讨论了包括扩频、调制解调等在内CDMA通信系统的基本模型、CDMA技术特点以及该技术主要应用及应用优势。

第三章为CDMA通信系统的仿真调试和结果。本章节简单介绍了MATLAB仿真软件和该系统仿真模型,对理解该通信系统的工作过程上有很大的帮助。同时本章还包含了CDMA通信系统的仿真分析,包括CDMA系统基本参数的设置、程序的调试过程和仿真结果分析,通过调试过程中的结果可以与理论结果进行比较,最终得到结论。

接下来是总结部分,对整个研究的过程和结果做一个比较全面的总结。

最后是致谢部分,感谢在毕业设计过程中帮助过给予帮助和建议的人。

第二章CDMA技术原理

2.1CDMA基本模型

CDMA通信系统的基本模型由信源、卷积编码、交织编码、加扰码、扩频、调制、信道、解调、解扩、去扰码、解交织、解卷积、信宿等部分构成。基本模型如图2-1所示:

信源

卷积编码

交织编码

加扰码

扩频

调制

AWGN信道

解调

解扩频

信宿

解卷积

解交织

去扰码

图2-1CDMA系统基本模型

2.1.1卷积编码

卷积编码器对输入的数据流每次1比特或k比特进行编码,输出n个编码符号。但输出分支码字的每个码元不仅和此时刻输入的k个信息有关,也和前面m个连续时刻输入的信息元有关,因此编码器包含有m级寄存器以记录这些信息,即卷积码编码器是有记忆的。卷积编码可表示为(n,k,m),码率为k/n。

卷积编码的原理是把k个信息比特通过编码,扩展成n个比特,k和n都不大。便于串行传输,传输时延小。卷积编码另一个不同于分组码的特点是,卷积码编码中有nN个相关的码元数。编码后的码元与当前k个信息有关的同时,也与前面的N-1个信息有关

REF_Ref355456806\r\h

[9]

。N越大是,卷积码的纠错性越好,差错率则越小。

当k为1时,卷积码编码器的结构包括一个有m个串接的寄存器构成的移位寄存器(成为m级以为寄存器)、n个连接到指定寄存器的模二加法器以及把模二加法器的输出转化为串行输出的转换开关。卷积码编码器每次输入一个信息比特,从输出端输出卷积码分支码字的两个码元,并有转换开关把两个输出端口变换为串行输出。二进制卷积编码器如图2-2所示。

图2-2.二进制卷积编码器

寄存器

寄存器

寄存器

a

b

2.1.2交织编码

交织编码将序列的顺序打乱,这样的好处是,在信道受到突发干扰的时候,可以将误码分散。也就是误码不会集中在一小段时间,这样有利于纠错。伪随机序列主要包括m序列码,Gold序列码,Walsh序列码等。其中Walsh码序列复杂,正交性较好,可用于前向扩展频谱,反向区分信道类型

REF_Ref355456774\r\h

[10]

。而相比于m序列,Gold序列可以产生更多地址码,更适合于大型的通信系统。Walsh码的良好正交性体现在:在同一个周期T内,不同码字之间的积分为零,相同码字之间的积分不为零,为T。本次设计系统选用的是第三种码。

2.1.3伪随机码

伪随机码简称PN码。为随机码性质上与白噪声相似,白噪声是瞬间值服从正态分布,并在很大频带内功率谱都是均匀的一种随即过程。

伪随机码是周期码,容易赋值加工。伪随机码性能类似于白噪声,功率谱频带很宽,具有很好的抗干扰特性。能容易从其他噪声和干扰信号中分离出来,因此在实践中常用伪随机码作为扩展频谱的扩频码。

实践中常用来产生伪随机码有如下特点:

(1)在一个周期内0和1出现的概率相近,出现次数最多只差一次。

(2)在一个周期内,连续出现长度为x比特的1(0)的次数比连续出现长度为x+1比特的1(0)的次数多一倍。

(3)伪随机序列的自相关函数满足式(2-1)的特性:

EMBEDEquation.DSMT4

(2-1)

其中为码元延时,N为码长,K为小于N的整数。所谓自相关函数反映的是一个序列不同时刻两个状态之间的相关程度。其中,若函数是周期的,则其自相关函数也是周期的,且周期与原函数相同。

对于码长为N的周期码和

QUOTE

,其互相关函数定义为式(2-2):

EMBEDEquation.DSMT4

(2-2)

特别的,当为零时两个码序列相互正交。

QUOTE

的自相关函数定义为式(2-3):

EMBEDEquation.DSMT4

(2-3)

令,能将二元域{0,1}映射到{-1,1},1变成-1,0变成1。结合公式(2-2)和公式(2-3)可得到式(2-4)和式(2-5):

EMBEDEquation.DSMT4

(2-4)

(2-5)

其中A为和

QUOTE

/

QUOTE

两序列中同0或同1的数目,D是亮序列中对应不同码元的数目。

故有,周期码序列满足式(2-6)时,则称之为广义伪随机码。

EMBEDEquation.DSMT4

(2-6)

QUOTE

与-1/N相等时,得到上文中的式(2-1)。

2.1.4扩频序列

在扩频系统中,电信号的频域描述是频谱,常见的语音、图像和数据等信息的信号都可以用频谱表示出来,即信息信号可表示为时间的函数。可以通过傅里叶变化由信号的时域表示得到频域表示F(f)

REF_Ref355867435\r\h

[11]

。频域和时域的关系如式(2-7):

EMBEDEquation.DSMT4

(2-7)

扩频通信系统具有抗干扰能力好。扩频通信的理论基础是香农公式,香农公式反映了影响信道的无差错传输能力的因素。即式(2-8):

EMBEDEquation.DSMT4

(2-8)

当S/N的比值远小于1时,有式(2-9)的结论:

EMBEDEquation.DSMT4

(2-9)

由此可见,在给定噪比S/N的前提下,增大带宽可获得较低的信息差错率。

扩频系统的发射模型如图2-3所示

REF_Ref355868617\r\h

[11]

图2-3扩频发射原理框图

编码器

M序列发生器

数据源

发射机

射频振荡器

c(t)

d(t)

s(t)

输出信号s(t)表达式(2-10)如下:

EMBEDEquation.DSMT4

(2-10)

直接扩频过程是利用扩频序列乘上原始序列,得到复合序列,其时域表示如下图2-4:

复合序列

信息数据

扩频序列

图2-4扩频信号传输示意图

恢复序列

接收端的频谱示意图如图2-5:

图2-5输出信号频谱示意图

0

2.1.5信号调制

同等发射功率的条件下,QPSK只要用一半的带宽就能得到与BPSK条件下相同的误码率。但在这使用QPSK调试不是因为其节省带宽,而是因为QPSK对不受到某些干扰的影响。

QPSK信号产生原理是采用正交调制法来直接产生调相信号,二进制码两位一组以串行形式输入,经转换后,宽度变为原来的两倍,以并行形式输出。接着进行极性变换,然后用两个相互正交的载波分别乘上两个信号,再把两个信号相加,从输出端输出。其原理框图如图2-6所示:

图2-6QPSK信号产生原理框图

串/并转换

脉冲成型

脉冲成型

载波发生

90°相移

二进制信息X

已调信号

Sqpsk

I

Q

Ipluse

Qpluse

Iqpsk

Qqpsk

QPSK调制的输出如式(2-11):

EMBEDEquation.DSMT4

(2-11)

式中x1(t)和x2(t)分别为同相支路和正交支路的扩频码,两扩频码的码速率相同但码结构不同,取值为±1。在设计时我们取x1(t)和x2(t)的码速率是同步的并且相干,x1(t)和x2(t)彼此独立。

2.1.6信号解调

QPSK信号是由两个相互正交的信号合成的。其原理框图如图2-7所示:

图2-7QPSK解调原理图

90°相移

Sqpsk

匹配滤波

抽样判决

串/并转换

载波恢复换

抽样判决

匹配滤波

定时恢复

QPSK信号

DemQpluse

DemIpluse

DemIqpsk

DemQqpsk

Sqpsk

还原的二进制信息

在同相路和正交路两路分别设置一个相关器,即用两个相互正交的同频载波信号分别对两个相干信号进行解调。然后信号经过滤波器,即可恢复出原始相互正交的基带信号,最后再经过电平判决和串并转换即可还原出原来的信号。

2.1.7维特比译码

译码器的功能就是要根据某种法则以尽可能低的错误概率对编码输入信息做出估计。卷积码译码通常按照最大似然法则译码,采用逐步比较的方法来逼近发送序列的路径。

所谓逐步比较就是把接收序列的第j个分支码字和网格图上相应的两个时刻j和j+1时刻之间的各支路作比较,即和编码器在此期间可能输出的分支码字作比较,计算和记录它们之间的汉明距离,同时把他们分别累加到j时刻之前的各支路累加到汉明距离之上。比较累加结果并进行选择,保留汉明距离最小的一条路径,称其为幸存路径,其余的路径均被删除。所以j+1时刻进入每个节点的路径只有一条,且均为幸存路径。这一过程直到接收序列的分支码字全部处理完毕,具有最小汉明距离的路径即为发送序列。

2.2CDMA的技术特点

CDMA系统是基于扩频技术的自干扰通信系统。系统为不同的用户分配不同地址码,且只接收与发送地址码相同的部分,其他部分变成噪音不接收。CDMA系统具有以下特点:

(1)抗干扰能力强

CDMA扩频技术的理论基础建立在香农公式之上,香农公式表明,系统中信噪比下降时,信号差错率会随之下降

REF_Ref355907398\r\h

[12]

。系统的带宽是非常大的,是其他系统的上百倍。所以在相同的信噪比条件下,CDMA系统的抗干扰能力是比其他系统都好。

(2)兼容性好

可以实现多个用户同时发送,同时接接收。CDMA系统有很大的带宽,很宽的频谱,其信号功率分布在宽频谱上,有用的信号功率远小于干扰信号功率,利于信号隐藏在噪声中不被检测到。

(3)

软切换

技术

软切换即“先通后断”。简单的说就是在到达两个基站覆盖网络范围的临界点时,手机会先跟新的基站建立起联系,确认联通之后,再断开与原来基站的联系。通过这样的方式可不会因为基站的变化造成通话中断、掉线等现象,保证了通话质量。

2.3CDMA的主要应用优势

CDMA技术现主要应用在手机市场中,其主要优势有这几点:

(1)较好的声音质量,论文前部分简单说明系统抗噪声干扰能力好,通话噪声小,语音质量接近固定电话。即使在背景噪音较大时,也可以得到很好的通话质量。

(2)辐射小,CDMA手机又称“绿色手机”,它的最大发射功率不超过200mW,在通话过程中CDMA系统的发射功率甚至更小,其辐射作用小到可以忽略不计。

(3)不易掉线,CDMA手机不会出现信号变弱和容易掉线的问题,CDMA信号发射方式与GSM不同,使用的是“先通后断”的软切换技术,保证信号质量。

(4)良好保密性,通话过程中,CDMA系统有好几万亿种编码可能。因此,信息传输过程安全。

(5)网速快,这也是其用户量大的一个主要原因。

(6)用户容纳量更大。

第三章CDMA系统仿真分析

3.1MATLAB的简介

MATLAB软件可视化仿真的功能,结合了矩阵的计算、数据的分析、图形图像的处理以及系统仿真等多种强大的模块,主要应用于研究分析和工程设计等领域。MATLAB软件环境中包含许多集成软件包,这些软件包是用来实现动态建模仿真的

REF_Ref355867776\r\h

[13]

。MATLAB包含多个模型库,这些模型库能提供的不同功能模块模型,在调试过程中只要改变模块的对应参数就能实现模型的动态仿真功能。通过MATLAB软件的仿真结果,系统用户可以实时的观察系统的变化,并根据观察的结果设计或改进系统的功能。

由于MATLAB软件的使用方法简单,进行仿真就可以很直观的看到结果,工作效率很高,因此大受许多领域的青睐,是教育、科研、工程以及相关数据计算的学科中的常用软件平台。以下我们简单举一个MATLAB在教育学科《通信原理》中的应用,关于QPSK调制仿真的例子。

我们知道,课本中的公式和框图对于我们在快速理解QPSK调制解调的的原理上的效果并不显著,反而显得枯燥和难懂。使用MATLAN仿真软件,将抽象的原理具体化,有助于学生直观的理解原理,能在很大程度上解决问题。如下,表3-1反应了QPSK编码与载波相位的关系:

表3-1QPSK编码与载波相位的关系

0

a

b

0

90

0

0

1

1

0

270

1

1

180

在MATLAB软件平台中新建一个Mfile,把实现调制的代码敲进去,保存之后点击运行,运行的结果就会如下图3-1所示

REF_Ref20302\r\h

[14]

图3-1QPSK调制图

1

0

2

3

4

5

6

1

t/ms

载波信号

数据基带信号

1

0

2

3

4

5

6

1

-1

t/ms

QPSK键控信号

1

0

2

3

4

5

6

1

-1

t/ms

从QPSK的调制图中,我们就能够非常直观的看到并理解QPSK调制的原理,直观的理解QPSK相位和载波相位之间的关系。

所以以上这个QPSK调制的例子表明,MATLAB软件可以作为《通信原理》、《数字信号系统》等课程的基本教学和实验仿真工具,通过仿真功能可以解决在教学过程中遇到的一些问题,有助于同学们更好的理解课程的原理,提高学生自主分析问题的能力。

利用MATLAB仿真技术进行教学实验,能够不受许多客观条件上的限制,有效地弥补某些传统实验的不便和不足。有一些在设备上要求较高,不易操作或不能操作的实验都可以利用MATLAB软件,通过仿真得到理论上的结果

REF_Ref20704\r\h

[15]

。因此,MATLAB总体来说是一款功能齐全,实用性强的应用软件。

3.2调试结果

CDMA系统的仿真模型如文中第二章提到的图2-1所示。

首先我们在MATLAB软件平台中打开源程序代码mainfile,在主程序中设定一个断点,然后点击run标志,在工具栏上点击step标志,一步一步运行调试程序,观察通信系统过程中各个步骤的运行情况。再根据调试的结果图对整体通信系统进行必要的补充和修改,使系统更完整。以下是程序在升余弦滤波器(MFType=1)条件下,运行过程中调试出来的各步骤的仿真图。

系统的主要仿真参数设置如下:

控制程序运行中的显示:show=0;

选择软/硬判决接收:SD=0;

比特率:BitRate=9600;

码片速率:ChipRate=1228800;

源数据数:N=184;

匹配滤波器类型--升余弦:MFType=1;

R=5;

Viterbi生成多项式矩阵:G_Vit=[111101011;101110001];

列数:K=size(G_Vit,2);

行数:L=size(G_Vit,1);

walsh码的长度:WLen=64;

仿真信噪比范围(dB):EbNo=[-2:0.5:6.5];

3.2.1原始序列

代码中画原始序列时域图的指令:

figure;

plot(abs(chips));title('Chips_Viterbi');

画出原始序列,原始序列产度N为184,故横坐标0到200,表示取到第200个离散的时间点。

得到以下图3-1的结果:

图3-1原始序列

以上为原始序列,序列长度184。

3.2.2维特比编码序列

代码中画出维特比编码后的序列图的指令:

chips=VitEnc(G,[DataBits;zeros(K-1,1)]);

figure;

plot(abs(chips));title('Chips_Viterbi');

运行可以得到以下图3-2的结果:

图3-2维特比编码序列

维特比编码属于纠错编码,在原始序列中加入冗余,在接收信噪比恶化的时候,用于纠错,编码后码率变高,带宽变大。从仿真图对比可以看出,编码之后冗余度增加,码序列变长。原始序列经过维特比编码之后码速率变大,信息传输速率加快了,相应的所需要的传输带宽也就增加了。

3.2.3交织编码序列

代码中画交织编码序列图的指令:

INTERL=reshape(chips,24,16);

chips=reshape(INTERL',length(chips),1);

figure;

plot(abs(chips));title('Chips_Reshape');

运行以上指令可以得到以下图3-3的结果:

图3-3交织编码得到的序列

交织编码将序列的顺序打乱,这样的好处是,在信道受到突发干扰的时候,可以将误码分散。也就是误码不会集中在一小段时间,这样有利于纠错。

3.2.4加扰码序列

代码中画加扰码后得到的序列图的指令:

[LongSeqZs]=PNGen(Gs,Zs,N);

Scrambler=LongSeq(1:64:end);

ChipsOut=xor(chips,Scrambler);

figure;

plot(abs(ChipsOut));title('ChipsOut');

运行可以得到以下图3-4的结果:

图3-4加扰码得到的序列

在原始序列中,可能会存在连续的连0或者连1,这时,信号的直流会变得很大,不利于信号的传输。这时需要搅扰,在连续0或者连续1的序列中加入破坏脉冲,加扰后码率不变。扰码使信号受到随机化处理,变伪随机序列。解扰的过程就是加扰的逆过程。

3.2.5扩频调制序列

代码中画扩频调制得到的序列图的指令:

[xPNMF]=Modulator(TxChips,MFType,Walsh);

figure;

plot(abs(x));

title('ModulatornData');

figure;

pwelch(2*x-1);

运行便会得到如下扩频序列的时域和频谱图3-5和3-6,扩频序列频谱是关于π对称,而且是周期的。频谱的单位和采样频率和带入FFT的点数有关系,一般情况下最后会把它归一化到-π到π。

图3-6中横坐标为0到2π。指令中“-1”是为了去除直流分量,所有的单极性码(码元只有0和+1),都要做去直流处理。

图3-5扩频序列时域图

图3-6扩频序列频谱图

扩频是用一个带宽很大的高速伪随机码序列,将带宽远小于伪随机码序列的传送信息的带宽进行扩展。从上图可以看出扩频仿真的结果与图2-4扩频信号传输和2-5扩频信号频谱图的理论结果基本相符。调制之后的码序列长度由原来的几百变成了几万,带宽扩大。

其中,调制过程中所选择的匹配滤波器如图3-7:

图3-7匹配滤波器

3.2.6加噪信号

代码中画加噪信号图的指令:

noise=1/sqrt(2)*sqrt(R/2)*(randn(size(x))+j*randn(size(x)))*10^(-(EbNo(i)-EbEc)/20);

r=x+noise;

figure;

plot(abs(r));title('ReceiveData');

figure;

pwelch(r);

运行便会得到如下加噪时域和频谱图3-8和3-9:

图3-8加噪信号序列

图3-9加噪信号频谱

从图中可以看到,加入噪声在信道中传输的信号基本上跟噪声信号一模一样。这样也就保证了在信号在信道传输过程中的安全。

3.2.7解扩频得到的信号

代码中画解扩频后得到的序列图的指令:

figure;

plot(abs(RxSD));

title('DemodulatornData');

figure;

pwelch(2*RxSD-1);

运行得到图3-10如下结果:

图3-10解扩频得到的序列

从上图3-10可以看到,解扩频得到的序列的序列长度变为380左右。于扩频之前的序列长度一致。

3.2.8解扰解交织得到的信号

代码中画解扰解交织得到的序列图的指令:

HDchips=xor(HDchips,Scrambler);

INTERL=reshape(HDchips,16,24);

HDchips=reshape(INTERL',length(HDchips),1);

figure;

plot(HDchips);

title('HDchips');

[DataOutMetric]=VitDec(G,HDchips,1);

运行得到如下图3-11的结果:

图3-11解扰解交织得到的序列

上图为解扰解交织之后得到的序列,经对比可以明显看出,解扰解解交织得到的序列与接扩频得到的序列有很大的差别。解扰解交织之后得到的序列更接近原始序列。

3.2.9恢复序列

代码中画恢复序列图的指令:

RxHD=(RxSD>0);

if(SD)

[RxDataMetric]=ReceiverSD(RxSD,G_Vit,Scrambler);

else

[RxDataMetric]=ReceiverHD(RxHD,G_Vit,Scrambler);

end

figure;

plot(RxData);title('RxData');

运行得到如下图3-12的结果:

图3-12恢复序列

经过判决后得到恢复序列。从上图可以看出,恢复序列与原始序列基本一致。说明CDMA系统具有较好的接收和还原数据的能力。

3.2.10误码率

代码中画出误码率图的指令:

figure;

subplot(211);plot(xor(TxChips,RxHD),'-o');

title('ChipErrors');

subplot(212);

plot(xor(TxData,RxData),'-o');

title(['DataBitErrors.Metric=',num2str(Metric)]);

pause;

通过以上指令可以得到如下图3-13的结果:

图3-13误码率

从图中可以看到,上一张图表示的是不经信道编码译码的误码率,下一张表示的是经过译码之后的误码率。对比可以看出,译码之后的误码率有明显的降低。但是这边译码之后的误码率还是比较高,在这点上可以多做改进。

3.3仿真结果

以上仿真是在升余弦滤波器条件下的结果,即MFType=1。升余弦滤波器如上图3-7所示。得到以下图3-14。

图3-14.升余弦滤波器条件下的结果

使用不同的匹配滤波器可以得到不同的仿真结果,改变滤波器参数MFType,运行代码得到以下结果图。

MFType=2:

图3-15.矩形滤波器条件下的结果

MFType=3:

图3-16.汉明滤波器条件下的结果

从以上仿真结果图中可以得出以下结论:

CAMA通信系统中,随着信噪比增大,误码率减小。扩频通信在同等信噪比情况下的误码率比一般的通信系统要低,抗干扰能力强。且在系统中使用不同的滤波器会得到结果。在信噪比相对较大的情况下,使用升余弦滤波器得到的误码率较小。

总结

本设计利用MATLAB仿真软件进行CDMA系统的仿真。通信系统涉及多个模块,较为全面的介绍了整个CDMA通信系统的工作原理和运作方式,并介绍了各模块参数的设置情况。本文还简要介绍了CDMA的目前在全球发展的态势和今后的发展方向;介绍了CDMA通信系统的所采用的主要技术以及这些技术的特征和优势。利用这些优势促使其在各个领域广泛应用。通过本文还可以清楚的看出CDMA通信系统在当今以及日后都还是有很大的研究和发展价值的。

同时,本文也对仿真平台MATLAB软件进行了简要介绍,对MATLAB仿真语句有了进一步的了解。本设计主要研究了CDMA通信系统的误码率和信噪比之间的关系。实验结果显示,在其他条件一定时,信噪比越大则系统的误码率越小。且CDMA系统在很小的信噪比之下也可以获得较好的误码情况。CDMA系统的抗干扰能力强,能够准确接收到并还原出原始数据。

但本次的设计还存在一些可以做的更好的地方,比如可以进一步研究通信过程中多址干扰的影响;还可以研究在多户情况下CDMA准确接收和还原数据的能力。

未来CDMA通信系统将继续往4G方向发展,其应用领域将会更多更广。其中突出的一点表现在于4G手机,速度更快、功能更多、通讯质量更好。

参考文献

[1]王超,曾玖贞,王彦.Simulink的GO-MC-CDMA系统仿真[J],通信技术,2012,5(45):15-17.

[2]张剑兰,张培珍.基于MATLAB的CDMA通信系统仿真[J],广东海洋大学学报,2008.8,28(4):86-90.

[3]朱宾.CDMA技术发展历史[Z],特别策划,28-34.

[4]吴雨川.码份多址(CDMA)技术及其最新研究进展[J],武汉科技学院学报,2005.10,18(10):26-29.

[5]张云.第三代移动通信技术特点、后续演进及其全球竞争格局[J],中国集成电路,2009.2,(117):67-72.

[6]WilliamH.Tranter,K.SamShanmugan,TheodoreS.Rappaport,KurtL.Kosbar,PrinciplesofCommunicationSystemsSimulationwithWirelessApplications[M],London:PRENTICEHALL,2003:1-778.

[7]原荣.第3代移动通信技术及其发展[J],广西通信技术,2009,(4):1-9.

[8]陈青,马文君,CDMA通信系统仿真及抑制多址干扰的技术研究[J],通信电源技术,2012.1,29(1):44-47.

[9]XueJunLi,PeterHanJooChong.PerformanceInvestigationofCDMA/PRMAwithImperfectPowerControlinTDDCellularSystems[J],WirelessPersCommun,2010,54:349–360.

[10]金超,李虓江.中国电信CDMA网络次800M频段使用探讨[J],移动通信,2012,(19):65-68.

[11]田日才.扩频通信[M],1983,北京出版社,88-93.

[12]李六杏.CDMA技术在数据通信系统中的应用[J],合肥学院学报,2006.9,16(3):55-58.

[13]朱杰.电子信息技术中MATLAB仿真的应用[J],中国高新技术企业,2011.5,64-144.

[14]程铃,徐冬冬.Matlab仿真在通信原理教学中的应用[J],实验室研究越探索,2010.2,29(2):117-119.

[15]汪义旺.Matlab仿真在光伏发电技术实验教学中的应用[J],实验技术与管理,2011.7,28(7):177-179.附录资料:不需要的可以自行删除

Pascal/C/C++语句对比(补充版)

一、Helloworld

先看三种语言的样例:

Pascal

begin

writeln(‘Helloworld’);

end.

C

#include<stdio.h>

intmain()

{

printf("Helloworld!\n");

return0;

}

C++

#include<iostream>

usingnamespacestd;

intmain()

{

cout<<"Helloworld!"<<endl;

return0;

}

从这三个程序可以看到一些最基本的东西。在Pascal中的begin和end,在C/C++里就是{};Pascal主程序没有返回值,而C/C++返回0(好像在C中可以为NULL)。在C/C++中,main函数以前的是头文件,样例中C为stdio.h,C++除了iostream还有第二行的usingnamespacestd,这个是打开命名空间的,NOIP不会考这个,可以不管,只要知道就行了。

此外说明注释单行用//,段落的话Pascal为{},C/C++为/**/。

**常用头文件(模板)

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cmath>

#include<ctime>

#include<string>

usingnamespacestd;

intmain()

{

……

system(“pause”);

return0;

}

二、数据类型及定义

这里只列出常用的类型。

1、整型

Pascal

C/C++

范围

shortint

-

-128…127

integer

short

-32768…32767

longint

Int

-2147483648…2147483647

int64

longlong

-9223372036854775808…9223372036854775807

byte

-

0…255

word

unsignedshort

0…65535

longword

unsignedint

0…4294967295

qword

unsignedlonglong

0…18446744073709551615

**当对longlong变量赋值时,后要加LL

Longlongx=6327844632743269843LL

**如果位移x<<2LL

**Linux:printf(“%lld\n”,x);

**Windows:printf(“%I64d\n”,x);

2、实型

Pascal

C/C++

范围

real

float

2.9E-39…1.7E38

single

-

1.5E-45…3.4E38

double

double

5.0E-324…1.7E308

3、字符即字符串

字符在三种语言中都为char,C里没有字符串,只有用字符数组来代替字符串,Pascal和C++均为string。Pascal中字符串长度有限制,为255,C++则没有。

字符串和字符在Pascal中均用单引号注明,在C/C++中字符用单引号,字符串用双引号。

4、布尔类型

Pascal中为boolean,C/C++为bool。值均为True或False。C/C++中除0外bool都为真。

5、定义

常量的定义均为const,只是在C/C++中必须要注明常量的类型。在C/C++中还可以用宏来定义常量,此时不注明类型。

Pascal

C/C++

const

a=60;

b=-a+30;

d=‘‘;

constinta=60;

constintb=-a+30;

conststringd=“”;

defineMAXN501//这个是宏

**宏定义其实就是直接在程序相应的位置替换:

#definerandomizesrand(unsignedtime(NULL))

#definewaitfor(intw=0;w<100000;w++)

变量的定义,C/C++在定义的同时可以赋值:

Pascal

C/C++

var

a,b:integer;

c:char;

d:string;

inta,b=50;

charc=‘A’;

stringd;

boolflag;

三、输入输出

C/C++中没有以回车作为结束的读入方式(就本人所知)。”\n”表示换行。常规输入输出:

Pascal

C

C++

read(a);//读入变量a

readln(a);//读入变a,回车结束

write(a);//输出a

writeln(a);//输出a并换行

scanf(“%d”,&a);

printf(“%d”,a);

printf(“%d\n”,a);

cin>>a;

cout<<a;

cout<<a<<endl;

特别说明C++中cin一个字符的话会自动跳过空格和回车,Pascal和C则会读入空格和回车。在Pascal中writeln(a:n:m)表示在n个字符宽的输出域上输出a保留m位小数。

例如:pascalwrite(a:6)c/c++printf(“%6d”,a)

Pascalwrite(a:6:2)c/c++printf(“%6.2f”,a)

C++如果用cout?(繁琐!!)

需要加头文件#inlude<iomanip>

cout<<setprecision(2)<<a;//作用永久

cout<<setw(6)<<a;//作用临时

以下三个进制设定都是永久作用:

cout<<dec<<a;相当printf(“%d”,a);//十进制

cout<<hex<<a;相当printf(“%X”,a);//十六进制

cout<<oct<<a;相当printf(“%o”,a);//八进制

例如:cout<<12<<hex<<12<<oct<<12<<12<<endl;

输出:12c1414

C的输入输出里面的字符串中%表示变量,%后面的字目表示变量类型。下面是类型表:

%hd

1个short型整数

%d

1个int型整数

%u

1个unsignedint型整数

%I64d

1个longlong型整数

%c

1个字符

%s

1个C字符串

%f

1个float型实数

%lf

1个double型实数

%10.4f

输出1个总宽度为10,保留4位小数的实数

文件输入输出:

Pascal

assign(input,‘test.in’);

assign(output,‘test.out’);

reset(input);

rewrite(output);

read(a,b);

writeln(a,b);

close(input);

close(output);

C

FILE*fin=fopen(“test.in”,“r”);

FILE*fout=fopen(“test.out”,“w”);

fscanf(fin,“%d%d”,&a,&b);

fprintf(fout,“%d%d”,a,b);

fclose(fin);

fclose(fout);

C++

#include<fstream>

usingnamespacestd;

ifstreamfin(“test.in”);

ofstreamfout(“test.out”);

fin>>a>>b;

fout<<a<<b<<endl;

fin.close();

fout.close();

因为C++的读入较慢,个人建议C++的话使用C的输入方式。当然也有人用C的读入,C++的输出的,这种方式我们称之为城乡结合。

**中国计算机学会竞赛须知发布的C读写程序:

(C++也能用,cin,cout,scanf,printf可混用)

#include<stdio.h>

intmain()

{

inta,b;

freopen(“sum.in”,”r”,stdin);

freopen(“sum.out”,”w”,stdout);

scanf(“%d%d”,&a,&b);

printf(“%d\n”,a+b);

return0;

}

或者:

freopen(“sum.in”,”r”,stdin);

freopen(“sum.out”,”w”,stdout);

ios::sync_with_stdio(false);\\取消同步,cin,cout的速度就不慢了!!

cin>>a>>b;

cout<<a+b<<endl;

return0;

以下扩充c/c++混用是可行的:

#include<iostream>

#include<cstdio>

usingnamespacestd;

intmain()

{

inta,b,c,d;

freopen("sum.in","r",stdin);

freopen("sum.out","w",stdout);

scanf("%d%d",&a,&b);

cin>>c>>d;

printf("%d\n",a+b);

cout<<a+b+c+d<<endl;

return0;

}

**如何判断文件结束(EOF)?

C++

while(cin>>s>>n)

{

...

}

C

while(scanf(%s%d",s,&n)!=EOF)

{

...

}

四、赋值语句及运算符号

一一对应的关系

Pascal

C/C++

赋值运算

赋值

:=

=

基本运算

+

+

-

-

*

*

除(实数)

/

/(double)

除法

取整

div

(int)/(int)

取余

mod

%

比较

等于

=

==

不等于

<>

!=

大于

>

>

大于等于

>=

>=

小于

<

<

小于等于

<=

<=

逻辑

and

&&

or

||

not

!

位运算

左移(*2)

shl

<<

右移(/2)

shr

>>

and

&

or

|

not

~

异或

xor

^

其他

增一

inc(x)

x++

减一

dec(x)

x--

在C/C++中对某个变量自身进行运算可以简写为

变量名运算符号=改变量

如x+=8就表示x=x+8,即inc(x,8)。

在C/C++里还存在一种三目运算

变量名=条件?值A:值B

如x=x>0?x:-x;//表示若x>0则取x,否则取–x,

同ifx>0thenx:=xelsex:=-x;

五、条件语句

1、if

C/C++中if语句的条件必须要用括号括起来,后面不使用then。

Pascal

C/C++

ifa>bthenflag:=true

elseflag:=false;

if(a>b)flag=true;

elseflag=false;

2、多种分支

C/C++中为switch,Pascal为case:

Pascal

C/C++

casexof

1:inc(x);

2:dec(x);

elsex:=x*x;

end;

switch(x)

{

case1:x++;break;

case2:x--;break;

default:x*=x;

}

切记C/C++中一定要写break,后果你可以去掉break,运行看看就知道了。

六、循环语句

1、for

Pascal

C/C++

for变量名:=初始值to(downto)终止值do

for(变量名=初始值;条件;改变方式)

fori:=5to10dodec(a);

//终止值大于初始值用to

fori:=5downto1dodec(a);

//终止值小于于初始值用downto

for(i=5;i<=10;i++)a--;

for(i=5;i>=1;i--)a--;

/*只要i满足条件就会一直循环。

C/C++中i是实数、指针都可以*/

C/C++中for的特殊用法:

//变量为实数

for(doublei=1;i<=2;i*=1.01)

k++;

//变量为指针,->符号为间接引用,后面会提到。

for(type1*p=head->next;p;p=p->next)

printf(“%d”,p->k);

2、while

Pascal

C/C++

while条件do

while(条件)

whilei<>0dodec(i);

while(i!=0)i--;

//也可写作while(i)i--;

//在C/C++中非0即为真。

3、repeat-until&do-while

Pascal

C/C++

repeat语句until结束条件;

do{}while(运行条件)

repeatint(i)untili>100;

do{i++;}while(i<=100);

七、数组

Pascal中数组的下标可以随意定义,而C/C++下标始终为从0开始到(数组大小–1)。

Pascal

C/C++

定义

a:array[1..100]ofinteger;

b:array[1..10,1..10]ofint64;

inta[100];

intb[10][10];

含义

a为大小为100的integer数组,合法下标为1到100

b为大小为10*10的int64数组,合法下标为1,1到10,10

a为大小为100的int数组,合法下标为0到99

b为大小为10*10的int数组,合法下标为0,0到9,9;

使用

inc(a[21]);

b[2,2]:=b[1,1]+b[1,2]+b[2,1];

a[21]++;

b[1][1]=b[0][1]+b[0][0]+b[1][0];

数组清零

Pascal

C/C++

Fillchar(a,sizeof(a),0);

memset(a,0,sizeof(a));

//头文件包含string.h

**如果要填最大:memset(a,127,sizeof(a))(但达不到INT_MAX)

如果要填最小:memset(a,128,sizeof(a))(但达不到INT_MIN)

如果填0:memset(a,0,sizeof(a))

如果填-1:memset(a,-1,sizeof(a))

八、字符串

C风格的字符串就是字符数组。

C++和Pascal的字符串使用基本相同,只是C++中字符串下标以0开始,Pascal以1开始。字符串处理很多这里不一一列举,只写最常用的几个。

Pascal

C(包含<string.h>)

定义用:chars[]

C++(包含<string>)

定义用:strings

输入

Readln(s);

Writeln(s);

Scanf(“%s”,s);

Printf(“%s\n”,s);

注:不能输入输出c++的字符串

Cin>>s;

Cout<<s<<endl;

注:可以输入输出c的字符串

查找

pos(‘a’,s);//不存在返回0

没有

s.find(‘a’);//不存在返回-1

len=length(s);

Strlen(s)

len=s.size();或

Len=s.length();

复制

copy(st,pos,num);

st:=‘abcde’;

s:=copy(st,3,2);

//s=‘cd’

Strcpy(s1,s2)

全部复制

Strncpy(s1,s2,n)

前n个复制

但没有从第几个开始的!

substr(pos,n)//返回从pos开始的长度为n的子串;

strings1=“abcde”,s2;

s2=s1.substr(2,2);

//s2=“cd”

插入

insert(obj,target,pos);

st:=‘helloworld’;

st:=insert(‘‘,st,6);

//st=‘helloworld’

没有

insert(pos,s)//在pos位置处插入字符串s;

strings1=“0123”;

s1.insert(1,“XYZ”);//s1=“0XYZ123”

删除

delete(st,pos,num);

st:=‘helloworld’;

st:=delete(st,6,1);

//st=‘helloworld’

没有

erase(pos,n)//从pos位置开始删除n个字符;

strings1="abcdefghi";

s1.erase(5,3);//得到"abcdei"

C++还有以下功能:

用s.replace(2,2,"ttt")可以部分替换

用s.empty()判断是否为空

可访问s[i],位置从0算起

可以s1+s2

可以s1=s2

可以比较s1==s2当然><=>=<=!=都可以比较。

C++字符串整串读入:

getline(cin,s)和cin>>s的区别:

getline(cin,s)

cin>>s

一次性整行读入,直至行末尾。

只读入一个“单词”,遇空格和行末停止。

例如输入;Howareyou?

s=”Howareyou?”

读入整串含空格

例如输入;Howareyou?

s=”How”

如果三个都读:cin>>s1>>s2>>s3

**C++数字与数值之间的转换:

#include<iostream>

#include<string>

#include<sstream>//必须加入

usingnamespacestd;

intmain()

{

stringtext="152";

intnumber;

stringstreamss;

ss<<text;//可以是其他数据类型

ss>>number;//string->int

cout<<number+100<<endl;

ss<<number;//int->string

stringstr=ss.str();

return0;

}

九、过程和函数

1、过程

在C/C++中没有过程,但可以把返回值为“空”的函数理解为过程。

Pascal

C/C++

无参过程

procedure过程名;

说明部分

begin语句部分end;

//说明部分、begin、end语句部分统称为过程体

void函数名();

{

主体部分;

return;

}

带参过程

procedure过程名(形参表)

过程体

void函数名(形参表)

过程体

值传和址传:当一个参数是值传时,形参在子过程中相当于一个局部变量,对它的改变不影响实在的参数值。址传则会影响。下例中a为值传,b为址传。初始a=5,b=5,运行后a=5,b=10;

Pascal

C/C++

vara,b:integer;

proceduredoit(a:integer;varb:integer);

begin

b:=a+b;

a:=a+b;

end;

begin

a:=5;

b:=5;

doit(a,b);

writeln(a,‘‘,b);

end.

voiddoit(inta,int&b)

{

\\a

认为值参,b认为变量传参

b+=a;

a+=b;

return;

}

intmain()

{

inta=5,b=5;

doit(a,b);

cout<<a<<‘‘<<b;

return0;

}

**用若干地址传参可以给调用者传回若干值

Voidtryit(int&x,int&y,int&z)

调用时:tryit(a,b,c),可以传回a,b,c的值。

**用数组名(也是地址)传参可以传回整组的数据

Voidtryit(inta[])

调用时:tryit(x),可以传回整个数组。

例如:

voidtryit(inta[])

{

for(inti=0;i<=10;i++)a[i]=i*2;

return;

}

intmain()

{

intx[10];

tryit(x);

for(inti=0;i<=10;i++)

cout<<x[i]<<endl;

system("pause");

return0;

}

**用指向函数的指针作为参数,可以执行指定的函数。(略)

STL的两个应用:

**C++快排函数

#include<algorithm>

Boolcom(inta,intb)

{

Returna>b;

}

Intmain()

{

Inta[10]={5,7,3,2,6,8,4,3,5,7};

Sort(a,a+10,com);//如果升序可以省略com.

For(inti=0;i<10;i++)

Cout<<a[i]<<”“;

}

**优先队列(以堆排为例)

#include<iostream>

#include<queue>

usingnamespacestd;

priority_queue<int>Q;

intmain()

{

intn,a;

cin>>n;

while(n--)

{

cin>>a;

Q.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论