?? adaptive mmse space-time multi-user detection .m
字號:
clear;
usernumber=15; % 小區(qū)里的用戶數(shù)
Lc1=31; % 用于對符號擴(kuò)頻的長度
ini(1,:)=[0 0 0 0 1];
ini(2,:)=[0 0 0 1 0];
ini(3,:)=[0 0 0 1 1];
ini(4,:)=[0 0 1 0 0];
ini(5,:)=[0 0 1 0 1];
ini(6,:)=[0 0 1 1 0];
ini(7,:)=[0 0 1 1 1];
ini(8,:)=[0 1 0 0 0];
ini(9,:)=[0 1 0 0 1];
ini(10,:)=[0 1 0 1 0];
ini(11,:)=[0 1 0 1 1];
ini(12,:)=[0 1 1 0 0];
ini(13,:)=[0 1 1 0 1];
ini(14,:)=[0 1 1 1 0];
ini(15,:)=[0 1 1 1 1];
ini(16,:)=[1 0 0 0 0];
ini(17,:)=[1 0 0 0 1];
ini(18,:)=[1 0 0 1 0];
ini(19,:)=[1 0 0 1 1];
ini(20,:)=[1 0 1 0 0];
ini(21,:)=[1 0 1 0 1];
ini(22,:)=[1 0 1 1 0];
ini(23,:)=[1 0 1 1 1];
ini(24,:)=[1 1 0 0 0];
ini(25,:)=[1 1 0 0 1];
ini(26,:)=[1 1 0 1 0];
ini(27,:)=[1 1 0 1 1];
ini(28,:)=[1 1 1 0 0];
ini(29,:)=[1 1 1 0 1];
ini(30,:)=[1 1 1 1 0];
poly1=[1 0 0 1 0 1];
n=5;
for k=1:1:usernumber;
mseq=msequence(ini(k,:),n,poly1);
PN(k,:)=conver(mseq,n);
end % 產(chǎn)生用戶PN碼
%方向向量的產(chǎn)生
for i=1:1:usernumber;
aa1(i)=4*3.14*(rand-0.5);%每個用戶第1個路徑的波達(dá)方向
aa2(i)=4*3.14*(rand-0.5);%每個用戶第2個路徑的波達(dá)方向
aa3(i)=4*3.14*(rand-0.5);%每個用戶第3個路徑的波達(dá)方向
aa4(i)=4*3.14*(rand-0.5);%每個用戶第4個路徑的波達(dá)方向
end
for i=1:1:usernumber;
a1(:,i)=[1 exp(j*3.14*sin(aa1(i))) exp(j*2*3.14*sin(aa1(i))) exp(j*3*3.14*sin(aa1(i)))]';%每個用戶在天線1上的方向向量
a2(:,i)=[1 exp(j*3.14*sin(aa2(i))) exp(j*2*3.14*sin(aa2(i))) exp(j*3*3.14*sin(aa2(i)))]';%每個用戶在天線2上的方向向量
a3(:,i)=[1 exp(j*3.14*sin(aa3(i))) exp(j*2*3.14*sin(aa3(i))) exp(j*3*3.14*sin(aa3(i)))]';%每個用戶在天線3上的方向向量
a4(:,i)=[1 exp(j*3.14*sin(aa4(i))) exp(j*2*3.14*sin(aa4(i))) exp(j*3*3.14*sin(aa4(i)))]';%每個用戶在天線4上的方向向量
end
snrindb=5; %信噪比(分貝)
snr=10^(snrindb/10);
%噪聲方差假設(shè)為1,信號的幅度也設(shè)為1
sgma=1;
%比特能量
Eb=2*sgma^2*snr;
%設(shè)有15個用戶,基站有4個天線,每個用戶有4個路徑,最大時延為5個碼片,同時考慮多址干擾和碼片間干擾
zuidashiyanmapianshu=5;%最大時延碼片數(shù)
kuozhanmachang=31+zuidashiyanmapianshu;%擴(kuò)展碼長
%幅度產(chǎn)生
A(1,1)=0.7*sqrt(Eb);
A(1,2)=0.2*sqrt(Eb);
A(1,3)=0.5*sqrt(Eb);
A(1,4)=0.3*sqrt(Eb);
for i=2:1:usernumber;
for j=1:1:4;
A(i,j)=(2-rand)*sqrt(Eb);;
end
end
%各個用戶各個路徑的時延碼片個數(shù)
shiyan1=[3 2 4 5 0 1 5 3 5 2 1 3 1 4 5 5 3 0 0 3 2 1 0 4 3 2 1 4 3 0];%各個用戶第1條路徑的時延碼片數(shù)
shiyan2=[0 3 2 1 5 4 0 2 4 1 2 1 0 5 3 3 5 3 4 0 3 2 4 5 0 1 5 3 5 2];%各個用戶第2條路徑的時延碼片數(shù)
shiyan3=[2 1 0 4 3 2 1 4 3 0 5 4 5 1 0 0 4 4 2 1 4 4 5 5 1 5 4 1 1 5];%各個用戶第3條路徑的時延碼片數(shù)
shiyan4=[4 4 5 5 1 5 4 1 1 5 4 2 2 3 4 1 2 2 3 2 0 3 2 1 5 4 0 2 4 1];%各個用戶第4條路徑的時延碼片數(shù)
%擴(kuò)展碼的產(chǎn)生
for i=1:1:usernumber;
C1(i,:)=[zeros(1,shiyan1(i)) PN(i,:) zeros(1,zuidashiyanmapianshu-shiyan1(i))];
if shiyan1(i)==0;
C1f(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan1(i);
C1f(i,j)=PN(i,31-shiyan1(i)+j);
else C1f(i,j)=0;
end
end
end
if shiyan1(i)==zuidashiyanmapianshu;
C1b(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan1(i)+31;
C1b(i,j)=0;
else C1b(i,j)=PN(i,j-31-shiyan1(i));
end
end
end
C2(i,:)=[zeros(1,shiyan2(i)) PN(i,:) zeros(1,zuidashiyanmapianshu-shiyan2(i))];
if shiyan2(i)==0;
C2f(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan2(i);
C2f(i,j)=PN(i,31-shiyan2(i)+j);
else C2f(i,j)=0;
end
end
end
if shiyan2(i)==zuidashiyanmapianshu;
C2b(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan2(i)+31;
C2b(i,j)=0;
else C2b(i,j)=PN(i,j-31-shiyan2(i));
end
end
end
C3(i,:)=[zeros(1,shiyan3(i)) PN(i,:) zeros(1,zuidashiyanmapianshu-shiyan3(i))];
if shiyan3(i)==0;
C3f(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan3(i);
C3f(i,j)=PN(i,31-shiyan3(i)+j);
else C3f(i,j)=0;
end
end
end
if shiyan3(i)==zuidashiyanmapianshu;
C3b(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan3(i)+31;
C3b(i,j)=0;
else C3b(i,j)=PN(i,j-31-shiyan3(i));
end
end
end
C4(i,:)=[zeros(1,shiyan4(i)) PN(i,:) zeros(1,zuidashiyanmapianshu-shiyan4(i))];
if shiyan4(i)==0;
C4f(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan4(i);
C4f(i,j)=PN(i,31-shiyan4(i)+j);
else C4f(i,j)=0;
end
end
end
if shiyan4(i)==zuidashiyanmapianshu;
C4b(i,:) =zeros(1,kuozhanmachang);
else
for j=1:1:kuozhanmachang;
if j<=shiyan4(i)+31;
C4b(i,j)=0;
else C4b(i,j)=PN(i,j-31-shiyan4(i));
end
end
end
end
b=zeros(usernumber,10000); %定義所有用戶發(fā)送的符號為一個矩陣
%用戶數(shù)據(jù)的產(chǎn)生
for j=1:1:2000+2;
b(1,j)=1;%用戶1的訓(xùn)練序列,假設(shè)都為1
end
for i=2:1:usernumber;
for j=1:1:2000+2;
b(i,j)=sign(0.5-rand);
end
end
%RLS算法產(chǎn)生時間域的權(quán)值向量c1、c2、c3、c4,其中c1、c2、c3、c4分別是每個天線在時間域上對應(yīng)的權(quán)值
%初始化
XX=zeros(4,kuozhanmachang,2000);%定義一個矩陣XX
r=0.99;%遺忘因子
P1=0.005*ones(kuozhanmachang,kuozhanmachang)-0.01*rand(kuozhanmachang,kuozhanmachang);%初始化P1
c1=0.005*ones(kuozhanmachang,1)-0.01*rand(kuozhanmachang,1);%初始化權(quán)值c1
P2=0.005*ones(kuozhanmachang,kuozhanmachang)-0.01*rand(kuozhanmachang,kuozhanmachang);%初始化P2
c2=0.005*ones(kuozhanmachang,1)-0.01*rand(kuozhanmachang,1);%初始化權(quán)值c2
P3=0.005*ones(kuozhanmachang,kuozhanmachang)-0.01*rand(kuozhanmachang,kuozhanmachang);%初始化P3
c3=0.005*ones(kuozhanmachang,1)-0.01*rand(kuozhanmachang,1);%初始化權(quán)值c3
P4=0.005*ones(kuozhanmachang,kuozhanmachang)-0.01*rand(kuozhanmachang,kuozhanmachang);%初始化P4
c4=0.005*ones(kuozhanmachang,1)-0.01*rand(kuozhanmachang,1);%初始化權(quán)值c4
for l=2:1:2000;
% 產(chǎn)生每個天線的時間域接收信號
X=zeros(4,kuozhanmachang);
for i=1:1:usernumber;
X=X+a1(:,i)*A(i,1)*C1(i,:)*b(i,l)+a1(:,i)*A(i,1)*C1b(i,:)*b(i,l+1)+a1(:,i)*A(i,1)*C1f(i,:)*b(i,l-1)+a2(:,i)*A(i,2)*C2(i,:)*b(i,l)+a2(:,i)*A(i,2)*C2b(i,:)*b(i,l+1)+a2(:,i)*A(i,2)*C2f(i,:)*b(i,l-1)+a3(:,i)*A(i,3)*C3(i,:)*b(i,l)+a3(:,i)*A(i,3)*C3b(i,:)*b(i,l+1)+a3(:,i)*A(i,3)*C3f(i,:)*b(i,l-1)+a4(:,i)*A(i,4)*C4(i,:)*b(i,l)+a4(:,i)*A(i,4)*C4b(i,:)*b(i,l+1)+a4(:,i)*A(i,4)*C4f(i,:)*b(i,l-1);
end
X=X+sgma*randn(4,kuozhanmachang);
XX(:,:,l)=X;%將接收數(shù)據(jù)存儲到XX中
%天線1時間域上的RLS算法
K1=(1/(r+X(1,:)*P1*X(1,:)'))*P1*X(1,:)';
e1=1-X(1,:)*c1;
c1=c1+K1*e1;
P1=(1/r)*(P1-K1*X(1,:)*P1);
%天線2時間域上的RLS算法
K2=(1/(r+X(2,:)*P2*X(2,:)'))*P2*X(2,:)';
e2=1-X(2,:)*c2;
c2=c2+K2*e2;
P2=(1/r)*(P2-K2*X(2,:)*P2);
%天線3時間域上的RLS算法
K3=(1/(r+X(3,:)*P3*X(3,:)'))*P3*X(3,:)';
e3=1-X(3,:)*c3;
c3=c3+K3*e3;
P3=(1/r)*(P3-K3*X(3,:)*P3);
%天線4時間域上的RLS算法
K4=(1/(r+X(4,:)*P4*X(4,:)'))*P4*X(4,:)';
e4=1-X(4,:)*c4;
c4=c4+K4*e4;
P4=(1/r)*(P4-K4*X(4,:)*P4);
end
%RLS算法產(chǎn)生空間域的權(quán)值向量w1
%初始化
r=0.99;%遺忘因子
P=0.005*ones(4,4)-0.01*rand(4,4);%初始化P
w1=0.005*ones(4,1)-0.01*rand(4,1);%初始化w1
for l=2:1:2000;
% 產(chǎn)生每個天線的接收信號
X=XX(:,:,l);%接收數(shù)據(jù)
Y1=X(1,:)*c1;%天線1時域濾波輸出信號
Y2=X(2,:)*c2;%天線2時域濾波輸出信號
Y3=X(3,:)*c3;%天線3時域濾波輸出信號
Y4=X(4,:)*c4;%天線4時域濾波輸出信號
Y=[Y1 Y2 Y3 Y4]';%將Y1、Y2、Y3、Y4組成一個向量
%空域中的RLS算法
K=(1/(r+Y'*P*Y))*P*Y;
e=1-Y'*w1;
w1=w1+K*e;
P=(1/r)*(P-K*Y'*P);
end
%重新產(chǎn)生用戶數(shù)據(jù)
for i=1:1:usernumber;
for j=1:1:10000+2;
b(i,j)=sign(0.5-rand);
end
end
%接收信號并計算誤碼率
error=0;%誤碼數(shù)置0
for l=2:1:10000;
% 產(chǎn)生每個天線的時間域接收信號
X=zeros(4,kuozhanmachang);
for i=1:1:usernumber;
X=X+a1(:,i)*A(i,1)*C1(i,:)*b(i,l)+a1(:,i)*A(i,1)*C1b(i,:)*b(i,l+1)+a1(:,i)*A(i,1)*C1f(i,:)*b(i,l-1)+a2(:,i)*A(i,2)*C2(i,:)*b(i,l)+a2(:,i)*A(i,2)*C2b(i,:)*b(i,l+1)+a2(:,i)*A(i,2)*C2f(i,:)*b(i,l-1)+a3(:,i)*A(i,3)*C3(i,:)*b(i,l)+a3(:,i)*A(i,3)*C3b(i,:)*b(i,l+1)+a3(:,i)*A(i,3)*C3f(i,:)*b(i,l-1)+a4(:,i)*A(i,4)*C4(i,:)*b(i,l)+a4(:,i)*A(i,4)*C4b(i,:)*b(i,l+1)+a4(:,i)*A(i,4)*C4f(i,:)*b(i,l-1);
end
X=X+sgma*randn(4,kuozhanmachang);
%時域濾波
Y1=X(1,:)*c1;
Y2=X(2,:)*c2;
Y3=X(3,:)*c3;
Y4=X(4,:)*c4;
%空域濾波
Y=[Y1 Y2 Y3 Y4]';
YY=w1'*Y;
b1=sign(real(YY));%取YY的實部,并得到對用戶1數(shù)據(jù)的估計
if b1~=b(1,l);
error=error+1;%當(dāng)出現(xiàn)誤碼時,error加1
end
end
wumalv=error/10000;%計算誤碼率
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -