1.算法概述
CDMA技术的基础是扩频通信。扩频:用来传输信息的信号带宽远远大于信息本身带宽的一种传输方式,频带的扩展由独立于信息的扩频码来实现,与所传信息数据无关,在接收端用同步接收实现解扩和数据恢复。如图2-1,我们可以知道CDMA系统的基本原理和TDMA、FDMA的区别。 在高斯信道中当传输系统的信号噪声功率比S/N下降时,可用增加系统传输带宽W的办法来保持信道容量C不变。对于任意给定的信号噪声功率比,可以用增大传输带宽来获得较低的信息差错率。正因为这个原因,扩频通信具有比较强的抗噪声干扰的能力。CDMA技术是以扩频通信为基础的载波调制和多址接入技术,所以如何实现扩频部分对于整个CDMA系统的实现有着重要的影响。
信号经信源编码后成为数字信号,经过纠错编码、卷积编码和交织等相关处理后送入调制器中,利用PN码发生器产生的高速PN码将数字信号变成码片,使得信号的传输带宽远大于信号本身的带宽以实现扩频通信,同时,为了使信号的传输与信道特性相匹配,必须用载波发生器产生的载波去调制扩频信号。使其频率变为适合信道传愉的射频频段,将数字信号调制成模拟信号后通过放大器发射出去。在接收端,利用下变频器将射频信号还原成中频信号,采用与发射端相同的信号处理技术再将信号还原成原始信号,从而达到数据通信传输的目的。
针对本课题所要求的CDMA发送端的设计,主要从以下几个方面去研究,数据处理模块、差分编码模块、PN码序列产生模块、扩频模块。其中数据处理模块主要是用来完成数据的串/并变换;差分编码模块主要用于对数据先进行差分编码;PN码序列产生模块是扩频通信模块中比较重要的模块,其具体的作用和功能我们将在具体实践中做具体研究和讨论;扩频模块是发射端的核心模块,主要用于完成数据的扩频。图2-3就是CDMA系统模块化以后的基本结构,其中虚线框内的部分就是CDMA数字基带发送部分,本课题我们主要就是完成下图中上半部分,此外,在此基础上将对接收部分做简单的介绍。图中发送端和接收端的Walsh码发生器和PN码发生器其实是同一个模块,它们的区别仅仅是延迟不同。
2.仿真效果预览
3.MATLAB程序
.............................................................
%串----并 for i=1:31 for j=1:16 pn_walsh_user_rec(i,j)=pn_walsh_user_c(i*j); end end %pn解扩 for i=1:31 for j=1:16 walsh_user_rec(i,j)=pn_walsh_user_rec(i,j)*pn(i); end end
for i=1:31 for j=1:16 walsh_user_rec2(j)=walsh_user_rec(i,j); end end
%walsh解扩 user_rec2(1,1)=walsh_user_rec2(1); user_rec2(1,2)=walsh_user_rec2(2); user_rec2(1,3)=walsh_user_rec2(3); user_rec2(1,4)=walsh_user_rec2(4);
user_rec2(2,1)=walsh_user_rec2(5);
user_rec2(2,2)=walsh_user_rec2(6);
user_rec2(2,3)=walsh_user_rec2(7);
user_rec2(2,4)=walsh_user_rec2(8);
user_rec2(3,1)=walsh_user_rec2(9);
user_rec2(3,2)=walsh_user_rec2(10);
user_rec2(3,3)=walsh_user_rec2(11);
user_rec2(3,4)=walsh_user_rec2(12);
user_rec2(4,1)=walsh_user_rec2(13);
user_rec2(4,2)=walsh_user_rec2(14);
user_rec2(4,3)=walsh_user_rec2(15);
user_rec2(4,4)=walsh_user_rec2(16);
for i=1:4
for j=1:4
rec(i,j)= user_rec2(i,j)*walsh(i,j);
end
end
%===============接收信号===================================
rec_signal= user_rec2(1,1:4);
%========画信号==============================================================
if t==1
figure;
subplot(511)
stairs(1:4,user,'r');%用户信号
axis([1,4,-2,2]);
title('用户发送的信号')
subplot(512)%随机码
stairs(1:31,pn);
axis([1,31,-2,2]);
title('随机码')
subplot(513)%调制WALSH
stairs(1:16,walsh_user2,'r');
axis([1,16,-2,2]);
title('调制WALSH')
subplot(514) %发送
stairs(1:496,pn_walsh_user_c);
axis([1,496,-2,2]);
title('发送信号')
subplot(515) %数据接收
stairs(1:4,rec_signal,'r');
axis([1,4,-2,2]);
title('数据接收信号')
hold on;
end end
figure; subplot(411); stairs(1:32,user0); axis([1,32,-2,2]);title('user0数据接收信号')
subplot(412); stairs(1:32,user1); axis([1,32,-2,2]);title('user1数据接收信号')
subplot(413); stairs(1:32,user2); axis([1,32,-2,2]);title('user2数据接收信号')
subplot(414); stairs(1:32,user3); axis([1,32,-2,2]);title('user3数据接收信号')
%% %=====================以上是加上噪声的 误码率测试================================================= prompt={'请输入用户个数:','请输入用户发送信息个数:','请输入用户码功率','请输入噪声功率','请输入要测试的用户ID号'}; name=['码分多址复用技术测试']; line=1;
defaultanswer={'4','100','1 2 3 4', '10','1'};
glabel=inputdlg(prompt,name,line,defaultanswer);%对话框 num1=str2num(char(glabel(1,1))); %对话框 num2=str2num(char(glabel(2,1))); %对话框 num3=str2num(char(glabel(3,1))); %对话框 num4=str2num(char(glabel(4,1))); %对话框 k=str2num(char(glabel(5,1))); %对话框
UserNumber=num1;%用户数 inflength=num2;%用户信息序列长度 a=num3; %用户信息功率 Pn=num4; %噪声功率 sigma=1;%噪声标准差
%========================================================================== N=31;%伪随即序列的阶数 R=(ones(UserNumber)+(N-1)eye(UserNumber))/N; %相关系数矩阵 b=2round(rand(UserNumber,inflength))-1; %用户信息矩阵(随机+1,-1矩阵) coefficients=[1 0 1 0 0]; %5级左移m序列码发生器的反馈系数 mseq=mseries(coefficients); %生成31×31的m序列码矩阵 mseq=mseq(1:UserNumber,1:N); %==================以上生成随即序列======================================== ............................................. 01_001_m