1.背景介绍
CDMA是码分多址的英文缩写(Code Division Multiple Access),它是在数字技术的分支--扩频通信技术上发展起来的一种崭新而成熟的无线通信技术。CDMA技术的原理是基于扩频技术,即将需传送的具有一定信号带宽信息数据,用一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,再经载波调制并发送出去。
图1扩频通信系统的结构模型
一种最简单的直接序列扩频实现方法是使用“异或(XOR)”运算将数据序列与扩频码序列结合。接收方再用同样的扩频码序列“异或”一次就能恢复原来的数据序列。
图2直接序列扩频实现方法
2.任务说明
此次实习的任务是CDMA直接序列扩频系统仿真和分析,主要内容包括:
- 产生Walsh 64序列,观察其自相关和互相关特性;
- 生成二进制信息码的波形图;
- 用扩频码1对信息码进行扩频得到s,并生成扩频后信号s的波形图;
- 分别用扩频码1和扩频码2对s进行解扩,画出解扩后波形图.
3.提示
- 生成Walsh 64可以常采用matlab自带的hadamard函数;
- 二进制信息码采用随机数生成序列,可采用randn函数然后求余的方式,正负电平为1,-1.
- 扩频解扩用异或,参考matlab函数xor
-
matlab使用方法以及Q&A可参考https://cn.mathworks.com/products/matlab.html
代码实现
产生Walsh64序列,观察其自相关和互相关特性:
clear;
N=64;
T=62;
a=cell(64,64);
a=hadamard(64);
a1=a(:,37);
a2=a(:,20);
figure
Raa=zeros(1,T+1);
for i=0:T
Raa(i+1)=0;
for j=1:N
k=i+j;
while(k>N)
k=k-N;
end
Raa(i+1)=Raa(i+1)+a1(j)*a1(k);
end
Raa(i+1)=Raa(i+1)/N;
end
subplot(3,1,1)
stem(0:T,Raa);
title('a1自相关函数');
%************************
Rbb=zeros(1,T+1);
for i=0:T
Rbb(i+1)=0;
for j=1:N
k=i+j;
while(k>N)
k=k-N;
end
Rbb(i+1)=Rbb(i+1)+a2(j)*a2(k);
end
Rbb(i+1)=Rbb(i+1)/N;
end
subplot(3,1,2)
stem(0:T,Rbb);
title('a2自相关函数');
%**********************************
Rab=zeros(1,T+1);
for i=0:T
Rab(i+1)=0;
for j=1:N
k=i+j;
while(k>N)
k=k-N;
end
Rab(i+1)=Rab(i+1)+a1(j)*a2(k);
end
Rab(i+1)=Rab(i+1)/N;
end
subplot(3,1,3)
stem(0:T,Rab);
title('a1,a2互相关函数');
实现效果图:
生成二进制信息码,并进行扩频与解扩,并对波形图进行绘制:
totalpic=5;
H2=[1 1;1 0];
NH2=H2*(0);
H4=[H2 H2;H2 NH2];
NH4=H4*(0);
H8=[H4 H4;H4 NH4];
NH8=H8*(0);
H16=[H8 H8;H8 NH8];
NH16=H16*(0);
H32=[H16 H16;H16 NH16];
NH32=H32*(0);
H64=[H32 H32;H32 NH32];
p1=H64(5,:);
p2=H64(15,:);
m1t=mod(fix(randn(1,16)),2);
s1=xor(m1t,p1(1:length(m1t)));
subplot(totalpic,1,1)
stairs(m1t);
axis([1 16 -1 1.5]);
title('发送序列')
subplot(totalpic,1,2)
stairs(p1);
title('扩频序列')
axis([1 64 -1 1.5]);
subplot(totalpic,1,3)
stairs(s1);
title('扩频后序列')
axis([1 16 -1 1.5]);
subplot(totalpic,1,4)
d1=xor(p1(1:length(m1t)),s1);
stairs(d1)
title('解扩频后序列')
axis([1 16 -1 1.5]);
subplot(totalpic,1,5)
d2=xor(p2(1:length(m1t)),s1);
stairs(d2)
title('扩频码2解扩频后序列')
axis([1 16 -1 1.5]);
实现效果图: