这是本人大四的一个简单的课程设计,有需要的可以参考参考
直接序列码分多址(DS-CDMA)技术的原理是基于扩频技术,将需要传送的具有一定带宽的信号,用另一个带宽远大于信号带宽的高速伪随机码进行调制,使原数据信号的带宽被扩展,即扩频。接收端使用完全相同的伪随机码,与接收的信号作相关处理,把宽带信号转换成原始的窄带信号即解扩,以实现信息通信。
高速伪随机码采用Walsh码,根据码分多址的基本原理以及基于码分多址的通信系统模型,用MATLAB仿真至少3个用户的DS-CDMA通信收发系统。
图示扩频前后、解扩前后的时域波形。
%此函数用于随机生成三个用户的信息信号。
function x = bingen(L)
x = rand(1,L);
x(find(x<0.5)) = -1;
x(find(x >=0.5)) = 1;
end
%此函数把扩频码和要传输的信息信号相乘,从而得到扩频序列。
function y = ds_mod(c,x)
z = c*x;
y = z(:);
end
function x = ds_demod(c,y)
tmp = reshape(y, length(c), length(y)/length(c));
tmp = tmp';
x = tmp * c;
x = x';
end
clear all;
format long;
N = 4; %设置沃尔什-哈达玛序列阶数,可供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); %对用户2的信号进行ds扩频
y = y1+y2+y3; %把三路信号加在一起形成基带信号
figure(1),
subplot(3,1,1);plot(x1);title('用户1');
subplot(3,1,2);plot(x2);title('用户2');
subplot(3,1,3);plot(x3);title('用户3');
figure(2),
subplot(3,1,1);plot(y1);title('用户1扩频后');
subplot(3,1,2);plot(y2);title('用户2扩频后');
subplot(3,1,3);plot(y3);title('用户3扩频后');
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;
figure(4),
subplot(3,1,1);plot(x1_de);title('解扩后用户1');
subplot(3,1,2);plot(x2_de);title('解扩后用户2');
subplot(3,1,3);plot(x3_de);title('解扩后用户3');
~~如果是用于课程设计的话别直接就复制黏贴了哦,还是要了解了解的啊,x宝还卖几百块呢这种东西 ~~hquer
最后附上我参考的一个资料
[。。]
(https://pan.baidu.com/s/1Q9OWzfc4IRxcypVYtU2e1w)