%TX=RX=2=4 ML and MMSE-SIC
% vblast接收机 QPSK调制,ML检测 慢衰落信道 2暍2收以及4暍4收(帮houpk:[email protected])
% Zhaidewei 2007.5.17
% Email:[email protected]
% qq:402731924
%初始化====================================================================
clear,clc
tx=2;rx=2;L=50;
Modulation='QPSK';
EbN0=[0:2:10];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(2*tx*L,1);
% 经过QPSK调制的V-Blast暍射矩阵X
% | a=0 a=1
% 未调制比特ab,QPSK调制星座图选取: sqrt(1/2)*|b=0 1+i -1+i
% |b=1 1-i -1-i
X=zeros(tx,L);
AI=A(1:2:end);
AQ=A(2:2:end);
for k=1:tx
X(k,:)=transpose(sqrt(.5)*((-1).^(AI(k:tx:end)+1)+i*((-1).^(AQ(k:tx:end)+1))));
end
% Table
table=[1;1;-1;-1]+i*[1;-1;1;-1];
% 快衰落Rayleigh信道H
H=sqrt(1/2)*(randn(rx,tx)+i*randn(rx,tx));
% 均值为0暯差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=H*X(:,k);
end
% tx=2,rx=2,MMSE-SIC(ordered)=======================================================
'MMSE-SIC'
berms2=[];
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
for t=1:L
r=R_noised(:,t);
HH=H;
G=pinv(HH);
S=[1:tx];
xtemp=zeros(tx,1);
for k=1:tx
[wki,ki]=min(norm(G));
w=inv(HH'*HH+(1/snr)*eye(tx-k+1))*HH';
y=w(ki,:)*r;
xtemp(S(ki))=(real(y)>=0)-(real(y)<0)+0+i*((imag(y)>=0)-(imag(y)<0)+0);
r=r-sqrt(1/2)*xtemp(S(ki))*H(:,S(ki));
HH(:,ki)=[];
S(ki)=[];
G=pinv(HH);
end
x=[x,xtemp];
end
xi=real(x);
xq=imag(x);
ai=zeros(tx,L);
aq=zeros(tx,L);
for k=1:tx
ai(k:tx:end)=(xi(k:tx:end)+1)/2;
aq(k:tx:end)=(xq(k:tx:end)+1)/2;
end
a=zeros(2*tx*L,1);
a(1:2:end)=ai;
a(2:2:end)=aq;
[errbit,temp_ber]=biterr(A,a);
berms2=[berms2,temp_ber];
end
figure
semilogy(EbN0,berms2,'s- b'),grid on
%tx=2rx=2 ML=================================================================
'ML'
berml2=[];
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
for t=1:L
r=R_noised(:,t);
xtemp=zeros(tx,1);
for p = 1:4
for q = 1:4
temp((p-1)*4+q) = norm(r-H*sqrt(1/2)*[table(p);table(q)]);
end
end
[val,ind] = min(temp);
p = floor((ind-1)/4)+1;
q = ind-4*(p-1);
xtemp = [table(p);table(q)];
x=[x,xtemp];
end
xi=real(x);
xq=imag(x);
ai=zeros(tx,L);
aq=zeros(tx,L);
for k=1:tx
ai(k:tx:end)=(xi(k:tx:end)+1)/2;
aq(k:tx:end)=(xq(k:tx:end)+1)/2;
end
a=zeros(2*tx*L,1);
a(1:2:end)=ai;
a(2:2:end)=aq;
[errbit,temp_ber]=biterr(A,a);
berml2=[berml2,temp_ber];
end
hold on
semilogy(EbN0,berml2,'^- k')
%tx=4,rx=4===============================================================
%初始化====================================================================
%tx=4rx=4,MMSE-SIC=========================================================
% MMSE-SIC(ordered)=======================================================
clear,clc
tx=2;rx=2;L=50;
Modulation='QPSK';
EbN0=[0:2:10];
B=30000;Ts=1/24300;
% 建立EbN0与SNR之间的换算关系
SNR=EbN0-10*log10(Ts*B);
% 信源A
A=randint(2*tx*L,1);
% 经过QPSK调制的V-Blast暍射矩阵X
% | a=0 a=1
% 未调制比特ab,QPSK调制星座图选取: sqrt(1/2)*|b=0 1+i -1+i
% |b=1 1-i -1-i
X=zeros(tx,L);
AI=A(1:2:end);
AQ=A(2:2:end);
for k=1:tx
X(k,:)=transpose(sqrt(.5)*((-1).^(AI(k:tx:end)+1)+i*((-1).^(AQ(k:tx:end)+1))));
end
% Table
table=[1;1;-1;-1]+i*[1;-1;1;-1];
% 快衰落Rayleigh信道H
H=sqrt(1/2)*(randn(rx,tx)+i*randn(rx,tx));
% 均值为0暯差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=H*X(:,k);
end
berms4=[];
'MMSE-SIC'
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
for t=1:L
r=R_noised(:,t);
HH=H;
G=pinv(HH);
S=[1:tx];
xtemp=zeros(tx,1);
for k=1:tx
[wki,ki]=min(norm(G));
w=inv(HH'*HH+(1/snr)*eye(tx-k+1))*HH';
y=w(ki,:)*r;
xtemp(S(ki))=(real(y)>=0)-(real(y)<0)+0+i*((imag(y)>=0)-(imag(y)<0)+0);
r=r-sqrt(1/2)*xtemp(S(ki))*H(:,S(ki));
HH(:,ki)=[];
S(ki)=[];
G=pinv(HH);
end
x=[x,xtemp];
end
xi=real(x);
xq=imag(x);
ai=zeros(tx,L);
aq=zeros(tx,L);
for k=1:tx
ai(k:tx:end)=(xi(k:tx:end)+1)/2;
aq(k:tx:end)=(xq(k:tx:end)+1)/2;
end
a=zeros(2*tx*L,1);
a(1:2:end)=ai;
a(2:2:end)=aq;
[errbit,temp_ber]=biterr(A,a);
berms4=[berms4,temp_ber];
end
hold on
semilogy(EbN0,berms4,'s- r')
%tx=4,rx=4,ML=====================================================================
berml4=[];
'ML'
for m=SNR
m
snr=10^(m/10);
R_noised=R+sqrt(1/snr)*n;
x=[];
for t=1:L
r=R_noised(:,t);
xtemp=zeros(tx,1);
for p = 1:4
for q = 1:4
for pp=1:4
for qq=1:4
temp((p-1)*64+(q-1)*16+(pp-1)*4+qq) = norm(r-H(:,:,t)*sqrt(1/2)*[table(p);table(q);table(pp);table(qq)]);
%kk=kk+1;
end
end
end
end
[val,ind] = min(temp);
p=floor((ind-1)/64)+1;
q=floor(((ind-64*(p-1))-1)/16)+1;
pp=floor(((ind-64*(p-1)-16*(q-1))-1)/4)+1;
qq=ind-64*(p-1)-16*(q-1)-4*(pp-1);
xtemp = [table(p);table(q);table(pp);table(qq)];
x=[x,xtemp];
end
xi=real(x);
xq=imag(x);
ai=zeros(tx,L);
aq=zeros(tx,L);
for k=1:tx
ai(k:tx:end)=(xi(k:tx:end)+1)/2;
aq(k:tx:end)=(xq(k:tx:end)+1)/2;
end
a=zeros(2*tx*L,1);
a(1:2:end)=ai;
a(2:2:end)=aq;
[errbit,temp_ber]=biterr(A,a);
berml4=[berml4,temp_ber];
end
hold on
semilogy(EbN0,berml4,'s- g'),grid on
xlabel('EbN0(dB)');
ylabel('BER');
%ZF and QR dec
% QR 算暔
% Zhaidewei 2007.4.18
% Email:[email protected]
% qq:402731924
% 暍端初始化===============================================================
% 暍射天线数tx,接收天线数rx,暍射矩阵长度L(帧长)
tx=4;rx=4;L=10000;
Modulation='BPSK';
SNR=[0:2:20];
% 信源A
A=randint(tx*L,1);
% 经过BPSK调制的V-Blast暍射矩阵X
X=zeros(tx,L);
for k=1:tx
X(k,:)=(-1).^(A(k:tx:end)+1);
end
% 信道传输=================================================================
% 快衰落Rayleigh信道H
H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L));
% 均值为0暯差为1的高斯白噪声n
n=sqrt(1/2)*(randn(rx,L)+i*randn(rx,L));
% 未叠加噪声的接收信号R
R=zeros(rx,L);
for k=1:L
R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k);
end
%ZF========================================================================
'ZF'
berz=[];tic
% 在不同的信噪比下计算ZF接收机误比特率berz
for m=SNR
m
% 每个子信道的平均信噪比为snr的接受信号R_noised
snr=10^(m/10);
R_nois