基于Matlab的CDMA通信系统仿真

合集下载

基于matlab的simulink的cdma系统多用户仿真

基于matlab的simulink的cdma系统多用户仿真

通信系统原理综设实验报告基于Matlab的CDMA系统的仿真设计教师评语:关键字:cdma,matlab,simulink,多用户检测,滤波器,抽样判决器希望你们都能理解这个系统,并且完善它,免费提供给下届师弟师妹。

老师真心坑爹。

Matlab2011,百度网盘mdl文件下载地址:一、引言CDMA是指在各发送端使用不相同、相互(准)正交的地址码调制所传送的信息,而在接收端在利用码型的(准)正交性,通过相关检测,从混合信号中选出相应的信号的一种技术。

实现CDMA的理论基础是扩频通信,即在发送端将待发送的数据用伪随机码进行调制,实现频谱扩展,然后进行传输,而在接收端则采用同样的编码进行解扩及相关处理,恢复原始的数据信息。

该实验系统通过对多用户下的DS-CDMA系统进行仿真设计,说明DS-CDMA通信系统的基本实现方式,实现PSK调制与解调,加入信道噪声,并实现多用户检测。

在增加用户的情况下,分别检测系统的误码率。

二、系统框图及分析图1DS-CDMA利用不同的地址码(PN序列)区分用户,地址码与用户数据(信码)相乘后得到扩频信号,经信道传输后,在接受端与本地地址码进行相关检测后,从中将地址码与本地地址码一致的用户数据选出,把不一致的用户除掉。

从而实现了利用正交地址码序列区分用户,体现了码分多址的通信方式。

三、系统具体实现及分析1、扩频设计1.1 基本原理扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据。

(1)扩频通信的理论基础①香农公式②公式分析A、在给定的传输速率C不变的条件下,频带宽度W和信噪比S/N是可以互换的。

即可通过增加频带宽度的方法,在较低的信噪比情况下,传输信息。

B、扩展频谱换取信噪比要求的降低,正是扩频通信的重要特点,并由此为扩频通信的应用奠定了基础。

matlab的simulink的cdma标准系统多用户仿真

matlab的simulink的cdma标准系统多用户仿真

通信系统原理综设实验报告基于Matlab的CDMA系统的仿真设计教师评语:关键字:cdma,matlab,simulink,多用户检测,滤波器,抽样判决器希望你们都能理解这个系统,并且完善它,免费提供给下届师弟师妹。

老师真心坑爹。

Matlab2011,百度网盘mdl文件下载地址:/share/link?shareid=436323079&uk=2148250124一、引言CDMA是指在各发送端使用不相同、相互(准)正交的地址码调制所传送的信息,而在接收端在利用码型的(准)正交性,通过相关检测,从混合信号中选出相应的信号的一种技术。

实现CDMA的理论基础是扩频通信,即在发送端将待发送的数据用伪随机码进行调制,实现频谱扩展,然后进行传输,而在接收端则采用同样的编码进行解扩及相关处理,恢复原始的数据信息。

该实验系统通过对多用户下的DS-CDMA系统进行仿真设计,说明DS-CDMA通信系统的基本实现方式,实现PSK调制与解调,加入信道噪声,并实现多用户检测。

在增加用户的情况下,分别检测系统的误码率。

二、系统框图及分析图1DS-CDMA利用不同的地址码(PN序列)区分用户,地址码与用户数据(信码)相乘后得到扩频信号,经信道传输后,在接受端与本地地址码进行相关检测后,从中将地址码与本地地址码一致的用户数据选出,把不一致的用户除掉。

从而实现了利用正交地址码序列区分用户,体现了码分多址的通信方式。

三、系统具体实现及分析1、扩频设计1.1 基本原理扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息必需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接收、解扩及恢复所传信息数据。

(1)扩频通信的理论基础①香农公式②公式分析A、在给定的传输速率C不变的条件下,频带宽度W和信噪比S/N是可以互换的。

即可通过增加频带宽度的方法,在较低的信噪比情况下,传输信息。

基于matlab的simulink的cdma系统多用户仿真要点

基于matlab的simulink的cdma系统多用户仿真要点

基于 Matlab 的 Simulink 的 CDMA 系统多用户仿真要点简介CDMA(Code Division Multiple Access)是一种数字无线通信技术,其中多个用户在同一频带上传输数据,每个用户使用唯一的编码序列来区分其他用户的信息。

在CDMA系统中,使用扩频技术将数据编码成宽带信号,然后使用独立的编码序列将它们混合在一起,并在接收端进行解码以恢复原始数据,因此CDMA技术可以提供更高的信道容量。

通过使用基于 Matlab 的 Simulink,可以方便地进行CDMA系统的仿真,并对多个用户进行仿真,以评估系统性能。

要点1. CDMA系统的建模在CDMA系统的仿真过程中,需要首先建立系统模型。

我们可以使用 Simulink 中的 Signal Processing Blockset 来实现CDMA系统模型的建模。

Signal Processing Blockset 中包含了各种信号处理模块,包括滤波器、混合器和解扰器等等,这些模块可以用来构建CDMA系统的传输通道。

2. 多用户仿真在CDMA系统中,多个用户可以同时传输数据,因此我们需要对多个用户进行仿真,并分别评估其性能。

为了实现这个目标,我们可以使用 Signal Processing Blockset 中的 Multiport Switch 模块,将多个用户的数据流合并成一个流,然后通过解码器对其进行解码。

在这个过程中,我们可以使用不同的编码序列对每个用户进行编码,以确保数据的安全性。

3. 性能评估在CDMA系统中,我们可以通过 BER(Bit Error Rate)来评估系统的性能。

在仿真过程中,我们可以通过向系统中注入固定数量的错误比特,并计算接收端出现错误的比特数量来计算BER。

通过多次仿真,可以评估不同编码序列、码元速率、信噪比等因素对系统性能的影响。

在本篇文档中,我们介绍了基于 Matlab 的 Simulink 的 CDMA 系统多用户仿真的要点。

CDMA通信系统仿真(附带完整程序)

CDMA通信系统仿真(附带完整程序)

扩频通信仿真1.设计思想为了研究CDMA 通信系统的多址干扰,实验利用Matlab 提供的m语言编写了m文件来建立CDMA 通信系统仿真模型,详细讲述各模块的设计及参数设置,并对仿真结果进行分析。

结果表明,多址干扰是CDMA 系统的固有干扰,当同时通信的用户数增多时,多址干扰电平增大,导致系统的误码率也增大。

因此,多址干扰是CDMA 通信系统本身存在的自我干扰,它限制了蜂窝系统的通信容量。

实验讨论的CDMA通信系统的仿真,采用的是直扩方式,信息没有经过调制,伪随机码采用的是63位GOLD序列,仿真框图如图1所示。

本课程的目的是熟悉CDMA通信系统的构架,了解m序列和gold码的软件实现, 以及用gold序列实现扩频和解扩,最后了解整个系统的误比特率与哪些因素有关。

2.程序设计流程图Gold码程序流程图M码程序流程图主程序流程图3.仿真环境本文讨论的CDMA通信系统的仿真是用MATLAB7.0模拟实现的,即数据流仿真模式,用MATLAB编程来实现对CDMA系统的模拟。

仿真实验中选择了一组长度为63的gold码序列作为扩频序列,并假设在理想功率控制下,即接收到的所有用户的信号能量相等。

整个仿真系统实现过程如下:1) 信源采用randint函数产生的+1、-1来代替实际的数字信号。

实际的数字信号应该是模拟信号(如语音信号) 经量化和压缩编码得到的二进制信号,其特点是二值性和随机性。

信源速率设置为10b/s。

2) 扩频与解扩利用自编的m函数和gold函数,产生gold码伪随机序列来达到扩频和多址接入效果。

扩频的运算是信息流与gold码相乘或模二加的过程。

解扩的过程与扩频过程完全相同,即将接收的信号用gold 码进行第二次扩频处理。

要求使用的gold 码与发送端扩频用gold 码不仅码字相同,而且相位相同。

否则会使有用信号自身相互抵消。

解扩处理将信号压缩到信号频带内,由宽带信号恢复为窄带信号。

同时将干扰信号扩展,降低干扰信号的谱密度,使之进入到信息频带内的功率下降,从而使系统获得处理增益,提高系统的抗干扰能力。

-基于MATLAB的多用户CDMA通信系统设计与仿真

-基于MATLAB的多用户CDMA通信系统设计与仿真

设计题目:基于MATLAB的多用户CDMA通信系统设计与仿真摘要随着科技的不断发展以及人们生活水平的不断提高,人们对于移动通信的需求不断增长,本文设计了目前流行的CDMA系统,可实现数字信号的扩频解扩与调制解制。

本文设计的系统分为单用户通信和多用户通信,二者所用的调制方式不完全相同。

以单用户为例,在系统的信源处产生一个数字信号序列,然后对其进行WALSH 码扩频,再对扩频码进行调制,然后在信道中加入噪声,最后实现解扩和解调。

在本文的最后还对整个CDMA系统进行了优化,设计了其外观界面,将调制方式和原理框图联系到一起,很好的实现了整个CDMA系统的仿真。

关键词:CDMA;扩频;PSK;QPSK;仿真;ABSTRACTWith the continuous development of science and technology and people's standard of living continues to improve, the demamd of mobile communication for people grows continuously, This paper describes the design of the current epidemic of CDMA systems, digital signal spread spectrum modulation and dispreading system solutions. This paper describes the design of the system which is divided into single-user and multi-user communication communication. Two kinds of modulation used in the different ways. A single-user example, the source of the system creats a Department of digital signal sequence, and the system achieve its spread spectrum with WALSH code,then modulates the code of spread spectrum, then joined the channel noise,in the end, peforms the solution to expand and demodulation. At last,in this paper the entire CDMA system optimized design of the interface appearance,makes Modulation and block diagram linked together, achieves good of the whole CDMA System Simulation.Keywords:CDMA; Spread spectrum; PSK;QPSK ; Simulation目录1 绪论 (11.1CDMA发展史 (11.2CDMA的优点及应用前景 (21.3论文结构及课题研究内容 (52 CDMA系统的总体设计思路 (7 2.1系统总体设计结构 (72.2系统的实现原理 (73 系统的相关原理及设计过程 (10 3.1MATLAB简介及仿真方法 (10 3.1.1 MATLAB介绍 (103.1.2 仿真方法论 (133.2扩频技术及其仿真实现 (15 3.2.1扩频技术简介 (163.2.2 扩频的仿真实现 (183.3PSK调制解调与仿真实现 (21 3.3.1 PSK调制解调原理 (213.3.2 PSK的仿真实现 (223.4QPSK调制解调及仿真实现 (24 3.4.1 QPSK调制解调原理 (253.4.2 QPSK的仿真实现 (263.5多用户CDMA通信 (303.5.1 DPSK调制解调原理 (303.5.1 多用户DPSK仿真实现 (314 外观界面设计 (344.1GUI (344.1.1 GUI和GUIDE (344.1.2 使用GUIDE创建GUI界面 (364.2主题界面设计流程 (384.2.1 仿真原理图的设计 (384.2.2 系统界面设计流程 (394.3回调函数 (404.3.1 回调函数原型 (404.3.2 回调函数编程实现各界面互联 (415 总结与展望 (435.1系统不足与改进 (435.2系统升级及展望 (43致谢.............................................. 错误!未定义书签。

基于MATLAB的CDMA系统RAKE接收机仿真分析

基于MATLAB的CDMA系统RAKE接收机仿真分析

基于MATLAB的CDMA系统RAKE接收机仿真分析CDMA(Code Division Multiple Access)是一种广泛应用于移动通信系统中的多址技术,其中RAKE接收机是一种常用于CDMA系统中的接收机。

在这篇文章中,我们将讨论基于MATLAB的CDMA系统中RAKE接收机的仿真分析。

首先,我们要理解什么是CDMA系统和RAKE接收机。

CDMA系统是一种用于无线通信的多址技术,它允许多个用户同时在相同频带上进行通信,通过使用不同的扩频码将用户之间的通信进行区分。

CDMA系统具有很好的抗干扰性能和较高的频谱利用率,因此被广泛使用于移动通信领域。

RAKE接收机是一种用于CDMA系统中信号接收的技术,它通过采用多个接收分支来接收和合并从不同路径到达的信号,以提高接收信号的质量。

RAKE接收机通常使用一个或多个强旗手路径来提取信号的多径分支,然后将这些分支合并以获得更好的信号质量。

现在,我们将讨论如何使用MATLAB进行CDMA系统中RAKE接收机的仿真分析。

首先,我们需要定义CDMA系统的参数。

这些参数包括扩频码、码片持续时间、符号持续时间、发射功率等。

我们可以使用MATLAB中的变量来定义这些参数。

接下来,我们需要生成CDMA系统中的发送信号。

我们可以使用MATLAB中的随机函数生成多个用户的发送信号,并使用对应的扩频码将其展开。

然后,我们可以将这些发送信号叠加在一起,并将它们传输到信道中。

然后,我们需要建立CDMA系统的信道模型。

在仿真中,我们可以使用MATLAB中的函数来模拟信道的特性,如多径传播和噪声。

我们可以使用瑞利衰落信道模型来模拟多径传播,并将高斯白噪声添加到接收信号中。

接着,我们可以实现RAKE接收机。

在MATLAB中,我们可以使用函数或自定义算法来实现RAKE接收机的功能。

首先,我们需要将接收信号传输到RAKE接收机中的各个分支。

然后,我们可以使用相关器来检测这些分支中的信号,并选择最强的分支作为接收信号的输出。

基于Matlab的CDMA通信系统仿真

基于Matlab的CDMA通信系统仿真

基于Matlab的CDMA通信系统仿真- 1 -通信系统综合设计与实践1 绪论1.1课题背景及目的20世纪60年代以来,随着民用通信事业的发展,频带拥挤问题日益突出。

CDMA(Code Diveision Multiple Access,码分多址)通信,在使用相同频率资源的情况下,理论上CDMA移动网比模拟网容量大20倍,实际使用中比模拟网大10倍,比GSM要大4~5倍,所以在通信领域中起着非常重要的作用。

CDMA的基本原理是利用互相正交(或尽可能正交)的不同编码,分配给不同用户调制信号,实现多用户同时使用同一频率接入系统和网络的通信。

由于利用互相正交(或尽可能正交)的编码去调制信号,会将原信号的频谱带宽扩展,因此,这种通信方式,又称为扩频通信。

本论文所完成的CDMA通信仿真系统,是结合CDMA的实际通信情况,利用MATLAB的通信工具箱— SIMULINK组建出完整的CDMA通信系统,完成整体设计方案,实现完整的发送到接收的端到端的CDMA无线通信系统的建模、仿真和分析。

教学实践表明,该系统的完成使得比较抽象的概念得以直接表示,烦琐的计算得以大大简化,提高上机效率,在通信原理课程教学中起到良好的辅助作用。

1.2课题研究方法为了研究CDMA通信系统的通信方式,我们对两种扩频码(m序列和正交gold序列)经过衰落信道后再解扩,通过比较两种扩频码的误比特率与信噪比的关系得出用来扩频的PN码哪种更好。

使其更符合CDMA通信的抗干扰能力强的要求和实现多用户同时在同一频率互不干扰进行通信而误比特率性能不随着用户数的增加而恶化这样的目的进行仿真实验。

- 2 -通信系统综合设计与实践2 CDMA基础及原理CDMA多址技术的原理是基于扩频技术,即将需传送的具有一定信号带宽的信息数据,用一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,再经载波调制并发送出去。

接收端由使用完全相同的伪随机码,与接收的带宽信号作相关处理,把宽带信号换成原信息数据的窄带信号即解扩,以实现信息通信。

基于MATLAB的CDMA系统仿真

基于MATLAB的CDMA系统仿真

基于MATLAB的CDMA系统仿真姓名:班级:学号:指导老师:日期:作业要求1.分析附录的源程序,逐行给出中文注释,并分析仿真结果。

2.按照下列框图设计一个CDMA系统,并进行仿真。

1.分析附录的源程序,逐行给出中文注释,并分析仿真结果。

%main_IS95_forward.m%此函数用于IS-95前向链路系统的仿真,包括扩%频调制,匹配滤波,RAKE接收等相关通信模块。

%仿真环境: 加性高斯白噪声信道.%数据速率= 9600 KBps%clear allclose allclcdisp('--------------start-------------------');global Zi Zq Zs show R Gi Gqclear j;show = 0; %控制程序运行中的显示SD = 0; % 选择软/硬判决接收%-------------------主要的仿真参数设置------------------BitRate = 9600; %比特率ChipRate = 1228800; %码片速率N = 184; %源数据数MFType = 1; % 匹配滤波器类型--升余弦R = 5;%+++++++++++++++++++Viterbi生成多项式++++++++++++++++++G_Vit = [1 1 1 1 0 1 0 1 1; 1 0 1 1 1 0 0 0 1];%Viterbi生成多项式矩阵K = size(G_Vit, 2); %列数L = size(G_Vit, 1); %行数%++++++++++++++++++++++++++++++++++++++++++++++++++++++%++++++++++++++++++++++Walsh矩阵++++++++++++++++++++++++ WLen = 64; %walsh码的长度Walsh = reshape([1;0]*ones(1, WLen/2), WLen , 1); %32个1 0行%Walsh = zeros(WLen ,1);%++++++++++++++++++++++++++++++++++++++++++++++++++++++%++++++++++++++++++扩频调制PN码的生成多项式++++++++++++++%Gi = [ 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1]';%Gq = [ 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1]';Gi_ind = [15, 13, 9, 8, 7, 5, 0]'; %i路PN码生成多项式参数Gq_ind = [15, 12, 11, 10, 6, 5, 4, 3, 0]'; %q路PN码生成多项式参数Gi = zeros(16, 1); %16×1的0矩阵Gi(16-Gi_ind) = ones(size(Gi_ind));%根据Gi_ind配置i路PN码生成多项式Zi = [zeros(length(Gi)-1, 1); 1];% I路信道PN码生成器的初始状态Gq = zeros(16, 1); %16×1的0矩阵Gq(16-Gq_ind) = ones(size(Gq_ind)); %根据Gq_ind配置q路PN码生成多项式Zq = [zeros(length(Gq)-1, 1); 1];% Q路信道PN码生成器的初始状态%++++++++++++++++++++++++++++++++++++++++++++++++++++++%+++++++++++++++++++扰码生成多项式++++++++++++++++++++++Gs_ind = [42, 35, 33, 31, 27, 26, 25, 22, 21, 19, 18, 17, 16, 10, 7, 6, 5, 3, 2, 1, 0]'; Gs = zeros(43, 1); %43×1的0矩阵Gs(43-Gs_ind) = ones(size(Gs_ind)); %根据Gs_ind配置扰码生成多项式Zs = [zeros(length(Gs)-1, 1); 1];% 长序列生成器的初始状态%++++++++++++++++++++++++++++++++++++++++++++++++++++++%++++++++++++++++++++++AWGN信道++++++++++++++++++++++++ EbEc = 10*log10(ChipRate/BitRate);%处理增益EbEcVit = 10*log10(L);EbNo = [-2 : 0.5 : 6.5]; %仿真信噪比范围(dB)%EbNo = [-2 : 0.5 : -1.5];%++++++++++++++++++++++++++++++++++++++++++++++++++++++%------------------------------------------------------%-------------------------主程序-------------------------ErrorsB = []; ErrorsC = []; NN = [];if (SD == 1) % 判断软/硬判决接收fprintf('\n SOFT Decision Viterbi Decoder\n\n');elsefprintf('\n HARD Decision Viterbi Decoder\n\n');endfor i=1:length(EbNo) %根据EbNo多次运行fprintf('\nProcessing %1.1f (dB)', EbNo(i));%输出当前EbNo值iter = 0; ErrB = 0; ErrC = 0;while (ErrB <300) & (iter <150)drawnow;%++++++++++++++++++++++发射机+++++++++++++++++++++++TxData = (randn(N, 1)>0);%生成源数据% 速率为19.2Kcps[TxChips, Scrambler] = PacketBuilder(TxData, G_Vit, Gs); %产生IS-95前向链路系统的发送数据包% 速率为1.2288Mcps[x PN MF] = Modulator(TxChips, MFType, Walsh);%实现IS-95前向链路系统的数据调制%++++++++++++++++++++++++++++++++++++++++++++++++++++++%++++++++++++++++++++++++信道+++++++++++++++++++++++++++noise = 1/sqrt(2)*sqrt(R/2)*( randn(size(x)) + j*randn(size(x)))*10^(-(EbNo(i) - EbEc)/20);%生成噪声序列r = x+noise;%加入噪声%++++++++++++++++++++++++++++++++++++++++++++++++++++++%+++++++++++++++++++++++++接收机++++++++++++++++++++++++RxSD = Demodulator(r, PN, MF, Walsh); %软判决,速率为19.2 KcpsRxHD = (RxSD>0); % 定义接收码片的硬判决if (SD)[RxData Metric]= ReceiverSD(RxSD, G_Vit, Scrambler); %软判决else[RxData Metric]= ReceiverHD(RxHD, G_Vit, Scrambler); %硬判决end%++++++++++++++++++++++++++++++++++++++++++++++++++++++if(show)subplot(311); plot(RxSD, '-o'); title('Soft Decisions'); %软判决结果图subplot(312); plot(xor(TxChips, RxHD), '-o'); title('Chip Errors');%RAKE接收机输入符号与发送码相比出错的码subplot(313); plot(xor(TxData, RxData), '-o'); %硬判决接收机与发送数据相比的出错码title(['Data Bit Errors. Metric = ', num2str(Metric)]);pause;endif(mod(iter, 50)==0) %每50次保存一次fprintf('.');save TempResults ErrB ErrC N iter %保存结果endErrB = ErrB + sum(xor(RxData, TxData));%求出错比特数ErrC = ErrC + sum(xor(RxHD, TxChips)); %求出错码数iter = iter+ 1;%迭代次数endErrorsB = [ErrorsB; ErrB]; %存储各EbNo值下的出错比特数ErrorsC = [ErrorsC; ErrC]; %存储各EbNo值下的出错码数NN = [NN; N*iter]; %存储各EbNo值下的总数据码数目save SimData * %保存当前迭代的数据end%+++++++++++++++++++++++++误码率计算++++++++++++++++++++++++PerrB = ErrorsB./NN; %出错比特比例%PerrB1 = ErrorsB1./NN1;PerrC = ErrorsC./NN; %出错码比例Pbpsk= 1/2*erfc(sqrt(10.^(EbNo/10))); %EbNo的余误差PcVit= 1/2*erfc(sqrt(10.^((EbNo-EbEcVit)/10)));%EbNo-EbEcVit的余误差Pc = 1/2*erfc(sqrt(10.^((EbNo-EbEc)/10)));%EbNo-EbEc的余误差%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%%+++++++++++++++++++++++++性能仿真显示++++++++++++++++++++++ figure;semilogy(EbNo(1:length(PerrB)), PerrB, 'b-*'); hold on;%信噪比误码率图% %semilogy(EbNo(1:length(PerrB1)), PerrB1, 'k-o'); hold on;% semilogy(EbNo(1:length(PerrC)), PerrC, 'b-o'); grid on;% semilogy(EbNo, Pbpsk, 'b-.^');% %semilogy(EbNo, PcVit, 'k-.x'); ylabel('BER');% semilogy(EbNo, Pc, 'b-.x');xlabel('信噪比/dB');ylabel('误码率');grid on;% legend('Pb of System (HD)', 'Pb of System (SD)', 'Pc before Viterbi of System',% ... 'Pb of BPSK with no Viterbi (theory)', 'Pc on Receiver (theory)');%% legend('Pb of System', 'Pc before Viterbi of System', ...%'Pb of BPSK with no Viterbi (theory)',%'Pc before Viterbi (theory)', 'Pc on Receiver (theory)');%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++disp('--------------end-------------------');%------------------------------------------------------% ************************beginning of file*****************************%PacketBuilder.mfunction [ChipsOut, Scrambler] = PacketBuilder(DataBits, G, Gs);%此函数用于产生IS-95前向链路系统的发送数据包%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% DataBits 发送数据(二进制形式)% G Viterbi编码生成多项式% Gs 长序列生成多项式(扰码生成多项式)% ChipsOut 输入到调制器的码序列(二进制形式)% Scrambler 扰码%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ global Zs %扰码状态K = size(G, 2); %维特比多项式的长度L = size(G, 1); %每个数据比特的码片数N = 64*L*(length(DataBits)+K-1);% 码片数(9.6 Kbps -> 1.288 Mbps)chips = VitEnc(G, [DataBits; zeros(K-1,1)]); % Viterbi编码% 交织编码INTERL = reshape(chips, 24, 16); % IN:列, OUT:行chips = reshape(INTERL', length(chips), 1); %速率=19.2 KBps% 产生扰码[LongSeq Zs] = PNGen(Gs, Zs, N);%根据生成多项式和输入状态产生长度为N的PN序列Scrambler = LongSeq(1:64:end);%扰码ChipsOut = xor(chips, Scrambler); %加扰%************************end of file***********************************% ************************beginning of file*****************************%VitEnc.mfunction y = VitEnc(G, x);% 此函数根据生成多项式进行Viterbi编码%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% G 生成多项式的矩阵% x 输入数据(二进制形式)% y Viterbi编码输出序列%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++K = size(G, 1); %每个数据比特的码片数L = length(x); %输入数据的长度yy = conv2(G, x'); %二维卷积yy = yy(:, 1:L); %根据L重新设定yy长度y = reshape(yy,K*L, 1);%矩阵变形y = mod(y, 2); %模二运算% ************************end of file*********************************** % ************************beginning of file***************************** %PNGen.mfunction [y, Z] = PNGen(G, Zin, N);%% 此函数是根据生成多项式和输入状态产生长度为N的伪随机序列%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% G 生成多项式% Zin 移位寄存器初始化% N PN序列长度% y 生成的PN码序列% Z 移位寄存器的输出状态%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ L = length(G);%扰码生成多项式长度Z = Zin; % 移位寄存器的初始化y = zeros(N, 1);%N*1的0矩阵for i=1:Ny(i) = Z(L); %获取当前状态输出值(移位寄存器的最后一位输出)Z = xor(G*Z(L), Z); %生成移位寄存器次态Z = [Z(L); Z(1:L-1)]; %移位寄存器后移1位end%yy = filter(1, flipud(G), [1; zeros(N-1, 1)]);%yy = mod(yy, 2);%************************end of file*********************************** % ************************beginning of file***************************** %Modulator.mfunction [TxOut, PN, MF] = Modulator(chips, MFType, Walsh);%此函数用于实现IS-95前向链路系统的数据调制%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% chips 发送的初始数据% MFType 成型滤波器的类型选择% Walsh walsh码% TxOut 调制输出信号序列% PN 用于扩频调制的PN码序列% MF 匹配滤波器参数%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ global Zi Zq show R Gi GqN = length(chips)*length(Walsh); %输出数据的数目% 输入速率= 19.2 KBps, 输出速率= 1.2288 Mcpstmp = sign(Walsh-1/2)*sign(chips'-1/2); %求扩频调制码数目的中间变量chips = reshape(tmp, prod(size(tmp)), 1);%矩阵变形[PNi Zi] = PNGen(Gi, Zi, N);%i路PN序列生成[PNq Zq] = PNGen(Gq, Zq, N);%q路PN序列生成PN = sign(PNi-1/2) + j*sign(PNq-1/2); %i、q路以复数形式合并chips_out = chips.*PN;%得到复数形式的码序列chips = [chips_out, zeros(N, R-1)];%码序列0插值chips = reshape(chips.' , N*R, 1);%矩阵变形%成型滤波器switch (MFType) %根据MFType选择滤波器类型case 1%升余弦滤波器L = 25;L_2 = floor(L/2);n = [-L_2:L_2]; %升余弦滤波器点数B = 0.7; %B越大拖尾越小MF = sinc(n/R).*(cos(pi*B*n/R)./(1-(2*B*n/R).^2)); %升余弦滤波器形状MF = MF/sqrt(sum(MF.^2)); %升余弦滤波器特性曲线case 2%矩形滤波器L = R;L_2 = floor(L/2);MF = ones(L, 1); %1->0,锐截止MF = MF/sqrt(sum(MF.^2)); %矩形滤波器特性曲线case 3%汉明滤波器L = R;L_2 = floor(L/2);MF = hamming(L);%生成汉明滤波器MF = MF/sqrt(sum(MF.^2));%汉明滤波器特性曲线endMF = MF(:); %转置TxOut = sqrt(R)*conv(MF, chips)/sqrt(2);%通过成型滤波器TxOut = TxOut(L_2+1: end - L_2); %限定序列区间if (show)figure;subplot(211); plot(MF, '-o'); title('Matched Filter'); grid on;%成型滤波器特性曲线图subplot(212); psd(TxOut, 1024, 1e3, 113); title('Spectrum'); %功率谱密度估计end% ************************end of file***********************************% ************************beginning of file*****************************%Demodulator.mfunction [SD] = Demodulator(RxIn, PN, MF, Walsh);% 此函数是实现基于RAKE接收机的IS-95前向信链路系统的数据包的解调%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% RxIn 输入信号% PN PN码序列(用于解扩)% MF 匹配滤波器参数% Walsh 用于解调的walsh码% SD RAKE接收机的软判决输出%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++% DEMODULATOR This function performs demodulation of the forward% Channel packet, based on RAKE Receiver% Block Diagram% Input Signal -> [Matched Filter] -> [Sampler] -> [RAKE Receiver] -> [Walsh] -> [DeSpreading]% Inputs: RxIn - input signal (I/Q) analoge% PN - PN sequence (used for De-spreading)% MF - matched filter taps% Walsh - Used row of Walsh matrix for recovering %% Outputs: SD - Soft Decisions of RAKE receiver%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++global RN = length(RxIn)/R; %有用码的个数L = length(MF);L_2 = floor(L/2);rr = conv(flipud(conj(MF)), RxIn); %通过匹配接收滤波器rr = rr(L_2+1: end - L_2); %限定接收符号序列长度Rx = sign(real(rr(1:R:end))) + j*sign(imag(rr(1:R:end)));%接收符号采样Rx = reshape(Rx, 64, N/64); %列导向Walsh = ones(N/64, 1)*sign(Walsh'-1/2);%行导向walsh码PN = reshape(PN, 64, N/64)';%矩阵变形PN = PN.*Walsh;%walsh正交% 输入速率= 1.2288 Mpbs, 输出速率= 19.2 KBpsSD= PN*Rx;%解扩SD= real(diag(SD));%确定软判决输出% ***********************end of file***********************************% ************************beginning of file*****************************%ReceiverSD.mfunction [DataOut, Metric] = ReceiverSD(SDchips, G, Scrambler);% 此函数用于实现基于Viterbi译码的发送数据的恢复%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% SDchips 软判决RAKE接收机输入符号% G Viterbi编码生成多项式矩阵% Scrambler 扰码序列% DataOut 接收数据(二进制形式)% Metric Viterbi译码最佳度量%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++if (nargin == 1)%判断只有SDchips传入时在此生成Viterbi编码生成多项式矩阵G = [1 1 1 1 0 1 0 1 1; 1 0 1 1 1 0 0 0 1];end% 速率=19.2 KBpsSDchips = SDchips.*sign(1/2-Scrambler);%解扰INTERL = reshape(SDchips, 16, 24);%解交织SDchips = reshape(INTERL', length(SDchips), 1); % 速率=19.2 KBps[DataOut Metric] = SoftVitDec(G, SDchips, 1);%实现软判决输入的Viterbi译码% ************************end of file**********************************% ************************beginning of file*****************************%SoftVitDec.mfunction [xx, BestMetric] = SoftVitDec(G, y, ZeroTail);%% 此函数是实现软判决输入的Viterbi译码%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% G 生成多项式的矩阵% y 输入的待译码序列% ZeroTail 判断是否包含‘0’尾% xx Viterbi译码输出序列% BestMetric 最后的最佳度量%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++L = size(G, 1); % 输出码片数K= size(G, 2); % 生成多项式的长度N = 2^(K-1); % 状态数T = length(y)/L; % 最大栅格深度OutMtrx = zeros(N, 2*L); %输出矩阵的定义for s = 1:Nin0 = ones(L, 1)*[0, (dec2bin((s-1), (K-1))-'0')];in1 = ones(L, 1)*[1, (dec2bin((s-1), (K-1))-'0')];out0 = mod(sum((G.*in0)'), 2);out1 = mod(sum((G.*in1)'), 2);OutMtrx(s, :) = [out0, out1]; %生成输出矩阵endOutMtrx = sign(OutMtrx-1/2);PathMet = [100; zeros((N-1), 1)]; % 初始状态= 100PathMetTemp = PathMet(:,1); %副本Trellis = zeros(N, T); %栅格的矩阵Trellis(:,1) = [0 : (N-1)]';%给第一列赋值y = reshape(y, L, length(y)/L);%矩阵按输出码片数变形for t = 1:T %主栅格计算循环yy = y(:, t); %取出y的第t列for s = 0:N/2-1[B0 ind0] = max( PathMet(1+[2*s, 2*s+1]) + [OutMtrx(1+2*s, 0+[1:L]) * yy; OutMtrx(1+(2*s+1), 0+[1:L])*yy] );[B1 ind1] = max( PathMet(1+[2*s, 2*s+1]) + [OutMtrx(1+2*s, L+[1:L]) * yy; OutMtrx(1+(2*s+1), L+[1:L]) * yy] );PathMetTemp(1+[s, s+N/2]) = [B0; B1]; %改变状态Trellis(1+[s, s+N/2], t+1) = [2*s+(ind0-1); 2*s + (ind1-1)];%生成栅格矩阵endPathMet = PathMetTemp;%赋状态值endxx = zeros(T, 1);%生成单列0矩阵,输出变量if (ZeroTail) %确定最佳度量BestInd = 1;else[Mycop, BestInd] = max(PathMet); %非‘0’尾,取最大值所在位置endBestMetric = PathMet(BestInd); %得到最后的最佳度量xx(T) = floor((BestInd-1)/(N/2)); %赋值xx最后一个数NextState = Trellis(BestInd, (T+1)); %从栅格矩阵获得初态for t=T:-1:2xx(t-1) = floor(NextState/(N/2));%倒序生成xxNextState = Trellis( (NextState+1), t); %从栅格矩阵获得次态endif (ZeroTail)xx = xx(1:end-K+1);%限定译码输出序列长度end% ************************end of file***********************************% ************************beginning of file*****************************%ReceiverHD.mfunction [DataOut, Metric] = ReceiverHD(HDchips, G, Scrambler);% 此函数用于实现基于Viterbi译码的硬判决接收机%+++++++++++++++++++++++variables++++++++++++++++++++++++++++%HDchips 硬判决RAKE接收机输入符号% G Viterbi编码生成多项式矩阵% Scrambler 扰码序列% DataOut 接收数据(二进制形式)% Metric Viterbi译码最佳度量%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++if (nargin == 1) %判断只有HDchips传入时在此生成Viterbi编码生成多项式矩阵G = [1 1 1 1 0 1 0 1 1; 1 0 1 1 1 0 0 0 1];end% 速率=19.2 KBpsHDchips = xor(HDchips, Scrambler);%解扰INTERL = reshape(HDchips, 16, 24);%解交织HDchips = reshape(INTERL', length(HDchips), 1);%速率=19.2 KBps[DataOut Metric] = VitDec(G, HDchips, 1);%维特比解码%************************end of file***********************************% ************************beginning of file*****************************%VitDec.mfunction [xx, BestMetric] = VitDec(G, y, ZeroTail);%% 此函数是实现硬判决输入的Viterbi译码%+++++++++++++++++++++++variables++++++++++++++++++++++++++++% G 生成多项式的矩阵% y 输入的待译码序列% ZeroTail 判断是否包含‘0’尾% xx Viterbi译码输出序列% BestMetric 最后的最佳度量%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++L = size(G, 1); % 输出码片数K= size(G, 2); % 生成多项式长度N = 2^(K-1); % 状态数T = length(y)/L; % 最大栅格深度OutMtrx = zeros(N, 2*L);%输出矩阵的定义for s = 1:Nin0 = ones(L, 1)*[0, (dec2bin((s-1), (K-1))-'0')];in1 = ones(L, 1)*[1, (dec2bin((s-1), (K-1))-'0')];out0 = mod(sum((G.*in0)'), 2);out1 = mod(sum((G.*in1)'), 2);OutMtrx(s, :) = [out0, out1];%生成输出矩阵endPathMet = [0; 100*ones((N-1), 1)];%初始状态为0PathMetTemp = PathMet(:,1);%副本Trellis = zeros(N, T);%栅格的矩阵Trellis(:,1) = [0 : (N-1)]';%给第一列赋值y = reshape(y, L, length(y)/L);%矩阵按输出码片数变形for t = 1:T %主栅格计算循环yy = y(:, t)';%取出y的第t列for s = 0:N/2-1[B0 ind0] = min( PathMet(1+[2*s, 2*s+1]) + [sum(abs(OutMtrx(1+2*s, 0+[1:L]) - yy).^2); sum(abs(OutMtrx(1+(2*s+1), 0+[1:L]) - yy).^2)] );[B1 ind1] = min( PathMet(1+[2*s, 2*s+1]) + [sum(abs(OutMtrx(1+2*s, L+[1:L]) - yy).^2); sum(abs(OutMtrx(1+(2*s+1), L+[1:L]) - yy).^2)] );PathMetTemp(1+[s, s+N/2]) = [B0; B1];%改变状态Trellis(1+[s, s+N/2], t+1) = [2*s+(ind0-1); 2*s + (ind1-1)];%生成栅格矩阵endPathMet = PathMetTemp;%赋状态值endxx = zeros(T, 1);%生成单列0矩阵,输出变量if (ZeroTail) %确定最佳度量BestInd = 1;else[Mycop, BestInd] = min(PathMet);%非‘0’尾,取最小值所在位置endBestMetric = PathMet(BestInd);%得到最后的最佳度量xx(T) = floor((BestInd-1)/(N/2));%赋值xx最后一个数NextState = Trellis(BestInd, (T+1));%从栅格矩阵获得初态for t=T:-1:2xx(t-1) = floor(NextState/(N/2)); %倒序生成xxNextState = Trellis( (NextState+1), t);%从栅格矩阵获得次态endif (ZeroTail)xx = xx(1:end-K+1); %限定译码输出序列长度end% ************************end of file***********************************运行结果:图1 升余弦滤波器时的结果图2 矩形滤波器时代结果图3 矩形滤波器时代结果2.按照下列框图设计一个CDMA系统,并进行仿真。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1 绪论1.1课题背景及目的20世纪60年代以来,随着民用通信事业的发展,频带拥挤问题日益突出。

CDMA(Code Diveision Multiple Access,码分多址)通信,在使用相同频率资源的情况下,理论上CDMA移动网比模拟网容量大20倍,实际使用中比模拟网大10倍,比GSM要大4~5倍,所以在通信领域中起着非常重要的作用。

CDMA的基本原理是利用互相正交(或尽可能正交)的不同编码,分配给不同用户调制信号,实现多用户同时使用同一频率接入系统和网络的通信。

由于利用互相正交(或尽可能正交)的编码去调制信号,会将原信号的频谱带宽扩展,因此,这种通信方式,又称为扩频通信。

本论文所完成的CDMA通信仿真系统,是结合CDMA的实际通信情况,利用MATLAB的通信工具箱—SIMULINK组建出完整的CDMA通信系统,完成整体设计方案,实现完整的发送到接收的端到端的CDMA 无线通信系统的建模、仿真和分析。

教学实践表明,该系统的完成使得比较抽象的概念得以直接表示,烦琐的计算得以大大简化,提高上机效率,在通信原理课程教学中起到良好的辅助作用。

1.2课题研究方法为了研究CDMA通信系统的通信方式,我们对两种扩频码(m序列和正交gold 序列)经过衰落信道后再解扩,通过比较两种扩频码的误比特率与信噪比的关系得出用来扩频的PN码哪种更好。

使其更符合CDMA通信的抗干扰能力强的要求和实现多用户同时在同一频率互不干扰进行通信而误比特率性能不随着用户数的增加而恶化这样的目的进行仿真实验。

2 CDMA基础及原理CDMA多址技术的原理是基于扩频技术,即将需传送的具有一定信号带宽的信息数据,用一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,再经载波调制并发送出去。

接收端由使用完全相同的伪随机码,与接收的带宽信号作相关处理,把宽带信号换成原信息数据的窄带信号即解扩,以实现信息通信。

2.1扩频通信扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息所需的最小带宽;频带的扩展是通过一个独立的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接受、解扩及恢复所传信息数据。

2.1.1 扩频通信理论基础香农公式:C=Wlog2(1+S/N)1、在给定的传输速率C不变的条件下,频带宽度W和信噪比S/N是可以互换的。

即可通过增加频带宽度的方法,在较低的信噪比情况下,传输信息。

2、扩展频谱换取信噪比要求的降低,正是扩频通信的重要特点,并由此为扩频通信的应用奠定了基础。

2.1.2 扩频通信系统的分类(1)直接序列扩频(DS)(2) 跳频扩频(FH)(3) 跳时扩频(TH)(4)混合方式(以上三种基本方式的不同组合)在实际的CDMA系统中,直接序列扩频得到了广泛的认可和应用,所以,在本次实验中主要研究直接序列扩频技术。

2.2 直接序列扩频DS-SS是直接用具有高码率的扩频码序列在发送端去扩展信号的频谱。

而在收端,用相同的扩频码序列去进行解扩,把展宽的扩频信号还原成原始的信息。

图2-1 直接序列扩频的发射机和接收机框图2.3 扩频码序列在扩频系统中,信号频谱的扩展是通过扩频码实现的,扩频系统的性能与扩频码的性能有很大的关系,对扩频通常提出下列要求:易于产生;具有随机性;扩频码应该具有尽可能长的周期,使干扰者难以从扩频码的一小段中重建整个码序列;扩频码应该具有良好的自相关和互相关特性,以利于接收时的捕获和跟踪,以及多用户检测等。

扩频码中应用最多的是M序列,又称最大长度序列,还有GOLD 序列、WALSH码序列等,本次试验中我们主要运用了M序列和正交GOLD序列。

2.3.1 PN码CDMA信道的区分是靠PN码来进行的,因而要求PN码自相关性要好,互相关性要弱,实现和编码方案简单等。

目前的CDMA系统就是采用一种基本的PN序列m序列作为地址码,利用它的不同相位来区分不同用户。

M序列是最长线性移位寄存器序列的简称,它通常是由反馈移位寄存器产生的具有像随机噪声波形的周期性二元序列。

Gold码序列是一种基于m序列的码序列。

Gold码是m序列的组合码,由同步时钟控制的两个m序列逐位模2加得到。

这两个码发生器的周期相同,速率也相同,因而两者保持一定的相位关系,这样产生的组合码与这两个子码序列的周期也相同。

正交Gold码是在优选对产生的Gold码末尾加0,使序列的长度为偶数。

3 DS-CDMA通信系统仿真3.1 DS-CDMA 通信系统原理图图3-1DS-CDMA通信系统原理图在实验中,我们采用;两种扩频码进行仿真。

M序列和正交Gold序列,扩频后的数据通过脉冲成型滤波器后通过信道同时到达接收端,在接收端分别对不同用户信息数据进行解扩,恢复各个用户的原始信息。

3.2仿真流程设计与介绍3.2.1仿真设计步骤1、m序列的DS-CDMA在AWGN下的性能的仿真。

2、正交Gold序列的DS-CDMA在AWGN下的性能的仿真。

3、对比两个扩频码在AWGN信道下的性能曲线,分析哪种扩频码更适合在AWGN 信道中传输,传输衰减最小,对比m序列和正交Gold序列的抗干扰能力。

4、为了证明这一结论,把两种PN码再经过Rayleigh衰落信道下的性能进行验证。

(代码见附录)3.2.2程序编程设计最外层循环的时候是信噪比,根据每种信噪比下,首先产生各个用户的发射数据,根据用户数,每一行是每个用户的发射数据,然后进行Gray编码、4-QAM 调制,调制完后,对信号进行扩频,扩频部分是通过spread函数完成的,是完成扩频的功能。

扩频时,看输入参数是否满足要求,满足要求后,用扩频码与每一个数据符号相乘,对原始符号进行扩展,完成扩频。

扩频完成后,再通过脉冲成形滤波器计算每个用户信号功率。

当用户数大于1时,所有用户数据相加。

相加完成后,如果需要通过瑞利衰落信道,再让信道系数与发射数据相乘。

接收端加入高斯白噪声,首先根据信噪比计算高斯白噪声标准差,根据标准差加入白噪声。

如果通过瑞利衰落信道后,我们还需要进行一个信道补偿。

最后通过脉冲成形滤波器进行降采样,之后进行数据解扩,解扩部分是通过despread函数完成的,解扩完成后,对信号进行4-QAM解调、Gray编码逆映射,分别对用户原始数据和解扩后数据进行比较,最后统计误比特率。

以上就是完成扩频的主程序。

M序列和正交Gold序列脚本程序的介绍:用户数统一定义的是1、4、7,扩频码分别选择的是M序列和正交Gold序列,然后在每种用户数下仿真扩频系统的性能,最后画出仿真得到的误比特率。

4 仿真结果分析4.1 实验仿真运行结果12345678910101010信噪比EbNo(dB)误比特率(B E R )图4-1 M 序列DS_CDMA 在AWGN 下的性能从图4-1中可以看出,由于m 序列即使在完全同步时,之间的互相换值也不为0,因此随着用户数的增加(解调其中一个用户的数据时,其他用户会对该用户的解调产生干扰),干扰越来越大,导致系统的误码率性能下降。

12345678910101010信噪比EbNo(dB)误比特率(B E R )图4-2 正交Gold 序列在AWGN 下的性能从图4-2中可以看出,由于正交Gold 序列在完全同步时,它们的互相关值为0,因此其BER 性能并不随着用户数的增加而恶化。

在信噪比为2 、4 、6时误比特率基本相同。

由图可以看出来当误比特率仿真时候小于10-3时结果就会有一定的偏差。

但还是可以看出正交Gold 序列比M 序列的性能要好。

所以,初步得出结论:正交Gold 序列在AWGN 信道下的抗干扰能力更强,衰减比,序列要小。

为证明这一结论进行了下面的实验(图4-3、图4-4)。

123456789101010信噪比EbNo(dB)误比特率(B E R )图4-3M 序列在Rayleigh 衰落信道下的性能对比图4-1和图4-3,显然M 序列在瑞利衰落信道下的性能要比能过AWGN 信道下的性能要差。

123456789101010信噪比EbNo(dB)误比特率(B E R )图4-4 正交Gold 序列在Rayleigh 衰落信道下的性能正交Gold 序列在的瑞利衰落信道下的性能也要比AWGN 信道下的性能要差,可以看出,DS-CDMA 系统在Rayeligh 衰落信道下的性能要比AWGN 信道下的性能差。

在图4-3上可以看出,随着用户数的增加,其误比特率还是会增高,但是由图4-4可以看出,信号的误比特率甚至由于用户的增多而降低,性能变的更优,此次实验,可能存在些许误差,而且为了使程序更快运行出结果我们给他加了信道补偿,也可能会由于描点过少,造成图像与真实有些不符,但从大体方向上仍然能够得出结论,即使在瑞利衰落信道下正交Gold 序列的性能依然优于m 序列。

总结对于本仿真而言,已基本完成了设计任务书的设计和研究目的,通过用MATLAB 对DS-CDMA 系统的仿真调试、结果分析,让我组熟悉了DS-CDMA 的工作原理,加深了对扩频通信的认识,并深刻的了解PN码在不同信道的衰落情况。

通过仿真结果中波形的直观方式,更让我们了解到了系统衰减的规律。

但是在本设计中也存在着缺陷与不足1、在本设计中过程中可能由于程序过于复杂,信息本身所占用的带宽偏大,用来传输信息的带宽相对不够大,造成结果并不明显,信息衰减严重。

2、在设计中只考虑到加性高斯信道所带来的干扰,在实际通信信道却是复杂多变,存在着各种各样的情况,所以最后的接收信号是在很简单的干扰下得出。

要想应用于实际中,必须加入各种噪声来考虑,以实现真实系统的设计。

3、实验中,我们选择加大传输带宽,来弥补其他干扰带来的影响,可能会造成消耗过大,浪费带宽的结果,实际应用中是不实用的。

只能作为仿真,进行研究。

即使如此,在本次设计的整个过程中,以上的结果已经令我们受益匪浅。

通信系统的性能分析和仿真,随着通信技术、信息技术和计算机技术的发展以及网络系统的大量应用,显得越来越重要。

致谢在本次仿真设计中,感谢指导老师在论文选题、设计任务书中对我的无私帮助,加深了我对专业基础理论的理解,拓宽了我的专业知识面,实在是受益匪浅。

感谢我组同学的团结协作,在设计过程中,共同商讨,共同去图书馆查阅相关参考资料,使我组能够抓紧宝贵的时间,完成论文的写作。

