📄 fig_adaptive_mud_time_invariant_environment.m
字号:
% Fig_adaptive_mud_time_invariant_environment
%%%%%%%%%%%%%%%%% Blind Multiuser Detection Using LMS Algorithms %%%%%%%%%%%
clear
N=31; % the spreading gain
SourceNum=2000; % the number of source signal
IterNum=SourceNum*N; % the number of noise
RunningTime=10; % the iteration number
userNum=13; % the total number of users
mu=2e-5; % learning rate
SNR=[20 30 30 30 30 30 40 40 40 40 40 40 50]-20; % the SNR correspond to the first user
% handle=waitbar(0,'Please wait...'); % uicontral waitbar's handle
for j=1:RunningTime % begin to circulation
noise=randn(IterNum,1)/(10^(20/20)); % generate noise
source=sign(rand(userNum,SourceNum)-0.5); % generate bipolar signal
source=diag(10.^(SNR/20))*source;
spreadingCode=goldcode(log2(N+1))/sqrt(N); % generate spreading code using the function goldcode
spreadingCode=spreadingCode(:, 2:userNum+1);
% spreaded signal
% SpreadedSignal=[spreadingCode(:,1:10)*source(1:10,1:600) spreadingCode*source(:,601:1200) spreadingCode(:,1:8)*source(1:8,1201:SourceNum)];
SpreadedSignal=spreadingCode*source;
x=zeros(N,1); % the variant part of weigh vector
for i=1:SourceNum
ReceivedSignal(:,i)=SpreadedSignal(:,i)+noise(1+(i-1)*N:i*N); % calculate the received signal, that passs the channel
Z_MF=ReceivedSignal(:,i)'*spreadingCode(:,1);
Z=ReceivedSignal(:,i)'*(spreadingCode(:,1)+x);
x=x-mu*Z*(ReceivedSignal(:,i)-Z_MF*spreadingCode(:,1));
SINR(j,i)=10*log10(abs((spreadingCode(:,1)+x)'*source(1,i)*spreadingCode(:,1)/((spreadingCode(:,1)+x)'*(ReceivedSignal(:,i)-source(1,i)*spreadingCode(:,1))))^2);
OutputEnergy(j,i)=abs((spreadingCode(:,1)+x)'*ReceivedSignal(:,i))^2;
MSE(j,i) = (source(1,i)-(spreadingCode(:,1)+x)'*ReceivedSignal(:,i))^2;
end
end
FONTSIZE=0.315; % 单位为厘米;
LINEWIDTH_AXES=1.2;%140/42; % corresponding to 0.140mm
LINEWIDTH_WAVE=0.5;%180/42; % corresponding to 0.180mm
figNumber=figure('Name','three adaptive mud algorithms in static environment', 'Visible','on');
set(gcf,'Color','white');
plot(mean(SINR),'b','LineWidth',LINEWIDTH_WAVE)
hold on
xlabel('Iteration Number','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE);
ylabel('SINR','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE);
title('\bf The Average SINR versus Iteration Number of Three Adaptive Algorithms','Color','blue','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE*1.2);
set(gca,'XColor','blue','YColor','blue','FontUnits','centimeters','FontName','Times New Roman','FontSize',FONTSIZE,'LineWidth',LINEWIDTH_AXES);
set(figNumber,'PaperPosition',[0.634518 6.34518 20.3046*0.8 15.2284*0.8]); %Shrink the figure size
%%%%%%%%%%%%%%%%% Blind Multiuser Detection Using RLS Algorithms %%%%%%%%%%%
clear
N=31;
SourceNum=2000;
IterNum=SourceNum*N;
RunningTime=10;
lamda=0.995;
userNum=13;
SNR=[20 30 30 30 30 30 40 40 40 40 40 40 50]-20;
% handle=waitbar(0,'Please wait...');
for j=1:RunningTime
noise=randn(IterNum,1)/(10^(20/20));
source=sign(rand(userNum,SourceNum)-0.5);
source=diag(10.^(SNR/20))*source;
spreadingCode=goldcode(log2(N+1))/sqrt(N);
spreadingCode=spreadingCode(:, 2:userNum+1);
% SpreadedSignal=[spreadingCode(:,1:10)*source(1:10,1:600) spreadingCode*source(:,601:1200) spreadingCode(:,1:8)*source(1:8,1201:SourceNum)];
SpreadedSignal=spreadingCode*source;
R_inv=1e5*eye(N);
for i=1:SourceNum
ReceivedSignal(:,i)=SpreadedSignal(:,i)+noise(1+(i-1)*N:i*N);
k=R_inv*ReceivedSignal(:,i)/(lamda+ReceivedSignal(:,i)'*R_inv*ReceivedSignal(:,i));
R_inv=1/lamda*(R_inv-k*ReceivedSignal(:,i)'*R_inv);
c=1/(spreadingCode(:,1)'*R_inv*spreadingCode(:,1))*R_inv*spreadingCode(:,1);
SINR(j,i)=10*log10(abs(c'*source(1,i)*spreadingCode(:,1)/(c'*(ReceivedSignal(:,i)-source(1,i)*spreadingCode(:,1))))^2);
OutputEnergy(j,i)=abs(c'*ReceivedSignal(:,i))^2;
MSE(j,i) = (source(1,i)-c'*ReceivedSignal(:,i))^2;
end
end
FONTSIZE=0.315; % 单位为厘米;
LINEWIDTH_AXES=1.2;%140/42; % corresponding to 0.140mm
LINEWIDTH_WAVE=0.5;%180/42; % corresponding to 0.180mm
plot(mean(SINR),'g','LineWidth',LINEWIDTH_WAVE)
%%%%%%%%%%%%%%%%% Blind Multiuser Detection Using Kalman Filter %%%%%%%%%%%
clear
N=31;
SourceNum=2000;
IterNum=SourceNum*N;
RunningTime=10;
userNum=13;
mu=2e-5;
SNR=[20 30 30 30 30 30 40 40 40 40 40 40 50]-20;
for j=1:RunningTime
noise=randn(IterNum,1)/(10^(20/20));
source=rand(userNum,SourceNum);
for i=1:userNum
source(i,find(source(i,:)>0.5))=1;
source(i,find(source(i,:)<=0.5))=-1;
end
source=diag(10.^(SNR/20))*source;
spreadingCode=goldcode(log2(N+1))/sqrt(N);
spreadingCode=spreadingCode(:, 2:userNum+1);
C=[spreadingCode(:,1) rand(N,N-1)];
% SpreadedSignal=[spreadingCode(:,1:10)*source(1:10,1:600) spreadingCode*source(:,601:1200) spreadingCode(:,1:8)*source(1:8,1201:SourceNum)];
SpreadedSignal=spreadingCode*source;
for i=2:N
temp=zeros(N,1);
for k=1:i-1
temp=temp+C(:,i)'*C(:,k)*C(:,k);
end
C(:,i)=C(:,i)-temp;
C(:,i)=C(:,i)/sqrt(sum(C(:,i).^2));
end
K=eye(N-1);
w=zeros(N-1,1);
for i=1:SourceNum
ReceivedSignal(:,i)=SpreadedSignal(:,i)+noise(1+(i-1)*N:i*N);
y=spreadingCode(:,1)'*ReceivedSignal(:,i);
d=C(:,2:N)'*ReceivedSignal(:,i);
g=K*d/(d'*K*d+1);
K=K-g*d'*K;
w=w+g*(y-d'*w);
c=spreadingCode(:,1)-C(:,2:N)*w;
result(j,i) = c'*ReceivedSignal(:,i);
SINR(j,i)=10*log10(abs(c'*source(1,i)*spreadingCode(:,1)/(c'*(ReceivedSignal(:,i)-source(1,i)*spreadingCode(:,1))))^2);
OutputEnergy(j,i)=abs((c'*ReceivedSignal(:,i)))^2;
end
MinAveEnergy(j)=abs(1/(spreadingCode(:,1)'*inv(ReceivedSignal*ReceivedSignal'/SourceNum)*spreadingCode(:,1)));
RemainEnergy(j,:)=abs(OutputEnergy(j,:)-MinAveEnergy(j));
end
FONTSIZE=0.315; % 单位为厘米;
LINEWIDTH_AXES=1.2;%140/42; % corresponding to 0.140mm
LINEWIDTH_WAVE=0.5;%180/42; % corresponding to 0.180mm
plot(mean(SINR),'y','LineWidth',LINEWIDTH_WAVE)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -