%MMSE多用户检测
%由发送序列->调制->扩频->AWGN->解调->解扩->MMSE检测
clear all;
K=7;
N=1000;
goal_user=1;
M=2; %PSK调制进制
E=1; %每符号能量
%——产生gold序列——
fbconnection1=[0 0 1 0 1];
fbconnection2=[0 1 1 1 1];
mseq1=m_sequence(fbconnection1);
mseq2=m_sequence(fbconnection2);
L=2^length(fbconnection1)-1;
for shift_amount=0:L-1
shift_mseq2=[mseq2(shift_amount+1:L) mseq2(1:shift_amount)]; %对第二个m序列进行循环移位
goldseq(shift_amount+1,:)=mod(mseq1+shift_mseq2,2); %m1序列和循环移位后的m2序列模2加后即为gold序列
end
ind1=find(goldseq==0); %将gold序列的0变为-1;
goldseq(ind1)=-1;
%——归一化互相关矩阵(扩频信号)——
R=zeros(K,K);
for ii=1:K
for jj=1:K
R(ii,jj)=sum(goldseq(ii,:).*goldseq(jj,:));
end
end
R=R/L; %归一化互相关矩阵
I=eye(K,K);
M1=I; %传统检测器
M2=inv(R); %解相关检测器
%——产生发送序列——
signal_unspread=randsrc(K,N);%产生K*N矩阵
signal_spread=zeros(K,L*N); %产生K*(L*N)矩阵
%——对发送序列扩频——
for ii=1:K
j=1;
for i = 1:N
for k = j:(j+L-1)
signal_spread(ii,k) = signal_unspread(ii,i);
end
signal_spread(ii,j:(j+L-1)) = signal_spread(ii,j:(j+L-1)).*goldseq(ii,:);
j = L*i+1;
end
end
%--PSK调制Modulation——
%ind2=find(signal_spread==-1); %将扩频后的-1、1序列变为0、1序列
%signal_spread(ind2)=0;
%for ii=1:K
% mod_signal(ii,:)=pskmod(signal_spread(ii,:),M); %PSK调制
%end;
mod_signal(ii,:)=signal_spread(ii,:);
xx=zeros(K,L*N);
x=zeros(1,L*N);
SNR=0:1:10;%信噪比范围
for nn=1:length(SNR)
Eb_N0=10^(SNR(nn)/10); %转化为DB值
sigma=sqrt(1/(2*Eb_N0)); %噪声信号方差
%----K个用户通过AWGN信道----
for ii=1:K
%xx(ii,:)=awgn(mod_signal(ii,:),SNR(nn),'measured');
xx(ii,:)=awgn(mod_signal(ii,:),SNR(nn));
end
%——加高斯白噪声--
for ii=1:K
x=x+xx (ii,:);
end
x=x/sqrt(K);
y_undemod=x;
M3=inv(R+sigma*I); %MMSE检测器
%——解调——
%y=pskdemod(y_undemod,M);
%ind2=find(y==0); %将解扩后的0、1序列变为-1、1序列
%y(ind2)=-1;
y=y_undemod;
%——解扩——
r=zeros(K,N);
for ii=1:K
j=1;
for iii = 1:N
r(ii,iii) = sum(y(j:(j+L-1)).*goldseq(ii,:));
j = L*iii+1;
end
end
bk1=M1*r;signal_rec1=sign(bk1);
bk2=M2*r;signal_rec2=sign(bk2);
bk3=M3*r;signal_rec3=sign(bk3);
MF_PE(nn)=length(find(signal_unspread(goal_user,:)-signal_rec1(goal_user,:)));
De_PE(nn)=length(find(signal_unspread(goal_user,:)-signal_rec2(goal_user,:)));
MMSE_PE(nn)=length(find(signal_unspread(goal_user,:)-signal_rec3(goal_user,:)));
end
MF_BER=MF_PE/N;
De_BER=De_PE/N;
MMSE_BER=MMSE_PE/N;
%
semilogy(SNR,De_BER,'-k*');
hold on;
semilogy(SNR,MF_BER,'-.ro');
hold on;
semilogy(SNR,MMSE_BER,'--b+');
grid on;
xlabel('SNR/dB');
ylabel('BER');
title('同步系统AWGN下解相关和MMSE多用户检测的误码率性能');
legend('解相关检测','MF','MMSE');
- 1
- 2
前往页