
课程论文
题 目: 基于Matlab
CDMA多址技术的仿真
****** **********************************
学生学号: **********
系 别: 电气信息工程学院
专 业: 电子信息工程
年 级 : 10级
***** **********
电气信息工程学院制
2013年4月
绪 论.....................................................3
第1章CDMA通信系统分析及仿真.................................4
1.1整体仿真框图............................................4
1.2信源....................................................5
1.3伪随机序列生成器........................................6
1.4扩频....................................................7
1.5编码和调制..............................................8
1.6接收端..................................................9
第2章仿真系统................................................10
2.1 信源 .................................................10
2.2 编码...................................................10
2.3 扩频....................................................11
2.4 调制与解调..............................................11
2.5 误码计算................................................11
第3章 实验结果与总结.........................................12
3.2 多用户在相同信道环境下的仿真............................12
参考文献.......................................................13
仿真结果.......................................................14
设计的代码.....................................................16
绪 论
利用MATLAB平台的SIMULINK可视化仿真功能,结合CDMA的实际通信情况,利用MATLAB组建出完整的CDMA通信系统,完成整体设计方案,实现完整的发送到接收的端到端的CDMA无线通信系统的建模、仿真和分析, 介绍了CDMA的主要环节(包括扩频技术、差错控制技术、调制技术、信道等)的参数设置。单用户在不同信道环境下,信道的噪声对结果影响很大,噪声功率越大,系统的误码率越大。多用户在相同信道环境下的仿真时,由于是采用了噪声功率为0.01W的信道传输环境,所以在单用户情况下误码率为0,而增加了用户数之后,误码率也随之增加。可见,信号在传输过程中,除了受到信道噪声的影响外,还存在多址接入干扰、单频干扰、窄带干扰、跟踪式干扰等,主要是多址接入干扰。
20世纪60年代以来,随着民用通信事业的发展,频带拥挤问题日益突出。CDMA(Code DivisionMultiple Access,码分多址)通信,在使用相同频率资源的情况下,理论上CDMA移动网比模拟网容量大20倍,实际使用中比模拟网大10倍,比GSM要大4~5倍,所以在通信领域中起着非常重要的作用。CDMA的基本原理是利用互相正交(或尽可能正交)的不同编码,分配给不同用户调制信号,实现多用户同时使用同一频率接入系统和网络的通信。由于利用互相正交(或尽可能正交)的编码去调制信号,会将原信号的频谱带宽扩展,因此,这种通信方式,又称为扩频通信。本论文所完成的CDMA通信仿真系统,是结合CDMA的实际通信情况,利用MATLAB组建出完整的CDMA通信系统,完成整体设计方案,实现完整的发送到接收的端到端的CDMA无线通信系统的建模、仿真和分析。
第1章 CDMA通信系统分析及仿真
1.1 整体仿真框图
本论文在CDMA通信原理的基础上,得出CDMA通信系统的仿真框图(图2-1)。
图1-1 CDMA通信系统的仿真框图
1.2 信源
二进制贝努利序列产生器产生一个二进制序列,并且这个二进制序列中的0和1服从贝努利分布。本文使用4个二进制贝努利信号发生器,以子系统形式封装于输入信号中。产生器的产生是由一个随机信号器与一个常数进行判决,输出的二进制再进行抽样整形,从而输出符合参数设置的而进驻。输入信号抽样的时间均为1,即码元宽度为1,选择产生一维向量。
1.3 伪随机序列生成器
扩频通信系统中,伪随机序列与正交编码是十分重要的技术。主要包括m序列,Gold序列,Walsh码序列等。Walsh码序列比较复杂,正交性较好,主要用于CDMA IS-95系统中。而Gold序列可以比m序列产生更多的地址吗,更适合于大型的通信系统。在本设计中,主要是对简单的CDMA系统进行仿真,所以选用m序列作为扩频序列,而且有4个用户。4个m序列分别的4级,5级,6级和7级,周期分别为15,31,63和127。扩频序列发生器的主要参数为生成多项式,试验采用的数值分别为:[1 1 0 0 1]、[1 1 0 0 0 1]、[1 1 0 0 0 0 1]、[1 0 1 0 1 0 1 1]。抽样时间设置为0.1,即码元宽度为0.1。
1.4 扩频
本文是采用直接序列扩频方式实现多址接入。在仿真中,将原信号与伪随机序列相乘,从而实现扩频。但由于输入信号和m序列都是单极性的二进制数,所以在进入乘法器进行扩频之前,还要对它们进行单/双变换,变成双极性信号。图2—2分别给出了原信号波形、扩频序列波形和扩频后的信号波形。本系统的扩频倍数为10
a.原信号波形
b.扩频序列波形
c. 扩频后的信号波形
图1—2 直接序列扩频方式
1.5 编码和调制
1.5.1 BCH编码
仿真框图如2—3所示。模型采用(7,4)BCH码,要求送入编码器的是维数为4的矢量,编码器的输出是维数为7的矢量,即为每个信息组添加了3位校验码元,由图2—4得知,只进行差错控制编码,而没有经过扩频的信号,在给定的高斯信道中传输,随着码源传输的时间增加,误码率会比较高。
图1—3 BCH码的仿真框图
图1—4 BCH码的误码率曲线
误码率计算公式 10×log10(power_signal/power_noise)
The AWGN Channel (高斯白噪声信道)模块可以在输入信号中加入实信号噪声或复合信号噪声。当输入信号是实信号时,此模块在输入信号中加入实高斯白噪声,并输出实信号。当输入信号是复合信号时,此模块在输入信号中加入复合的高斯白噪声,并输出符合信号。次模块从输入信号中得到抽样时间。
这个模块用DSP Blockset(数字信号处理)模块中的Random Source(随机信号源)模块来产生噪声。The Initial seed(初始种子)参数用来初始化信号发生器。The Initial seed(初始种子)即可以是标量也可以是矢量。这个标量或矢量的长度要与信道匹配。
1.5 M-PSK仿真
图2—5给出的是M=16时M-PSK的仿真框图,信号调制后的频谱和相位星座图分别如图2—6和图2—7所示。本文中4个调制器的相数M分别为16,32,32,40。由星座图可以得知,将每个输入信号都对应于一个点,点与点之间的相位差为360°/16=22.5°。1.5信道信道中的噪声直接影响着信号的传输质量。根据信道中噪声的特点,可将信道划分为:加性高斯白噪声信道(Additive White Guassion Noise,AWGN)、二进制对称信道、多径瑞利衰落信道和伦琴衰落信道等,我们在仿真中采用的是AWGN信道。图2—8中的正弦波功率设置为1 W,曲线表明,当SNR是-20 dB时,噪声功率是100 W;SNR是20 dB时,噪声功率是0.01 W。可见,为了得到比较优的性能,应合理设置输入信噪比。
图1—5 M—PSK仿真模型图
图1—6 M—PSK信号频谱图
图1—7 M—PSK信号星座图
图1—8 SNR与噪声功率的关系
1.6. 接收端
M-PSK解调器的参数设置与M-PSK调制器相同,译码器的参数设置与编码器相对应。解扩过程要求使用的伪随机码与发送端扩频用的伪随机码不仅码字相同,而且相位相同。多用户情况下,由于信号互相叠加,所以解扩后的信号不再是二进制信号,因为存在多用户干扰,所以在进入接收端进行误码统计之前,必须经过滤波和判决。为了减少噪声影响,在解扩之后加入低通滤波器。根据发送信号的频谱,该滤波器的分子系数和分母系数分别设置为[0.0004 0.0017 0.0025 0.0017 0.0004]和[1.0000-3.1811 3.8623-2.1130 0.4385],初始条件为0。滤波器幅频、相频特性曲线如图2—9所示。发送信号与接收机恢复出的信号同时送入误码仪(Error-rate meter)模块进行比较,误码仪可计算和显示误码率和误比特率。
图1—9滤波器特性
第2章 仿真系统
本系统主要包括信号源输入、扩频序列发生器、扩频解扩、编码译码、调制解调、信道、接收判决、误码计算等。为了简化模型,使用了子系统将其中的一些模块进行了封装。设计中,使用了递加的方法,可以实现多个不同用户按不同情况接入,图3—1为整体仿真框图。
图3—1 整体仿真框图
2.1 信源
本文使用4个二进制贝努利信号发生器,以子系统形式封装于输入信号中。产生器的产生是由一个随机信号器与一个常数进行判决,输出的二进制再进行抽样整形,从而输出符合参数设置的而进驻。输入信号抽样的时间均为1,即码元宽度为1,选择产生一维向量。
2.2 编码
编码主要包括m序列,Gold序列,Walsh码序列等。Walsh码序列比较复杂,正交性较好,主要用于CDMA IS-95系统中。而Gold序列可以比m序列产生更多的地址吗,更适合于大型的通信系统。在本设计中,主要是对简单的CDMA系统进行仿真,所以选用m序列作试验采用的数值分别为:[1 1 0 0 1]、[1 1 0 0 0 1]、[1 1 0 0 0 0 1]、[1 0 1 0 1 0 1 1]。抽样时间设置为0.1,即码元宽度为0.1。
2.3 扩频
本文是采用直接序列扩频方式实现多址接入。在仿真中,将原信号与伪随机序列相乘,从而实现扩频。但由于输入信号和m序列都是单极性的二进制数,所以在进入乘法器进行扩频之前,还要对它们进行单/双变换,变成双极性信号。图2—2分别给出了原信号波形、扩频序列波形和扩频后的信号波形。本系统的扩频倍数为10。
2.4 调制与解调
本文采用M—PLK调制与解调。
2.5 误码计算
滤波器幅频、相频特性曲线如图2—9所示。发送信号与接收机恢复出的信号同时送入误码仪(Error-rate meter)模块进行比较,误码仪可计算和显示误码率和误比特率。
第3章 实验结果与总结
3.1 单用户在不同信道环境下的仿真
由表1可以分析出,在信道传输过程中,信道的噪声对结果影响很大,在噪声功率为100W的情下,误码率偏高。降低噪声功率后,误码率也明显减小。可见,在单用户情况下,CDMA通信系统的码率主要取决于信道中的噪声。
3.2 多用户在相同信道环境下的仿真
仿真条件:用户数从1到4,由于本系统采用了递加的方法,所以可以在同一个系统中观察到从1个用户一直到4个用户的四种不同情况下的仿真。由表2的仿真结果可以看出,由于是采用了噪声功率为0.01W的信道传输环境,所以在单用户情况下误码率为0,而增加了用户数之后,误码率也随之增加。可见,信号在传输过程中,除了受到信道噪声的影响外,还存在多址接入干扰、单频干扰、窄带干扰、跟踪式干扰等,主要是多址接入干扰。
表3—1 单用户在不同信道环境下的仿真
| 用户数 | 传送信息量/bit | 误码数 | 噪声功率/W | 抗干扰方式 | 误码率 |
| 1 | 1000 | 444 | 100 | 直扩 | 0.444 |
| 1 | 1000 | 345 | 10 | 直扩 | 0.345 |
| 1 | 1000 | 161 | 1 | 直扩 | 0.161 |
| 1 | 1000 | 23 | 0.1 | 直扩 | 0.023 |
| 1 | 1000 | 0 | 0.01 | 直扩 | 0 |
| 用户数 | 传送信息量/bit | 误码数 | 噪声功率/W | 抗干扰方式 | 误码率 |
| 1 | 1000 | 0 | 0.01 | 直扩 | 0 |
| 1 | 1000 | 183 | 0.01 | 直扩 | 0.183 |
| 1 | 1000 | 176 | 0.01 | 直扩 | 0.176 |
| 1 | 1000 | 223 | 0.01 | 直扩 | 0.223 |
[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 < 4
num = 1;
end
mout = zeros(num,2^n-1);
fpos = zeros(n,1);
fpos(taps) = 1;
for ii=1:2^n-1
mout(1,ii) = inidata(n); % 寄存器的输出值
temp = mod(inidata*fpos,2); % 计算反馈数据
inidata(2:n) = inidata(1:n-1); % 寄存器移位一次
inidata(1) = temp; % 更新第1个寄存器的值
end
if num > 1 %如果要输出多个m序列,生成其他m
if shiftr > 0
outregi(:,1:shiftr) = inregi(:,v-shiftr+1:v); %循环移位
outregi(:,1+shiftr:v) = inregi(:,1:v-shiftr);
elseif shiftr < 0
outregi(:,1:v+shiftr) = inregi(:,1-shiftr:v);
outregi(:,v+shiftr+1:v) = inregi(:,1:-shiftr);
end
**
2、Gold序列:
function [gout] = goldseq(m1, m2, num)
% ****************************************************************
% m1 : m序列1
% m2 : m序列2
% num : 生成的Gold序列个数
% gout : 生成的Gold序列输出
% ****************************************************************
if nargin < 3 %如果没有指定生成的Gold序列个数,默认为1
num = 1;
end
gout = 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 seq
case 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)];
end
code = 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.');
else
out1=out1.';
end
sigma = sqrt(0.5 * spow * sr / br * 10^(-EbNo(indx)/10));
% 根据信噪比计算高斯白噪声方差
y=[];
for ii=1:user
y(ii,:)=out1+sigma(ii).*(randn(1,length(out1))+j*randn(1,length(out1))); % 加入高斯白噪声(AWGN)
end
y=rcosflt(y.',sr,Fs*sr,'Fs/filter',rrcfilter);
% 通过脉冲成形滤波器进行滤波
y=downsample(y,Fs); % 降采样
for ii=1:user
y1(:,ii)=y(2*delay+1:end-2*delay,ii);
end
yd = 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)
switch nargin
case { 0 , 1 } %如果输入参数个数不对,提示错误
error('缺少输入参数');
end
[hn,vn] = size(data);
[hc,vc] = size(code);
if hn > hc %如果扩频码数小于输入的待扩频的数据序列,提示错误
error('缺少扩频码序列');
end
out = zeros(hn,vn*vc);
for ii=1:hn
out(ii,:) = reshape(code(ii,:).'*data(ii,:),1,vn*vc);
end
解扩函数despread的代码:
%信号解扩
function out = despread(data, code)
switch nargin %如果输入参数个数不对,提示错误
case { 0 , 1 }
error('缺少输入参数');
end
[hn,vn] = size(data);
[hc,vc] = size(code);
out = zeros(hc,vn/vc);
for ii=1:hc
xx=reshape(data(ii,:),vc,vn/vc);
out(ii,:)= code(ii,:)*xx/vc;
end
4、M序列DS-CDMA在AWGN下的性能,代码:
%m-序列DS-CDMA在AWGN信道下的性能仿真
clear all
user=[1 4 7 ];
seq=1;
for index=1:length(user)
ber(index,:)=dscdma(user(index),seq);
end
EbNo=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 all
user=[1 1 1];
seq=3;
for indx=1:length(user)
ber(indx,:)=dscdma(user(indx),seq);
end
EbNo=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)')
