📄 dscdma_ray.m
字号:
%********* initialization ****************
clear
user=1;
m=32;% the length of spreading code
np=4; % the number of resolvable multipaths
ebn0=0:10;
%******** generate spreading code ********
WHcode=[1];
for i=1:log2(m)
WHcode=[WHcode,WHcode;WHcode,-WHcode];
end
code=WHcode(2:user+1,:);
for ii=1:length(ebn0)
noe=0;
nod=0;
for iii=1:1000
%****** generate random input ********
% Eb_No = 10.^(ebn0(ii)/10);
% %assume No = 2;
% No = 2;
% Eb = No * Eb_No;
% %calculate power p
% Tc = 1;
% Ts = m * Tc;
% p = Eb / Ts;
nd=12;
data=rand(user,nd)>0.5;
data_in=2*data-1;
% data_in=data_in*sqrt(p);
data_sp=spread(data_in,zeros(size(data_in)),code);
%********* transmission ******************
if user == 1
data_st=data_sp;
else
data_st=sum(data_sp);
end
%*********** rayleigh channel *****************
path_rel=randn(1,np);
path_img=randn(1,np);
path1=(path_rel+path_img*j)/(sqrt(2));
path2=(path_rel-path_img*j)/(sqrt(2));
% path1=path_rel+path_img*j;
% path11=path1./abs(path1);
% path2=path_rel-path_img*j;
% path22=path2./abs(path2);
tao=[0,1,3,7];
ap=[0,0,-2,-3];
ap=10.^(ap/10);
r1=path1.*ap;
r2=path2.*ap;
%********** received signal ***************
for i=1:np;
data_ch(i,:)=delay1(data_st,zeros(size(data_st)),length(data_st),tao(i));
data1(i,:)=r1(i)*data_ch(i,:);
end
data2=sum(data1);
%*********** AWGN ****************
spow = sum(rot90(data_sp.^2))/nd; % attenuation Calculation
attn = sqrt(0.5*spow*10^(-ebn0(ii)/10));
data_rc = comb2(data2,zeros(size(data2)),attn);
%**************** Rake receiver ***************
b=2; % the number of fingers
for jj=1:user
for j0=1:b
code0(jj,:)=delay2(code(jj,:),zeros(1,m),m,tao(j0));
data3(j0,:)=r2(j0).*data_rc(jj,:);
data4(j0,:)=despread(data3(j0,:),zeros(size(data3)),code0(jj,:)); % despreading
end
if b==1
data_de(jj,:)=data4;
else
data_de(jj,:)=sum(data4);
end
end
demodata=data_de>0;
%*********** BER *************
noe2 = sum(sum(abs(data(:,2:nd-1)-demodata(:,2:nd-1))));
nod2 = (nd-2)*user;
noe = noe + noe2;
nod = nod + nod2;
end
ber(ii) = noe / nod;
fprintf('%d\t%d\t%d\t%e\n',ebn0(ii),noe,nod,ber(ii)); % fprintf: built in function
end
semilogy(ebn0,ber);
% 0 904 10000 9.040000e-002
% 1 743 10000 7.430000e-002
% 2 729 10000 7.290000e-002
% 3 730 10000 7.300000e-002
% 4 765 10000 7.650000e-002
% 5 738 10000 7.380000e-002
% 6 638 10000 6.380000e-002
% 7 638 10000 6.380000e-002
% 8 578 10000 5.780000e-002
% 9 511 10000 5.110000e-002
% 10 518 10000 5.180000e-002
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -