班级:x’x
姓名:x’x
学号:x’x
日期:x’x实验十六 CDMA通信系统综合仿真
一、实验目的
1. 了解多址技术,扩频技术及CDMA相关通信原理知识。
2. 理解和掌握CDMA通信系统工作理论。
3. 完成CDMA通信系统的设计,并利用Matlab开展仿真分析。
4. 熟悉Matlab及simulink的使用。
2、实验内容
1. 根据CDMA通信系统工作的原理(即扩频通信原理)如下图1,理解和掌握CDMA通信系统整个通信过程。
2. 根据CDMA通信系统工作的原理编写matlab程序,并简要讲述程序流程,用图片记录(显示)整个通信过程。
3. 根据CDMA通信系统工作的原理及程序流程用simulink进行仿真,记录仿真结果。
图1 扩频通信的工作原理
三、实验结果
1. 程序流程
2. 仿真过程记录
图2 初始用户传递信息
图3 用户信息扩频后
图4 基带信号
图5 解扩后信号
误码率:由于在设计中只考虑到加性高斯信道所带来的干扰,最终三个信息的
误码率几乎均为0,这里不再作展示。
3. Simulink仿真过程记录。
图 6 simulink仿真图
图7 初始信号1和初始信号2
图8 扩频后的信号1和信号2
图9 基带信号
图10 解扩后的信号1和信号2
四、实验结论
对于本次实验以及仿真而言,基本完成了实验目的和内容的要求,通过用MATLAB对DS-CDMA系统的仿真调试、结果分析,让我熟悉了DS-CDMA的工作原理,加深了对扩频通信的认识。通过仿真结果中波形的直观方式,让我更清晰的认识到CDMA通信系统的工作方式。但是在设计中只考虑到加性高斯白噪声所带来的干扰,所以误码率计算的结果为0然而在实际通信信道及干扰是复杂多变的,存在着各种各样的情况,仿真实验中最后的信号是在很简单的干扰下(基本没有干扰)得出。要想应用于实际中,必须加入各种噪声来考虑,以实现真实系统的设计。即使如此,在本次设计的整个过程中,以上的结果已经令我受益匪浅。通信系统的性能分析和仿真,随着通信技术、信息技术和计算机技术的发展以及网络系统的大量应用,显得越来越重要。
五、程序
%主程序
clear all;
format long;
N = 8; %设置沃尔什-哈达玛序列阶数,可供2^n个用户使用。x_num = 50; %设置传输信息长度
UserCode = hadamard(N); %生成沃尔什-哈达玛序列
x1 = bingen(x_num); %随机生成用户1要发送的信号(子函数见下面)
c1 = UserCode(4,:); %取出哈达玛矩阵第4行作为用户1的识别码
y1 = ds_mod(c1(:),x1); %对用户1的信号进行ds扩频
x2 = bingen(x_num); %随机生成用户2要发送的信号
c2 = UserCode(2,:); %取出哈达玛矩阵第2行作为用户2的识别码
y2 = ds_mod(c2(:),x2); %对用户2的信号进行ds扩频
x3 = bingen(x_num); %随机生成用户3要发送的信号
c3 = UserCode(3,:); %取出哈达玛矩阵第3行作为用户3的识别码
y3 = ds_mod(c3(:),x3); %对用户3的信号进行ds扩频
x4 = bingen(x_num); %随机生成用户4要发送的信号
c4 = UserCode(6,:); %取出哈达玛矩阵第4行作为用户4的识别码
y4 = ds_mod(c4(:),x4); %对用户4的信号进行ds扩频
y = y1+y2+y3+y4; %把四路信号加在一起形成基带信号
figure(1),
subplot(4,1,1);plot(x1);title('信号1');
subplot(4,1,2);plot(x2);title('信号2');
subplot(4,1,3);plot(x3);title('信号3');
subplot(4,1,4);plot(x4);title('信号4');
figure(2),
subplot(4,1,1);plot(y1);title('信号1扩频后');
subplot(4,1,2);plot(y2);title('信号2扩频后');
subplot(4,1,3);plot(y3);title('信号3扩频后');
subplot(4,1,4);plot(y4);title('信号4扩频后');
z = awgn(y,1); %加入高斯白噪声
figure(3),
subplot(2,1,1);plot(y);title('混合后的基带信号');
subplot(2,1,2);plot(z);title('加入高斯白噪声后的基带信号');
x1_de = ds_demod(c1(:),z); %使用用户1的识别码对加入噪声的基带信号进行解扩x1_de(find(x1_de < 0)) = -1; %(解扩子函数见下面)
x1_de(find(x1_de >=0)) = 1; %对解扩后的信号进行判决,从而恢复出用户1的信号x2_de = ds_demod(c2(:),z); %以下同上
x2_de(find(x2_de < 0)) = -1;
x2_de(find(x2_de >=0)) = 1;
x3_de = ds_demod(c3(:),z);
x3_de(find(x3_de < 0)) = -1;
x3_de(find(x3_de >=0)) = 1;
x4_de = ds_demod(c4(:),z);x4_de(find(x4_de < 0)) = -1;
x4_de(find(x4_de >=0)) = 1;
figure(4),
subplot(4,1,1);plot(x1_de);title('解扩后信号1');
subplot(4,1,2);plot(x2_de);title('解扩后信号2');
subplot(4,1,3);plot(x3_de);title('解扩后信号3');
subplot(4,1,4);plot(x4_de);title('解扩后信号4')
[number1,ratio1] = symerr(x1,x1_de);
[number2,ratio2] = symerr(x2,x2_de);
[number3,ratio3] = symerr(x3,x3_de);
[number4,ratio4] = symerr(x4,x4_de);
scatterplot(ratio1);title('误码率');
scatterplot(ratio2);title('误码率');
scatterplot(ratio3);title('误码率');
scatterplot(ratio4);title('误码率');
子函数:
%生成沃尔什-哈达玛序列
function H = hadamard(n,classname)
if nargin < 2
classname = 'double';
end
if isstring(classname) && isscalar(classname)
classname = char(classname);
end
[f,e] = log2([n n/12 n/20]);
k = find(f==1/2 & e>0);
if min(size(n)) > 1 || isempty(k)
error(message('MATLAB:hadamard:InvalidInput'));
end
e = e(k)-1;
if k == 1 % N = 1 * 2^e;
H = ones(classname);
elseif k == 2 % N = 12 * 2^e;
H = [ones(1,12,classname); ones(11,1,classname) ...
toeplitz([-1 -1 1 -1 -1 -1 1 1 1 -1 1],[-1 1 -1 1 1 1 -1 -1 -1 1 -1])]; elseif k == 3 % N = 20 * 2^e;
H = [ones(1,20,classname); ones(19,1,classname) ...
hankel([-1 -1 1 1 -1 -1 -1 -1 1 -1 1 -1 1 1 1 1 -1 -1 1], ...
[1 -1 -1 1 1 -1 -1 -1 -1 1 -1 1 -1 1 1 1 1 -1 -1])];
end
% Kronecker product construction.
for i = 1:e
H = [H H H -H]; %#ok end%随机生成信号子函数 function x = bingen(L) x = rand(1,L); x(find(x<0.5)) = -1; x(find(x >=0.5)) = 1; %扩频子函数 function y = ds_mod(c,x) tmp = c*x; y = tmp(:); %解扩子函数 function x = ds_demod(c,y) tmp = reshape(y, length(c), length(y)/length(c)); tmp = tmp'; x = tmp * c; x = x';下载本文