在此,谨对所有在论文写作中帮助过我的老师、同学表示衷心的感谢和由衷的敬意!谢谢大家!参考文献[1] 刘学勇,编著.通信系统建模与仿真(电子工业出版社)[2] 邓薇,编著.MATALB函数速查手册(人民邮电出版社)[3] 【美】William C.Y.Lee,著.移动通信工程理论和应用(第二版)(人民邮电出版社)[4] 王华奎,李艳萍等编著.移动通信原理与技术(清华大学出版社)附录(各部分编程):1、M序列function [mout] = mseq(n, taps, inidata, num)% **************************************************************** % n : m序列的阶数n% taps : 反馈寄存器的连接位置% inidata : 寄存器的初始值序列% num : 输出的m序列的个数% mout : 输出的m序列,如果num>1,则每一行为一个m序列% ****************************************************************if nargin < 4num = 1;endmout = zeros(num,2^n-1);fpos = zeros(n,1);fpos(taps) = 1;for ii=1:2^n-1mout(1,ii) = inidata(n); % 寄存器的输出值temp = mod(inidata*fpos,2); % 计算反馈数据inidata(2:n) = inidata(1:n-1); % 寄存器移位一次inidata(1) = temp; % 更新第1个寄存器的值endif num > 1 %如果要输出多个m序列,生成其他m序列for ii=2:nummout(ii,:) = shift(mout(ii-1,:),1);endend关于shift函数的代码:function [outregi] = shift(inregi,shiftr)% **************************************************************** % inrege : 输入序列% shiftr : 循环右移的位数% outregi : 输出序列% ****************************************************************v = length(inregi);outregi = inregi;shiftr = rem(shiftr,v);if shiftr > 0outregi(:,1:shiftr) = inregi(:,v-shiftr+1:v); %循环移位outregi(:,1+shiftr:v) = inregi(:,1:v-shiftr);elseif shiftr < 0outregi(:,1:v+shiftr) = inregi(:,1-shiftr:v);outregi(:,v+shiftr+1:v) = inregi(:,1:-shiftr);end%********************* end of file ********************************2、Gold序列:function [gout] = goldseq(m1, m2, num)% **************************************************************** % m1 : m序列1% m2 : m序列2% num : 生成的Gold序列个数% gout : 生成的Gold序列输出% ****************************************************************if nargin < 3 %如果没有指定生成的Gold序列个数,默认为1num = 1;endgout = zeros(num,length(m1));for ii=1:num %根据Gold序列生成方法生成Gold序列gout(ii,:) = xor(m1,m2);m2 = shift(m2,1);end%********************** end of file ********************************其shift函数代码同M序列3、仿真部分主程序:%直接序列扩频主程序代码function [ber] = dscdma(user,seq)% user: 同时进行扩频通信的用户数% seq: 扩频码1:M-序列 2:Gold序列 3:正交Gold序列% ber:该用户数下的误码率%************************** 初始化部分 ***************************** sr = 25600.0; % 符号速率nSymbol=1000; %每种信噪比下发送的符号数M = 4; % 4-QAM调制br = sr * log2(M); % 比特速率graycode=[0 1 3 2]; % Gray编码规则EbNo=0:2:10; % Eb/No 变化范围%********************** 脉冲成形滤波器参数 ************************** delay = 10; % 升余弦滤波器时延Fs = 8; % 滤波器过采样数rolloff = 0.5; % 升余弦滤波器滚降因子rrcfilter = rcosine(1,Fs,'fir/sqrt',rolloff,delay);%设计根升余弦滤波器%********************** 扩频码产生参数 **********************% user = user1; % 用户数stage = 3; % m序列的阶数ptap1 = [1 3]; % m序列1的寄存器连接方式ptap2 = [2 3]; % m序列2的寄存器连接方式regi1 = [1 1 1 ]; % m序列1的寄存器初始值regi2 = [1 1 1]; % m序列2的寄存器初始值%******************** 扩频码的生成 *********************switch seqcase 1 % M-序列 code = mseq(stage,ptap1,regi1,user);case 2 % Gold 序列 m1 = mseq(stage,ptap1,regi1);m2 = mseq(stage,ptap2,regi2);code = goldseq(m1,m2,user);case 3 % 正交 Gold 序列 m1 = mseq(stage,ptap1,regi1);m2 = mseq(stage,ptap2,regi2);code = [goldseq(m1,m2,user),zeros(user,1)];endcode = code * 2 - 1;clen = length(code);%************************** 衰落信道参数 **************************ts = 1 / Fs / sr/ clen; % 信道采样时间间隔t=(0:nSymbol*Fs*clen-1+2*delay*Fs)*ts; % 每种信噪比下的符号传输时间%fd = 160; % 多普勒频移 [Hz] %h=rayleigh(fd,t);%**************************** 仿真开始 ****************************for indx=1:length(EbNo)indx%************************** 发射端 ******************************** data = randsrc(user,nSymbol,[0 :3]) ; % 产生各个用户的发射数据 data1=graycode(data+1); % Gray编码 data1 = qammod(data1,M); % 4-QAM 调制 [out] = spread(data1,code); % 扩频out1=rcosflt(out.',sr,Fs*sr,'filter',rrcfilter);% 通过脉冲成形滤波器spow = sum(abs((out1)).^2) / nSymbol; % 计算每个用户信号功率if user > 1 % 用户数大于1时,所有用户数据相加 out1=sum(out1.');elseout1=out1.';end%******************** 通过瑞利衰落信道 ******************************% out1=h.*out1;%************************* 接收端 *********************************sigma = sqrt(0.5 * spow * sr / br * 10^(-EbNo(indx)/10));% 根据信噪比计算高斯白噪声方差y=[];for ii=1:usery(ii,:)=out1+sigma(ii).*(randn(1,length(out1))+j*randn(1,length(ou t1))); % 加入高斯白噪声(AWGN)%y(ii,:)=y(ii,:)./h; % 假设理想信道估计endy=rcosflt(y.',sr,Fs*sr,'Fs/filter',rrcfilter);% 通过脉冲成形滤波器进行滤波y=downsample(y,Fs); % 降采样for ii=1:usery1(:,ii)=y(2*delay+1:end-2*delay,ii);endyd = despread(y1.',code); % 数据解扩 demodata = qamdemod(yd,M); % 4-QAM 解调 demodata=graycode(demodata+1); % Gray编码逆映射[err,ber(indx)]=biterr(data,demodata,log2(M)); % 统计误比特率end主程序中spread函数的代码:%扩频函数function [out] = spread(data, code)% **************************************************************** % data : 输入数据序列% code : 扩频码序列% out : 扩频后的输出数据序列% ****************************************************************switch nargincase { 0 , 1 } %如果输入参数个数不对,提示错误error('缺少输入参数');end[hn,vn] = size(data);[hc,vc] = size(code);if hn > hc %如果扩频码数小于输入的待扩频的数据序列,提示错误 error('缺少扩频码序列');endout = zeros(hn,vn*vc);for ii=1:hnout(ii,:) = reshape(code(ii,:).'*data(ii,:),1,vn*vc);end%**************************** end of file *************************解扩函数despread的代码:%信号解扩function out = despread(data, code)% **************************************************************** % data : 输入数据序列% code : 解扩使用的扩频码序列% out : 解扩后的输出数据序列% ****************************************************************switch nargin %如果输入参数个数不对,提示错误case { 0 , 1 }error('缺少输入参数');end[hn,vn] = size(data);[hc,vc] = size(code);out = zeros(hc,vn/vc);for ii=1:hcxx=reshape(data(ii,:),vc,vn/vc);out(ii,:)= code(ii,:)*xx/vc;end%**************************** end of file *************************4、M序列DS-CDMA在AWGN下的性能,代码:%m-序列DS-CDMA在AWGN信道下的性能仿真clear alluser=[1 4 7 ];seq=1;for index=1:length(user)ber(index,:)=dscdma(user(index),seq);endEbNo=0:2:10;semilogy(EbNo,ber(1,:),'-kx',EbNo,ber(2,:),'-ko',EbNo,ber(3,:),'-k *');legend('user=1','user=4','user=7','user=9')title('m序列DS-CDMA在Rayleigh信道下的性能')xlabel('信噪比EbNo(dB)')ylabel('误比特率(BER)')5、正交Gold序列在AWGN信道下的性能,代码:%正交Gold序列DS-CDMA在AWGN信道下的性能仿真clear alluser=[1 1 1];seq=3;for indx=1:length(user)ber(indx,:)=dscdma(user(indx),seq);endEbNo=0:2:10;semilogy(EbNo,ber(1,:),'-kx',EbNo,ber(2,:),'-ko',EbNo,ber(3,:),'-k *');legend('user=1','user=4','user=7')title('正交Gold序列DS-CDMA在Reyleigh信道下的性能')xlabel('信噪比EbNo(dB)')ylabel('误比特率(BER)')。

相关文档
最新文档