直接序列扩频通信.docx
- 文档编号:24796043
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:17
- 大小:72.64KB
直接序列扩频通信.docx
《直接序列扩频通信.docx》由会员分享,可在线阅读,更多相关《直接序列扩频通信.docx(17页珍藏版)》请在冰豆网上搜索。
直接序列扩频通信
MATLAB仿真直接序列扩频通信
1.摘要
直接序列扩频通信系统(DS-CDMA)因其抗干扰性强、 隐蔽性好、易于实现码分多址(CDMA)、抗多径干扰、直扩通信速率高等众多优点,而被广泛应用于许多领域中。
针对频通信广泛的应用,本文用MATLAB工具箱中的SIMULINK通信仿真模块和MATLAB函数对直接序列扩频通信系统进行了分析和仿真,使其更加形象和具体。
关键字:
扩频通信m序列gold正交序列matlab仿真
2.引言
直接序列扩频(DSSS—DirectSequenceSpreadSpectrum)技术是当今人们所熟知的扩频技术之一。
这种技术是将要发送的信息用伪随机码(PN码)扩展到一个很宽的频带上去,在接收端,用与发端扩展用的相同的伪随机码对接收到的扩频信号进行相关处理,恢复出发送的信息。
它是二战期间开发的,最初的用途是为军事通信提供安全保障,是美军重要的无线保密通信技术。
这种技术使敌人很难探测到信号。
即便探测到信号,如果不知道正确的编码,也不可能将噪声信号重新汇编成原始的信号。
有关扩频通信技术的观点是在1941年由好莱坞女演员HedyLamarr和钢琴家GeorgeAntheil提出的。
基于对鱼雷控制的安全无线通信的思路,他们申请了美国专利#2.292.387。
不幸的是,当时该技术并没有引起美国军方的重视,直到十九世纪八十年代才引起关注,将它用于敌对环境中的无线通信系统。
直序扩频解决了短距离数据收发信机、如:
卫星定位系统(GPS)、3G移动通信系统、WLAN(IEEE802.11a,IEEE802.11b,IEE802.11g)和蓝牙技术等应用的关键问题。
扩频技术也为提高无线电频率的利用率(无线电频谱是有限的因此也是一种昂贵的资源)提供帮助。
3.直接序列扩频DS-SS是直接用具有高码率的扩频码序列在发送端去扩展信号的频谱。
而在收端,用相同的扩频码序列去进行解扩,把展宽的扩频信号还原成原始的信息。
4.DS-CDMA通信系统原理图
在实验中,我们采用;两种扩频码进行仿真。
M序列和正交Gold序列,扩频后的数据通过脉冲成型滤波器后通过信道同时到达接收端,在接收端分别对不同用户信息数据进行解扩,恢复各个用户的原始信息。
5.仿真设计步骤
1、m序列的DS-CDMA在AWGN下的性能的仿真。
2、正交Gold序列的DS-CDMA在AWGN下的性能的仿真。
3、对比两个扩频码在AWGN信道下的性能曲线,分析哪种扩频码更适合在AWGN信道中传输,传输衰减最小,对比m序列和正交Gold序列的抗干扰能力。
6.实验仿真运行结果
从图中可以看出,由于正交Gold序列在完全同步时,它们的互相关值为0,因此其BER性能并不随着用户数的增加而恶化。
在信噪比为2、4、6时误比特率基本相同。
由图可以看出来当误比特率仿真时候小于10-3时结果就会有一定的偏差。
但还是可以看出正交Gold序列比M序列的性能要好。
所以,初步得出结论:
正交Gold序列在AWGN信道下的抗干扰能力更强,衰减比,序列要小。
对比图4-1和图4-3,显然M序列在瑞利衰落信道下的性能要比能过AWGN信道下的性能要差
7.总结
对于本仿真而言,已基本完成了设计任务书的设计和研究目的,通过用MATLAB对DS-CDMA系统的仿真调试、结果分析,让我组熟悉了DS-CDMA的工作原理,加深了对扩频通信的认识,并深刻的了解PN码在不同信道的衰落情况。
通过仿真结果中波形的直观方式,更让我们了解到了系统衰减的规律。
但是在本设计中也存在着缺陷与不足
1、在本设计中过程中可能由于程序过于复杂,信息本身所占用的带宽偏大,用来传输信息的带宽相对不够大,造成结果并不明显,信息衰减严重。
2、在设计中只考虑到加性高斯信道所带来的干扰,在实际通信信道却是复杂多变,存在着各种各样的情况,所以最后的接收信号是在很简单的干扰下得出。
要想应用于实际中,必须加入各种噪声来考虑,以实现真实系统的设计。
3、实验中,我们选择加大传输带宽,来弥补其他干扰带来的影响,可能会造成消耗过大,浪费带宽的结果,实际应用中是不实用的。
只能作为仿真,进行研究。
即使如此,在本次设计的整个过程中,以上的结果已经令我们受益匪浅。
通信系统的性能分析和仿真,随着通信技术、信息技术和计算机技术的发展以及网络系统的大量应用,显得越来越重要。
参考文献
[1]刘学勇,编著.通信系统建模与仿真(电子工业出版社)
[2]邓薇,编著.MATALB函数速查手册(人民邮电出版社)
[3]【美】WilliamC.Y.Lee,著.移动通信工程理论和应用(第二版)(人民邮电出版社)
[4]王华奎,李艳萍等编著.移动通信原理与技术(清华大学出版社)
程序
%1.函数mseq用于产生m序列:
function[mout]=mseq(n,taps,inidata,num)
%****************************************************************
%说明:
函数mseq用于产生num个阶数为n的m序列
%n:
m序列的阶数n
%taps:
反馈寄存器的连接位置
%inidata:
寄存器的初始值序列
%num:
输出的m序列的个数
%mout:
输出的m序列,如果num>1,则每一行为一个m序列
%****************************************************************
ifnargin<4%输入参数判断
num=1;
end
mout=zeros(num,2^n-1);%寄存器输出值的初始化,全0
fpos=zeros(n,1);%反馈寄存器连接位置的初始化
fpos(taps)=1;%反馈寄存器连接位置
forii=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
ifnum>1%如果要输出多个m序列,生成其他m序列
forii=2:
num
mout(ii,:
)=shift(mout(ii-1,:
),1);%shift函数完成序列的循环移位,上一个序列向右循环移位
end
end
%2.函数goldseq用于产生gold序列
function[gout]=goldseq(m1,m2,num)
%****************************************************************
%m1:
m序列1
%m2:
m序列2
%num:
生成的Gold序列个数
%gout:
生成的Gold序列输出
%****************************************************************
ifnargin<3%如果没有指定生成的Gold序列个数,默认为1
num=1;
end
gout=zeros(num,length(m1));
forii=1:
num%根据Gold序列生成方法生成Gold序列
gout(ii,:
)=xor(m1,m2);
m2=shift(m2,1);
end
%函数shift用于完成循环移位
function[outregi]=shift(inregi,shiftr)
%****************************************************************
%inregi:
输入序列
%shiftr:
循环右移的位数
%outregi:
输出序列
%****************************************************************
v=length(inregi);%输入序列的长度
outregi=inregi;%输出序列初始化为输入序列
shiftr=rem(shiftr,v);%求余,使移位的值在[0,v]之间
ifshiftr>0
outregi(:
1:
shiftr)=inregi(:
v-shiftr+1:
v);%循环移位把最后shiftr位移到前shiftr位
outregi(:
1+shiftr:
v)=inregi(:
1:
v-shiftr);%完成剩余的移位
elseifshiftr<0
outregi(:
1:
v+shiftr)=inregi(:
1-shiftr:
v);
outregi(:
v+shiftr+1:
v)=inregi(:
1:
-shiftr);
end
%3.直接序列扩频主程序代码
function[ber]=dscdma(user,seq)
%user:
同时进行扩频通信的用户数
%seq:
扩频码1:
M-序列2:
Gold序列3:
正交Gold序列
%ber:
该用户数下的误码率
%****************************初始化部分*****************************
sr=256000.0;%符号速率
nSymbol=10000;%每种信噪比下发送的符号数
M=4;%4-QAM调制
br=sr*log2(M);%比特速率
graycode=[0132];%Gray编码规则
EbNo=0:
2:
10;%Eb/No变化范围
%**************************脉冲成形滤波器参数**************************
delay=10;%升余弦滤波器时延
Fs=8;%滤波器过采样数
rolloff=0.5;%升余弦滤波器滚降因子
rrcfilter=rcosine(1,Fs,'fir/sqrt',rolloff,delay);%设计根升余弦滤波器
%**********************扩频码产生参数**********************
%直接序列扩频主程序代码
function[ber]=dscdma(user,seq)
%user:
同时进行扩频通信的用户数
%seq:
扩频码1:
M-序列2:
Gold序列3:
正交Gold序列
%ber:
该用户数下的误码率
%****************************初始化部分*****************************
sr=256000.0;%符号速率
nSymbol=10000;%每种信噪比下发送的符号数
M=4;%4-QAM调制
br=sr*log2(M);%比特速率
graycode=[0132];%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=[13];%m序列1的寄存器连接方式
ptap2=[23];%m序列2的寄存器连接方式
regi1=[111];%m序列1的寄存器初始值
regi2=[111];%m序列2的寄存器初始值
%********************扩频码的生成*********************
switchseq
case1%M-序列
code=mseq(stage,ptap1,regi1,user);
case2%Gold序列
m1=mseq(stage,ptap1,regi1);
m2=mseq(stage,ptap2,regi2);
code=goldseq(m1,m2,user);
case3%正交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);
%****************************仿真开始****************************
forindx=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;%计算每个用户信号功率
ifuser>1%用户数大于1时,所有用户数据相加
out1=sum(out1.');
else
out1=out1.';
end
%*****************************通过瑞利衰落信道******************************
%out1=h.*out1;
%********************************接收端*********************************
sigma=sqrt(0.5*spow*sr/br*10^(-EbNo(indx)/10));%根据信噪比计算高斯白噪声方差
y=[];
forii=1:
user
y(ii,:
)=out1+sigma(ii).*(randn(1,length(out1))+j*randn(1,length(out1)));%加入高斯白噪声(AWGN)
%y(ii,:
)=y(ii,:
)./h;%假设理想信道估计
end
y=rcosflt(y.',sr,Fs*sr,'Fs/filter',rrcfilter);%通过脉冲成形滤波器进行滤波
y=downsample(y,Fs);%降采样
forii=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
%扩频函数
function[out]=spread(data,code)
%****************************************************************
%说明:
函数spread用于将输入数据序列和扩频序列扩频
%data:
输入数据序列
%code:
扩频码序列
%out:
扩频后的输出数据序列
%****************************************************************
switchnargin
case{0,1}%如果输入参数个数不对,提示错误
error('缺少输入参数');
end
[hn,vn]=size(data);
[hc,vc]=size(code);
ifhn>hc%如果扩频码数小于输入的待扩频的数据序列,提示错误
error('缺少扩频码序列');
end
out=zeros(hn,vn*vc);%初始化输出序列
forii=1:
hn
out(ii,:
)=reshape(code(ii,:
).'*data(ii,:
),1,vn*vc);%将扩频后的数据排成行矢量的形式
end
%信号解扩
functionout=despread(data,code)
%****************************************************************
%说明:
函数despread用于将输入数据序列和扩频序列解扩
%data:
输入数据序列
%code:
解扩使用的扩频码序列
%out:
解扩后的输出数据序列
%****************************************************************
switchnargin%如果输入参数个数不对,提示错误
case{0,1}
error('缺少输入参数');
end
[hn,vn]=size(data);
[hc,vc]=size(code);
out=zeros(hc,vn/vc);%初始化输出序列
forii=1:
hc
xx=reshape(data(ii,:
),vc,vn/vc);
out(ii,:
)=code(ii,:
)*xx/vc;
end
%函数rayleigh用于产生瑞利衰落信道
function[h]=rayleigh(fd,t)
%该程序利用改进的jakes模型来产生单径的平坦型瑞利衰落信道
%YahongR.ZhengandChengshanXiao"ImprovedModelsfor
%theGenerationofMultipleUncorrelatedRayleighFadingWaveforms"
%IEEECommuletters,Vol.6,NO.6,JUNE2002
%输入变量说明:
%fd:
信道的最大多普勒频移单位Hz
%t:
信号的抽样时间序列,抽样间隔单位s
%h为输出的瑞利信道函数,是一个时间函数复序列
%假设的入射波数目
N=40;
wm=2*pi*fd;
%每象限的入射波数目即振荡器数目
N0=N/4;
%信道函数的实部
Tc=zeros(1,length(t));
%信道函数的虚部
Ts=zeros(1,length(t));
%归一化功率系数
P_nor=sqrt(1/N0);
%区别个条路径的均匀分布随机相位
theta=2*pi*rand(1,1)-pi;
forii=1:
N0
%第i条入射波的入射角
alfa(ii)=(2*pi*ii-pi+theta)/N;
%对每个子载波而言在(-pi,pi)之间均匀分布的随机相位
fi_tc=2*pi*rand(1,1)-pi;
fi_ts=2*pi*rand(1,1)-pi;
%计算冲激响应函数
Tc=Tc+cos(cos(alfa(ii))*wm*t+fi_tc);
Ts=Ts+cos(sin(alfa(ii))*wm*t+fi_ts);
end;
%乘归一化功率系数得到传输函数
h=P_nor*(Tc+j*Ts);
%4.主程序
%m-序列DS-CDMA在AWGN信道下的性能仿真
clearall
user=[147];
seq=1;
forindex=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')
title('m序列DS-CDMA在AWGN信道下的性能')
xlabel('信噪比EbNo(dB)')
ylabel('误比特率(BER)')
%5、正交Gold序列在AWGN信道下的性能
%正交Gold序列DS-CDMA在AWGN信道下的性能仿真
clearall
user=[111];
seq=3;
forindx=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)')
学校 电子科技大学
学院 通信与信息学院
班级 通信专业十一班
候号前 2010013110001
龚睦 2010013110003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直接 序列 通信