www.gusucode.com > ZBLAST算法仿真源码程序 > ZBLAST算法仿真源码程序/131014135Pro/vblastpic13.m
% vblast接收机 QPSK调制,ML检测 慢衰落信道 2发2收以及4发4收(帮houpk:houpk123@126.com) % Zhaidewei 2007.5.17 % Email:zeal0502@yahoo.com.cn % 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,:)=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]=minnorm(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=4;rx=4; % 信源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,:)=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=4rx=4,MMSE-SIC========================================================= % MMSE-SIC(ordered)======================================================= 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]=minnorm(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*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('误比特率'); title('Vblast ML检测') legend('tx=2,rx=2,MMSE-SIC','tx=2,rx=2,ML','tx=4,rx=4,MMSE-SIC','tx=4,rx=4,ML')