📄 r.m
字号:
% function [ber ]=cdma_sim(N,SF,EbNo,NumInterferers,MPathDelay)
N=2000;
SF=31;
EbNo=6;
NumInterferers=2;
MPathDelay=[1 2 3];
% Kfactor_dB=4;
rand('state',sum(100*clock)); randn('state',sum(100*clock));
NIterate = 1000; % default block size
NumberOfIterations = ceil(N/NIterate);
% ErrorState = 0; ErrorRun = []; RunCount = 1; % itialize
EbNolinear=10^(EbNo/10);
error=0;
DesiredSequence = MSequence(SF+1); % desired signal
offset = fix(length(DesiredSequence)/(NumInterferers+1));
M = length(DesiredSequence);
for k=1:NumInterferers
InterfererSequence(k,:)=[DesiredSequence(M-(k-1)*offset:M) DesiredSequence(1:M-1-(k-1)*offset)];
end
for cnt=1:NumberOfIterations
% Generate symbols for dsired and interfering users and spread.
DesiredSymbols = sign(rand(1,NIterate)-0.5);
InterferingSymbols = sign(rand(NumInterferers,NIterate)-0.5);
DesiredChips = reshape(DesiredSequence.'*DesiredSymbols,1,M*NIterate);
for k=1:NumInterferers
InterferingChips(k,:) =reshape(InterfererSequence(k,:).'*InterferingSymbols (k,:),1,M*NIterate);
end
% Generate noise.
NoiseAmp=sqrt(SF/(2*EbNolinear));
MaxDelay = max(MPathDelay);
MPathComponents = length(MPathDelay);
DesiredNoise = NoiseAmp*randn(MPathComponents,M*NIterate+MaxDelay);
% Apply multipath.
DesiredMPathSignal_1= zeros(1,M*NIterate+MaxDelay);
DesiredMPathSignal_2= zeros(1,M*NIterate+MaxDelay);
DesiredMPathSignal_3= zeros(1,M*NIterate+MaxDelay);
DesiredMPathSignal_4= zeros(1,M*NIterate+MaxDelay);
%期望用户信号的初始角度
% angle_1=randint(1,MPathComponents,30)/180*pi; %相对用户速度方向的发射信号离开角度,要求均匀分布于[0:2*pi]
% angle_2=randint(1,MPathComponents,11)/180*pi; %随机相位均匀分布于[0:2*pi]
desire_angle=randint(1,MPathComponents,65)/180*pi; % 期望用户的中心到达角
%干扰用户信号的初始家角度
% angle_inter1_a=pi*randint(NumInterferers,MPathComponents,30)/180; %相对用户速度方向的发射信号离开角度,要求均匀分布于[0:2*pi]
% angle_inter2_b=pi*randint(NumInterferers,MPathComponents,11)/180; %随机相位均匀分布于[0:2*pi]
interfer_angle=pi*randint(NumInterferers,MPathComponents,65)/180; %interfer_angle各干扰信号在不同多径中的入射角
%对于干扰信号的多径衰落计算
InterferingMPathSignall_1=zeros(NumInterferers,M*NIterate+MaxDelay);
InterferingMPathSignall_2=zeros(NumInterferers,M*NIterate+MaxDelay);
InterferingMPathSignall_3=zeros(NumInterferers,M*NIterate+MaxDelay);
InterferingMPathSignall_4=zeros(NumInterferers,M*NIterate+MaxDelay);
aaa=randn(NumInterferers+1,MaxDelay).^2;
bbb=randn(NumInterferers+1,MaxDelay).^2;
ro=sqrt(aaa+bbb);
% ro=kron(raylrnd(1/sqrt(2),1,NIterate),ones(1,M)); %ro衰落系数
j=sqrt(-1);
angle=randint(NumInterferers+1,MPathComponents,10)/180*pi; %随机相位
for i=1:MPathComponents
aa=MPathDelay(i);
for k=1:NumInterferers
% fadings(aa,:)=exp((2*pi*(60/180*pi*cos(angle_inter1_a(k,i))+angle_inter2_b(k,i)))*j)*ro;
fadings(aa,:)=exp(angle(k,i)*j)*ro(k,i);
index=1+aa:aa+M*NIterate;
InterferingMPathSignall_1(k,index) = ...
InterferingMPathSignall_1(k,index) + fadings(aa,:).*InterferingChips(k,:).*exp(-j*0);
%天线阵1上接收的干扰信号
InterferingMPathSignall_2(k,index) = ...
InterferingMPathSignall_2(k,index) + fadings(aa,:).*InterferingChips(k,:).*exp(-j*(pi*sin(interfer_angle(k,i))));
%天线阵2上接收的干扰信号
InterferingMPathSignall_3(k,index) = ...
InterferingMPathSignall_3(k,index) + fadings(aa,:).*InterferingChips(k,:).*exp(-j*(pi*2*sin(interfer_angle(k,i))));
%天线阵3上接收的干扰信号
InterferingMPathSignall_4(k,index) = ...
InterferingMPathSignall_4(k,index) + fadings(aa,:).*InterferingChips(k,:).*exp(-j*(pi*3*sin(interfer_angle(k,i))));
%天线阵4上接收的干扰信号
end
InterferingMPathSignal_1(i,:)=sum(InterferingMPathSignall_1,1);
InterferingMPathSignal_2(i,:)=sum(InterferingMPathSignall_2,1);
InterferingMPathSignal_3(i,:)=sum(InterferingMPathSignall_3,1);
InterferingMPathSignal_4(i,:)=sum(InterferingMPathSignall_4,1);
end
%针对期望信号,计算多径衰落
for i=1:MPathComponents
aa=MPathDelay(i);
fading(aa,:)=exp(angle(end)*j)*ro(end,i);
index=1+aa:aa+M*NIterate;
DesiredMPathSignal_1(i,index) =DesiredMPathSignal_1(index)+fading(aa,:).*DesiredChips.*exp(-j*0);
%天线阵元1上接收到的期望信号
DesiredMPathSignal_2(i,index) =DesiredMPathSignal_2(index)+fading(aa,:).*DesiredChips.*exp(-j*(pi*sin(desire_angle(i))));
%天线阵元2上接收到的期望信号
DesiredMPathSignal_3(i,index) =DesiredMPathSignal_3(index)+fading(aa,:).*DesiredChips.*exp(-j*(pi*2*sin(desire_angle(i))));
%天线阵元3上接收到的期望信号
DesiredMPathSignal_4(i,index) =DesiredMPathSignal_4(index)+fading(aa,:).*DesiredChips.*exp(-j*(pi*3*sin(desire_angle(i))));
%天线阵元4上接收到的期望信号
end
% Add intererence and noise.以天线阵元为单位,存放在阵元i上的各个多径上的信号总和
IncomingSignal_1 =DesiredMPathSignal_1 + InterferingMPathSignal_1 + DesiredNoise;
IncomingSignal_2 =DesiredMPathSignal_2 + InterferingMPathSignal_2 + DesiredNoise;
IncomingSignal_3 =DesiredMPathSignal_3 + InterferingMPathSignal_3 + DesiredNoise;
IncomingSignal_4 =DesiredMPathSignal_4 + InterferingMPathSignal_4 + DesiredNoise;
% 未解扩的信号,直接有在天线上采样后再进行一次子采样,
for i=1:MPathComponents
aa=MPathDelay(i);
x_1=reshape(IncomingSignal_1(i,aa+1:aa+M*NIterate),M,NIterate);
IncomingSignal__1(i,:)=x_1(end,:);
x_2=reshape(IncomingSignal_2(i,aa+1:aa+M*NIterate),M,NIterate);
IncomingSignal__2(i,:)=x_2(end,:);
x_3=reshape(IncomingSignal_3(i,aa+1:aa+M*NIterate),M,NIterate);
IncomingSignal__3(i,:)=x_3(end,:);
x_4=reshape(IncomingSignal_4(i,aa+1:aa+M*NIterate),M,NIterate);
IncomingSignal__4(i,:)=x_4(end,:);
end
% 解扩信号,以阵元为单位,每行代表一条路径,用匹配滤波器解扩
DespreadSymbols_1 = zeros(MPathComponents,M*NIterate);
DespreadSymbols_2 = zeros(MPathComponents,M*NIterate);
DespreadSymbols_3 = zeros(MPathComponents,M*NIterate);
DespreadSymbols_4 = zeros(MPathComponents,M*NIterate);
for i=1:MPathComponents
aa=MPathDelay(i);
DespreadSymbols_1(i,:)=IncomingSignal_1(i,aa+1:aa+M*NIterate).*reshape((DesiredSequence'*ones(1,NIterate)),1,M*NIterate);
DespreadSymbols_2(i,:)=IncomingSignal_1(i,aa+1:aa+M*NIterate).*reshape((DesiredSequence'*ones(1,NIterate)),1,M*NIterate);
DespreadSymbols_3(i,:)=IncomingSignal_1(i,aa+1:aa+M*NIterate).*reshape((DesiredSequence'*ones(1,NIterate)),1,M*NIterate);
DespreadSymbols_4(i,:)=IncomingSignal_1(i,aa+1:aa+M*NIterate).*reshape((DesiredSequence'*ones(1,NIterate)),1,M*NIterate);
DespreadSymbols__1(i,:)=1/sqrt(SF+1).*sum((reshape(DespreadSymbols_1(i,:),M,NIterate)),1);
DespreadSymbols__2(i,:)=1/sqrt(SF+1).*sum((reshape(DespreadSymbols_2(i,:),M,NIterate)),1);
DespreadSymbols__3(i,:)=1/sqrt(SF+1).*sum((reshape(DespreadSymbols_3(i,:),M,NIterate)),1);
DespreadSymbols__4(i,:)=1/sqrt(SF+1).*sum((reshape(DespreadSymbols_4(i,:),M,NIterate)),1);
end
for i=1:MPathComponents
Y=[DespreadSymbols__1(i,:);DespreadSymbols__2(i,:);DespreadSymbols__3(i,:);DespreadSymbols__4(i,:)];
X=[IncomingSignal__1(i,:);IncomingSignal__2(i,:);IncomingSignal__3(i,:);IncomingSignal__4(i,:)];
R=beanforing_RSL(X,Y);
Z(i,:)=R;
end
% new=zeros(1,length(Y));
% new=sum(Z,1); %加权系数后的多径合并
new_real=real(sum(Z,1));
new_imag=imag(sum(Z,1));
signal=sign(new_real.*new_imag);
clear Z
clear new_Z
%差错率计算
% for index=1:length(Y)
for index=1:360
error=0.5*abs(signal(index)-DesiredSymbols(index))+error;
end
ber(cnt)=error/(cnt*NIterate);
% db(cnt)=10*lg(error/(cnt*NIterate));
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -