目录
一、实习目的及要求
目的:
- 掌握CDMA直接序列扩频技术,理解码分多址技术的原理与流程,能够使用Matlab语言实现CDMA直接序列扩频系统仿真和分析;
- 熟练使用Matlab语言进行实验,掌握MATLAB软件工具的使用;
- 能够书写内容完整、逻辑清晰的实验报告。
要求:
- 产生Walsh 64序列,观察其自相关和互相关特性;
- 生成二进制信息码的波形图;
- 用扩频码1对信息码进行扩频得到s,并生成扩频后信号s的波形图;
- 分别用扩频码1和扩频码2对s进行解扩,画出解扩后波形图。
二、实习选题的背景及目标
背景:
CDMA系统是以扩频调制技术和码分多址技术为基础的数字蜂窝移动通信系统。目前扩频通信系统可以分为直接序列扩频(DSSS,Direct Sequence Spread Spectrum)、调频(FH,Frequency Hopping)、跳时(TH,Time Hopping)、宽带线性调频(Chirp Modulation)四种。直接序列扩频通信系统具有抗干扰性强、隐蔽性好、易于实现码分多址、抗多径干扰、通信速率高、保密性强等优点。
本次实验要求实现直接序列扩频系统的仿真与分析,通过模拟实现信号发送、信号调制、信号接收、信号解调等操作,体会扩频系统的工作流程,理解其工作原理。以直接序列扩频系统为基础,进一步了解3G数字蜂窝移动通信系统的特点与原理。
目标:
1.掌握CMDA直接序列扩频系统的工作原理与实现流程;
2.体会数字蜂窝移动通信系统的特点与原理;
3.掌握Matlab语言与工具的使用,能够使用Matlab实现CMDA直接序列扩频系统的仿真与模拟。
三、设计方案
图 1 walsh64 生成与相关性分析流程图
图 2 信息码扩频与解扩流程图
四、实习环境与主要步骤描述
实验环境:
硬件 内存:8.00 GB
CPU:1.80GHz
64 位操作系统
基于 x64 的处理器
操作系统 windows10
开发语言 Matlab
实验步骤:
1.产生Walsh 64序列:直接使用hadamard函数生成Walsh64序列;
2.绘制自相关与互相关曲线:设计xg函数计算相关性,随机选取两行序列进行自相关与互相关计算。
xg函数:输入两个序列,输出函数计算结果;
3.生成二进制信息码:创建mayuan函数:输入序列长度和单个码元持续时间,输出信息码;采用随机数生成序列,使用rand函数,进行round(rand())*2-1;计算生成正负电平为1、-1的信息码;
4.生成二进制信息码的波形图:使用stairs函数绘制波形图;
5.用扩频码1对信息码进行扩频得到s:扩频使用异或,但不可以直接用扩频码进行计算,扩频码有正负,所以创建了myxor函数:转换-1为0,再进行异或计算;
6.生成扩频后信号s的波形图:使用stairs函数绘制波形图;
7.分别用扩频码1和扩频码2对s进行解扩:再进行一次异或操作;
8.绘制解扩后波形图:使用stairs函数绘制波形图。
五、实习的结果与讨论
结论:
1.从walsh64的相关性曲线可以知道:Walsh码随机性差,数量少;walsh的自相关性差;能
够做到完全正交,但有些码组不能做到完全正交,说明在存在多径时延时,可能会发生互相干扰。
2.使用扩频码1进行扩频时,使用扩频码1解扩效果好,结果正确,但使用扩频码2进行解
扩则不能进行正确解扩。
待解答的问题:
1.二进制信息码应该为0或1,但正负电平为1、-1二进制信息码就应该为1、-1,这样不是矛盾了吗?(应该是我理解问题,我最后生成的信息码都是1、-1,与walsh64 同步)如果信息码包含1、-1,则进行异或操作时,它们不是二进制数,则全为0,所以还需要再自己进行变换。
2.扩频码1和2是什么?我们选取walsh64进行扩频与解扩,但walsh64生成了64*64的矩阵,是随机选取其中两行进行操作吗?(我随机选了第2和3行进行操作)
实验局限性:
1.单一扩频码不能有效进行结果比较;
2.单一扩频技术不能横向比较不同扩频系统,比如调频、跳时、宽带线性调频的优缺点。
六、实习总结
1.通过本次实习我进一步体会到数字蜂窝通信系统的特点,了解了其工作原理,掌握了直接
序列扩频技术的工作流程与特点,能够使用matlab对其进行模拟实现。
2.我进一步熟练了matlab语言与工具的使用;我提升了资料搜索、查询的能力;提升了文档
编写能力。
参考文献:
[1]直接序列扩频通信系统:https://max.book118.com/html/2017/1122/141115006.shtm
[2]CDMA移动通信系统中的常用码型:PN码和Walsh码:http://www.txrzx.com/i1147-0.html
[3]序列的相关性:https://blog.csdn.net/weixin_40378598/article/details/107639194
[4]xor(23,43)为什么结果是0? https://www.ilovematlab.cn/thread-339955-1-1.html
[5]Matlab: https://ww2.mathworks.cn/products/matlab.html
附件:
结果图:
图 3 信号码扩频解扩结果图
图 4 walsh相关性结果图1
图 5 walsh相关性结果图2
代码列表:
xg.m:
function [ R1 ] = xg( m1,m2 )
%xg 相关性判断
% R1:处理后的结果
% m1、m2:输入序列
N=length(m1);
t1=m1;
t2=zeros(1,N-1);
for i=1:N+1;
D=sum(1*(t1~=m2));
A=N-D;
R1(i)=(A-D)/N;
for j=1:N-1;
t2(j)=t1(j);
end
flag=t1(N);
for j=1:N-1;
t1(j+1)=t2(j);
end
t1(1)=flag;
end
end
t1.m:
clear ;
clc;
close all;
%% 1.产生Walsh 64序列,观察其自相关和互相关特性
walsh=hadamard(64);
m41=walsh(41,:);
m33=walsh(33,:);
m37=walsh(37,:);
m20=walsh(20,:);
N=length(walsh(2,:));
R1=xg(m41,m41);
R2=xg(m41,m33);
R3=xg(m33,m33);
R4=xg(m37,m37);
R5=xg(m20,m20);
R6=xg(m37,m20);
figure('name','41与33');
subplot(3,1,1);
plot(0:N,R1);
title('41行自相关');
subplot(3,1,2);
plot(0:N,R3);
title('33行自相关');
subplot(3,1,3);
plot(0:N,R2);
title('41行和33行互相关 ');
figure('name','37与20');
subplot(3,1,1);
plot(0:N,R4);
title('37行自相关');
subplot(3,1,2);
plot(0:N,R5);
title('20行自相关');
subplot(3,1,3);
plot(0:N,R6);
title('37行和20行互相关 ');
mayuan.m:
function [ m ] = mayuan( N,Tb )
%mayuan 产生二进制信息
% N:长度
% Tb:单个码元持续时间
% m:二进制信息
for i=Tb:Tb:N
t=round(rand())*2-1;
for j=i-Tb+1:i
m(j)=t;
end
end
end
myxor.m:
function [ res ] = myxor( m1,m2 )
%myxor 实现异或
% m1 m2:输入序列
% res:输出的异或结果
N=length(m1);
for i=1:N;
if m1(i)==-1;
m1(i)=0;
end
if m2(i)==-1
m2(i)=0;
end
end
res=double(xor(m1,m2));
for i=1:N
if res(i)==0
res(i)=-1;
end
end
end
t234.m:
clear;
clc;
close all;
%% 2.生成二进制信息码的波形图;
N=64;%二进制序列数
Tb=4;%码元持续时间
m=mayuan(N,Tb);%长度为N,码元持续时间为Tb
subplot(4,1,1);
stairs(m);%画二进制序列波形
ylim([-1.5,1.5]);%限制图长度
title('二进制信息码的波形图');
%% 3.用扩频码1对信息码进行扩频得到s,并生成扩频后信号s的波形图;
walsh=hadamard(N);
PN=walsh(2,:);% 扩频码
PN1=walsh(3,:);
s1=myxor(m,PN);
%s1=m.*PN;%扩频
subplot(4,1,2);
stairs(s1);
ylim([-1.5,1.5]);
title('扩频后的信号');
%% 4.分别用扩频码1和扩频码2对s进行解扩,画出解扩后波形图
subplot(4,1,3);
%s2=s1.*PN;%解扩
s2=myxor(s1,PN);
stairs(s2);
ylim([-1.5,1.5]);
title('扩频码1解扩后的信号');
subplot(4,1,4);
s3=myxor(s1,PN1);
%s3=s1.*PN1;%解扩
stairs(s3);
ylim([-1.5,1.5]);
title('扩频码2解扩后的信号');