通信系统原理综合性、设计性实验报告
基于MATLAB的CDMA系
统仿真
学 院:物理与电信工程学院 年 级: 指导老师:
时 间:2014年6月
一、实验目的
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,本次实验利用MATLAB平台功能,并结合CDMA的实际通信情况,利用MATLAB组建出完整的CDMA通信系统,完成整体设计方案,实现完整的发送到接收的端到端的CDMA无线通信系统的建模、仿真和分析。
关键字: MATLAB CDMA 仿真
二、实验原理 2.1 CDMA的基本原理
CDMA是指在各发送端使用不相同、相互(准)正交的地址码调制所传送的信息,而在接收端在利用码型的(准)正交性,通过相关检测,从混合信号中选出相应的信号的一种技术。实现CDMA的理论基础是扩频通信,即在发送端将待发送的数据用伪随机码进行调制,实现频谱扩展,然后进行传输,而在接收端则采用同样的编码进行解扩及相关处理,恢复原始的数据信息。扩频通信有直接序列(DS)、跳频(FH)、线性调频(chrip)、跳时(TH)等方式。采用扩频通信的优点很多,如抗干扰、抗噪声、抗多径衰落的能力强,能在低功率谱密度下工作,保密性好、可多址复用和任意选址及进行高度测量等等。
2.2 CDMA的系统框图
信源 交织编码 卷积编码 扩频 DPSK调制 加性高斯噪声信道
信宿 解交织 解卷积 解扩 DPSK解调 2.3 交织编码的原理
交织编码的目的是把一个较长的突发差错离散成随机差错,再用纠正随机差错的编码(FEC)技术消除随机差错。交织深度越大,则离散度越大,抗突发差错能力也就越强。但交织深度越大,交织编码处理时间越长,从而造成数据传输时延增大,也就是说,交织编码是以时间为代价的。因此,交织编码属于时间隐分集。在实际移动通信环境下的衰落,将造成数字信号传输的突发性差错。利用交织编码技术可离散并纠正这种突发性差错,改善移动通信的传输特性。
2.4 卷积编码的原理
卷积码编码的当前输出v(l)不仅与当前输入消息u(l)相关,还与此去前输入的m个消息u(l-1),…,u(l-m)相关,即 v(l)=f(u(l),u(l-1),…,u(l-m)), l=0,1,2…
卷积编码电路中移位寄存器初态可设定为全0,电路为按段工作方式,即对每段k比特输出入,产生一段n比特输出。任意一输入段u(l-h)与输出v(l)的关系都是一个特殊的(n,k)线性分组码的编码关系,即存在k v(l)=u(l-h)
Gh, h=0,1,2,…,m
n的二元矩阵Gh,使得
因此对于消息段序列u=(u(0),u(1),…,u(m),u(m+1),…),相应的输出端序列为v=(v(0),v(1),…,v(m),v(m+1),…),并满足v(0)=u(0)G0
卷积编码电路在按段工作方式下只需存储或者记忆m段的消息输入,电路中输入移位寄存器最多只有km
串转换作用。因此称参量m为卷积码的记忆长度,下图为原理图
2.5 扩频通信的原理
扩频通信技术是一种信息传输方式,其信号所占有的频带宽度远大于所传信息所需的最小带宽;频带的扩展是通过一个的码序列来完成,用编码及调制的方法来实现的,与所传信息数据无关;在接收端则用同样的码进行相关同步接受、解扩及恢复所传信息数据。 扩频通信理论基础
香农公式 :C=Wlog2(1+S/N)
1、在给定的传输速率C不变的条件下,频带宽度W和信噪比S/N是可以互换的。即可通过增加频带宽度的方法,在较低的信噪比情况下,传输信息。 2、扩展频谱换取信噪比要求的降低,正是扩频通信的重要特点,并由此为扩频通信的应用奠定了基础。
2.6 DPSK调制解调的原理
DPSK,即差分移相键控,是数字调制方式的一种。
差分移相键控(DPSK):Differential Phase Shift Keying 利用调制信号前后码元之间载波相对相位的变化来传递信息。
用于光传输系统中对DPSK调制信号的接收解调。DPSK是一个1 Bit延迟器,输入一个信号,可以得到两路相差一个比特的信号,形成信号对DPSK信号进行相位解调,实现相位到强度的转化。
三、MATLAB仿真实现 3.1 交织编码
3.2 卷积编码与解卷积
(2,1,3)卷积编码
function output = convolutionX( X )
%UNTITLED Summary of this function goes here % Detailed explanation goes here
n=length(X); %取得输入序列的长度
%%%%%%%%%%%%%%%%%%%%%画出输入波形%%%%%%%%%%%%% n1=0.01:0.01:n; for(i=1:n)
is((i-1)*100+1:i*100)=X(i); end figure
subplot(2,1,1) plot(n1,is);
axis([0,n+1,-0.1,1.1]); title('原始信号') grid
Y=[0 0 0]; %寄存器初始值置为全0
for(i=1:n) %进行序列移位,得到卷积的序列 Y(1)=Y(2); Y(2)=Y(3); Y(3)=X(i);
Y;
output(2*(i-1)+1)=mod(sum(Y),2); %三个寄存器模二相加
output(2*(i-1)+2)=mod((Y(1)+Y(3)),2);%第一、三寄存器模二相加 end
output;
%%%%%%%%%%%%%%%%%%%%%%画出卷积波形%%%%%%%%%%%%%%%%%%% a=length(output); a;
t=0.01:0.01:a; for(i=1:a)
st(((i-1)*100+1):i*100)=output(i); end st;
subplot(2,1,2) plot(t,st);
axis([0,a+1,-0.1,1.1]); title('卷积波形') grid end
解卷积函数:维特比解码
function Z = deconvolution(X)
%UNTITLED Summary of this function goes here % Detailed explanation goes here n=length(X); Z=zeros(1,n);
a=n/2; %解卷积输出序列长度
M=zeros(2^a,a);%初始化存放解卷积的可能序列矩阵 Y=zeros(2^a,n);%初始化维特比对比的可能序列矩阵 %%%%%%%%%%%%%%产生所有的可能序列%%%%%%%%%%5 for(i=1:2^a)
M(i,:)=de2bi(i-1,a);%把十进制转化为二进制 Y(i,:)=encoding(M(i,:));%进行卷积编码
m(i)=distance(Y(i,:),X); %取得每个序列对比的汉明距 end
b=min(m); %%%%%%%%%取得汉明距最小的值 b;
%%%%%%%根据得到的最小汉明距进行译码%%%%%%%%% for(i=1:2^a) if(b==m(i))
Z=de2bi(i-1,a); end end
%%%%%%%%%%%画出译码的波形%%%%%%%%%%%%%%% t=0.01:0.01:a;
st=zeros(1,100*a); for(i=1:a)
st(((i-1)*100+1):i*100)=Z(i); end Z;
figure
%subplot(2,1,2) plot(t,st);
axis([0,a+1,-0.1,1.1]); title('解卷积波形') grid end
3.3 M序列的产生
function mseq=
m_sequence(fbconnection,register) %fbconnectionΪ·´À¡ÏµÊý£¬registerΪ³õʼ״̬
n = length(fbconnection);
N = 2^n-1; %mÐòÁеij¤¶È
mseq(1)= register(n); %mÐòÁеĵÚÒ»¸öÊä³öÂëÔª for i = 2:N
newregister(1)= mod(sum(fbconnection.*register),2); %¼Ä´æÆ÷Óë·´À¡µÄÄ£2ºÍ for j = 2:n
newregister(j)= register(j-1); end;
register = newregister; %ÒÆÎ»ºóµÄ¼Ä´æÆ÷ mseq(i) = register(n); %еļĴæÆ÷Êä³ö end
3.4 DPSK调制与解调
function z=dpsk(X)
%UNTITLED2 Summary of this function goes here % Detailed explanation goes here fs=200; %取样频率
w=25; %载波角频率 n=length(X); %获取序列的长度 t=1:100; nn=1:100; n1=0.01:0.01:n;
%os=zeros(1,100);
for(i=1:n)
is((i-1)*100+1:i*100)=X(i); %将每个信息码元用100个点表示,存储到is数组,提高精度。
st((i-1)*100+1:i*100)=0; %定义调制后的信息码存放的数组st,并初始化。 end
for(nn=1:100) %定义两个角频率相同,相位相反的正玄波 oss(nn)=sin(2*pi*w*(t(nn )/100)); osc(nn)=sin(2*pi*w*(t(nn)/100)+pi); end %figure
%subplot(2,1,1) %plot(t/100,oss);
%axis([0,n+1,-1.1,1.1]); %title('信号波形1') %grid
%subplot(2,1,2) %plot(t/100,osc);
%axis([0,n+1,-1.1,1.1]); %title('信号波形2') %grid
for(i=1:n) %调制
if(X(i)==1)
for(nn=1:100)
st(100*(i-1)+nn)=oss(nn); %码元为1的点用oss填充 end else
for(nn=1:100)
st(100*(i-1)+nn)=osc(nn); %码元为0的点用osc填充 end
end end st; figure
subplot(2,1,1) plot(n1,is);
axis([0,n+1,-0.1,1.1]); title('原始信号') grid
subplot(2,1,2) plot(n1,st);
axis([0,n+1,-1.1,1.1]); title('调制信号') grid
%%%%%%%%%%%%%%%%%%%%%高斯白噪声信道 tt=0.01:0.01:n; stt=awgn(st,5); figure plot(tt,stt);
axis([0,n+1,-1.5,1.5]);
title('通过高斯信道后的信号'); grid
%-------------------------------------加噪声及低通滤波--------------------------------------------- dt=stt.*sin(2*pi*w*tt); %乘以同频率载波,为滤波做准备 figure
subplot(2,1,1) plot(tt,dt);
axis([0,n+1,-1.5,1.5]); title('相乘后的波形'); grid
%-----------------------------------------低通滤波器-------------------------------------------------- [N,Wn]=buttord(2*pi*25,2*pi*50,3,25,'s'); %临界频率采用角频率表示 [b,a]=butter(N,Wn,'s'); [bz,az]=impinvar(b,a,fs); %映射为数字,得到filter函数的参数 dt=filter(bz,az,dt); %数字低通滤波器 subplot(2,1,2)
%15? plot(tt,dt);
axis([0,n+1,-1.5,1.5]); title('低通滤波后的波形');
grid
%---------------------------------------抽样判决------------------------------------------ dt1=0; dt2=0; for(i=1:n) for(j=1:100)
% if(dt(100*(i-1)+j)>0) % dt1= dt1+1; % else dt1=dt1;
dt1=dt1+dt(100*(i-1)+j);
% end
% dt2=dt1/100; end
dt2=dt1/100; %取平均值判断,若大于0,则判决为高电平,否则为低电平 if(dt2>0)
dtt(100*(i-1)+1:100*i)=1; dt2=0; dt1=0;
else dtt(100*(i-1)+1:100*i)=0; dt2=0; dt1=0; end end figure
%subplot(2,1,2) plot(tt,dtt);
axis([0,n+1,-0.1,1.1]); title('判决后的波形'); grid
%------------------------------------------逆码变换后的序列------------------------------------------- z=zeros(1,n); for(i=1:n)
if(dtt(100*(i-1)+50)==1) z(i)=1; else z(i)=0; end end z; end
3.5 主函数
s0 = randint(1,56); %s0 Ëæ»úÐÅÔ´
%s1 ½»Ö¯±àÂëºóµÄ¾ØÕó %s2 ½»Ö¯±àÂëºóµÄÐòÁÐ %s3 ¾í»ý±àÂëºóµÄ¾ØÕó %s4 À©ÆµºóµÄ¾ØÕó %s5 À©ÆµºóµÄÐòÁÐ %s6 DPSK½âµ÷ºóµÄÐòÁÐ %s7 ¾í»ý½âÂëµÄ¾ØÕó %s8 ½»Ö¯½âÂëǰµÄ¾ØÕó %s9 ÊÕµ½µÄÐòÁÐ
s1 = (reshape(s0,7,8)); %½»Ö¯±àÂë
for j=1:8
s2(j) = s1(1,j); end for j=1:8
s2(j+8) = s1(2,j); end for j=1:8
s2(j+8*2) = s1(3,j); end for j=1:8
s2(j+8*3) = s1(4,j); end for j=1:8
s2(j+8*4) = s1(5,j); end for j=1:8
s2(j+8*5) = s1(6,j); end for j=1:8
s2(j+8*6) = s1(7,j); end
s3 = zeros(7,16); %¾í»ý±àÂë for i=1:7
s3(i,:) = convolutionX(s2(((i-1)*8+1):(i*8))); end
s4 = zeros(7,112); %À©Æµ start = zeros(7,7);
fbconnection = [0 0 0 0 0 1 1]; for i=1:7 if(i==1)
start(i,:) = [0 0 0 0 0 0 1]; else if(i==2)
start(i,:) = [0 0 0 0 0 1 1]; else if(i==3)
start(i,:) = [0 0 0 0 1 1 1]; else if(i==4)
start(i,:) = [0 0 0 1 1 1 1]; else if(i==5)
start(i,:) = [0 0 1 1 1 1 1]; else if(i==6)
start(i,:) = [0 1 1 1 1 1 1]; else
start(i,:) = [1 1 1 1 1 1 1]; end end end end end end
mseq=m_sequence(fbconnection,start(i,:)); for j=1:16 f = s3(i,j); for k=1:7
a = sign(mseq((j-1)*7+k)-0.5); b = sign(f-0.5); c = -a.*b; d = sign(c+1); s4(i,((j-1)*7+k)) = d; end end end
for j=1:112
s5(j) = s4(1,j); end
for j=1:112
s5(j+112) = s4(2,j);
end
for j=1:112
s5(j+112*2) = s4(3,j); end
for j=1:112
s5(j+112*3) = s4(4,j); end
for j=1:112
s5(j+112*4) = s4(5,j); end
for j=1:112
s5(j+112*5) = s4(6,j); end
for j=1:112
s5(j+112*6) = s4(7,j); end
s6 = dpsk(s5); %DPSKµ÷ÖÆ s7 = zeros(7,16); %½âÀ© for i=1:7 if(i==1)
start(i,:) = [0 0 0 0 0 0 1]; else if(i==2)
start(i,:) = [0 0 0 0 0 1 1]; else if(i==3)
start(i,:) = [0 0 0 0 1 1 1]; else if(i==4)
start(i,:) = [0 0 0 1 1 1 1]; else if(i==5)
start(i,:) = [0 0 1 1 1 1 1]; else if(i==6)
start(i,:) = [0 1 1 1 1 1 1]; else
start(i,:) = [1 1 1 1 1 1 1]; end end end end end end
mseq=m_sequence(fbconnection,start(i,:)); for j=1:16 for k=1:7
a = sign(mseq((j-1)*7+k)-0.5);
b = sign(s6(112*(i-1)+7*(j-1)+k)-0.5); c = -a.*b; d(k) = sign(c+1); end
if(d(1)==d(2)==d(3)==d(4)==d(5)==d(6)==d(7)) s7(i,j) = d(1); end end end
s8 = zeros(7,8); %¾í»ý½âÂë for i=1:7
s8(i,:) = deconvolution(s7(i,:)); end
s9 = (reshape(s8,1,56)); %½»Ö¯½âÂë
kkk=0; for(i=1:7) for(j=1:8)
if(s1(i,j)~=s8(i,j)) kkk=kkk+1; else kkk=kkk; end end bbb=kkk; end bbb
四、仿真结果
信源序列
交织编码后的矩阵序列
卷积编码后的矩阵序列
扩频后的序列
DPSK调制载波
DPSK调制后的信号波形
DPSK低通滤波后的信号波形
DPSK解调后的序列
扩频解扩后的序列
卷积解码后的序列
信宿收到的序列
五、CDMA系统分析
本次综设设计的CDMA系统,源信元采用56位的数字信号,码速率为56 bps/s 。其中,每8位为一个用户信息,即设计中有7个用户。
对源码进行交织编码,56位信息码分为7组信息码,每组8位数字信号。 对交织编码进行卷积编码,本次卷积编码采用(2,1,3)编码,所以每一组的8位数字信号转变为16位的卷积编码,码速率变为 7*16 = 112 bps/s 。
扩频通信中,采用M序列进行扩频,每一位信息码用7位M序列伪码进行扩频,码速率变为 112*7 = 784 bps/s 。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- jqkq.cn 版权所有 赣ICP备2024042794号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务