⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dscdma_ray.m

📁 简单的单用户ds-cdma系统仿真
💻 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 + -