您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页【matlab编程代做】基于MATLAB的码分多址复用技术的仿真

【matlab编程代做】基于MATLAB的码分多址复用技术的仿真

来源:测品娱乐
clc,clear,close all; %%

%我们使用四个用户的CDMA系统

coefficients=[1 0 1 0 0]; %5级左移m序列码发生器的反馈系数 mseq=mseries(coefficients); %生成31×31的m序列码矩阵

walsh=[1 1 1 1;1 -1 1 -1;1 1 -1 -1;1 -1 -1 1]; %4阶WALSH矩阵 pn=mseq(1:31); %PN码

%四个用户发出的信号,可以随便设定

user0=[ 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,可以是随机信号

user1=[-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];%用户2,可以是随机信号

user2=[ 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];%用户3,可以是随机信号

user3=[-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];%用户4,可以是随机信号

%==========================================================================

for t=1:length(user0)

user=[user0(t),user1(t),user2(t),user3(t)];%四个用户分别发送1,-1,1,1

for i=1:4%四用户信号和WALSH矩阵相乘 for j=1:4

walsh_user(j,i)=user(i)*walsh(i,j); end end

for i=1:4%变成串行信号

walsh_user2(4*i-3)=walsh_user(i,1); walsh_user2(4*i-2)=walsh_user(i,2); walsh_user2(4*i-1)=walsh_user(i,3); walsh_user2(4*i-0)=walsh_user(i,4); end

for i=1:31 for j=1:16

walsh_user3(i,j)=walsh_user2(j); end end

for i=1:31 for j=1:16

pn_walsh_user(i,j)=walsh_user3(i,j)*pn(i); end end

%并----串

for i=1:31 for j=1:16

pn_walsh_user_c(i*j)=pn_walsh_user(i,j); end end

%以上是信号调制过程

%========================================================================== %一下是信号解调过程

%串----并 for i=1:31 for j=1:16

pn_walsh_user_rec(i,j)=pn_walsh_user_c(i*j); end end

%pn解扩 for i=1:31 for j=1:16

walsh_user_rec(i,j)=pn_walsh_user_rec(i,j)*pn(i); end end

for i=1:31 for j=1:16

walsh_user_rec2(j)=walsh_user_rec(i,j); end end

%walsh解扩

user_rec2(1,1)=walsh_user_rec2(1); user_rec2(1,2)=walsh_user_rec2(2); user_rec2(1,3)=walsh_user_rec2(3); user_rec2(1,4)=walsh_user_rec2(4);

user_rec2(2,1)=walsh_user_rec2(5); user_rec2(2,2)=walsh_user_rec2(6); user_rec2(2,3)=walsh_user_rec2(7); user_rec2(2,4)=walsh_user_rec2(8);

user_rec2(3,1)=walsh_user_rec2(9); user_rec2(3,2)=walsh_user_rec2(10); user_rec2(3,3)=walsh_user_rec2(11);

user_rec2(3,4)=walsh_user_rec2(12);

user_rec2(4,1)=walsh_user_rec2(13); user_rec2(4,2)=walsh_user_rec2(14); user_rec2(4,3)=walsh_user_rec2(15); user_rec2(4,4)=walsh_user_rec2(16);

for i=1:4 for j=1:4

rec(i,j)= user_rec2(i,j)*walsh(i,j); end end

%===============接收信号===================================

rec_signal= user_rec2(1,1:4);

%========画信号============================================================== if t==1 figure;

subplot(511)

stairs(1:4,user,'r');%用户信号 axis([1,4,-2,2]);

title('用户发送的信号')

subplot(512)%随机码 stairs(1:31,pn); axis([1,31,-2,2]); title('随机码')

subplot(513)%调制WALSH stairs(1:16,walsh_user2,'r'); axis([1,16,-2,2]); title('调制WALSH')

subplot(514) %发送

stairs(1:496,pn_walsh_user_c); axis([1,496,-2,2]); title('发送信号')

subplot(515) %数据接收 stairs(1:4,rec_signal,'r'); axis([1,4,-2,2]);

title('数据接收信号') hold on; end end

figure;

subplot(411); stairs(1:32,user0);

axis([1,32,-2,2]);title('user0数据接收信号')

subplot(412); stairs(1:32,user1);

axis([1,32,-2,2]);title('user1数据接收信号')

subplot(413); stairs(1:32,user2);

axis([1,32,-2,2]);title('user2数据接收信号')

subplot(414); stairs(1:32,user3);

axis([1,32,-2,2]);title('user3数据接收信号') %%

%=====================以上是加上噪声的 误码率测试=================================================

prompt={'请输入用户个数:','请输入用户发送信息个数:','请输入用户码功率','请输入噪声功率','请输入要测试的用户ID号'};

name=['码分多址复用技术测试']; line=1;

defaultanswer={'4','100','1 2 3 4', '10','1'};

glabel=inputdlg(prompt,name,line,defaultanswer);%对话框 num1=str2num(char(glabel(1,1))); %对话框 num2=str2num(char(glabel(2,1))); %对话框 num3=str2num(char(glabel(3,1))); %对话框 num4=str2num(char(glabel(4,1))); %对话框 k=str2num(char(glabel(5,1))); %对话框

UserNumber=num1;%用户数

inflength=num2;%用户信息序列长度 a=num3; %用户信息功率 Pn=num4; %噪声功率 sigma=1;%噪声标准差

%========================================================================== N=31;%伪随即序列的阶数

R=(ones(UserNumber)+(N-1)*eye(UserNumber))/N; %相关系数矩阵

b=2*randint(UserNumber,inflength)-1; %用户信息矩阵(随机+1,-1矩阵) coefficients=[1 0 1 0 0]; %5级左移m序列码发生器的反馈系数 mseq=mseries(coefficients); %生成31×31的m序列码矩阵 mseq=mseq(1:UserNumber,1:N);

%==================以上生成随即序列========================================

%===================生成噪声========================== n1=Pn*normrnd(0,1,1,inflength*N); n=zeros(UserNumber,inflength); for j=1:inflength

ntemp=n1(1,((j-1)*N+1):j*N); n(:,j)=(mseq*ntemp')/N; end

%*******************************************

A=diag(a);

y=R*A*b+n; %传统单用户检测

ydec=inv(R)*y; %线性解相关多用户检测

ymmse=inv(R+sigma^2*inv(A))*y; %最小均方误差多用户检测 for i=1:UserNumber

ylen(i)=length(find(sign(real(y(i,:)))-b(i,:))); ydeclen(i)=length(find(sign(real(ydec(i,:)))-b(i,:)));

ymmselen(i)=length(find(sign(real(ymmse(i,:)))-b(i,:))); BER_y(i)=ylen(i)/inflength;

BER_ydec(i)=ydeclen(i)/inflength; BER_ymmse(i)=ymmselen(i)/inflength; end

snr=20*log10(a(1)/Pn); disp('信噪比为'); disp(snr);

disp('误码个数为'); disp(ylen(k)); disp(ydeclen(k)); disp(ymmselen(k)); disp('误码率为'); disp( BER_y(k)); disp(BER_ydec(k)); disp(BER_ymmse(k));

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务