www.gusucode.com > ZBLAST算法仿真源码程序 > ZBLAST算法仿真源码程序/131014135Pro/vblastpic10.m
% vblastpic10.m %比较ZF-PIC和ZF-OSIC的性能 tx=2;rx=2;L=30000;Modulation='BPSK'; SNR=[20:2:30]; A=randint(tx*L,1); X=zeros(tx,L); for k=1:tx X(k,:)=(-1).^(A(k:tx:end)+1); end H=sqrt(1/2)*(randn(rx,tx,L)+i*randn(rx,tx,L)); n=sqrt(1/2)*(randn(rx,L)+i*(randn(rx,L))); R=zeros(rx,L); for k=1:L R(:,k)=sqrt(1/tx)*H(:,:,k)*X(:,k); end %ZF-PIC=================================================================== berzp1=[]; berzp2=[]; for m=SNR m snr=10^(m/10); R_noised=R+sqrt(1/snr)*n; x=[]; a=zeros(tx*L,1); %第一遍检测 for t=1:L r=R_noised(:,t); G=pinv(H(:,:,t)); y=G*r; xtemp=(y>=0)-(y<0)+0; x=[x,xtemp]; end for k=1:tx a(k:tx:end)=(x(k:tx:end)+1)/2; end [errbit,temp_ber]=biterr(A,a); berzp1=[berzp1,temp_ber]; %第二遍PIC检测 xx=[]; for t=1:L r=R_noised(:,t); G=pinv(H(:,:,t)); for k=1:tx y(k)=H(:,k,t)'*(r-sqrt(1/tx)*H(:,:,t)*x(:,t)+sqrt(1/tx)*x(k,t)*H(:,k,t)); end xxtemp=(y>=0)-(y<0)+0; xx=[xx xxtemp]; end for k=1:tx a(k:tx:end)=(xx(k:tx:end)+1)/2; end [errbit,temp_ber]=biterr(A,a); berzp2=[berzp2,temp_ber]; end %ZF-SIC================================================================= berzs=[]; for m=SNR m snr=10^(m/10); R_noised=R+sqrt(1/snr)*n; x=[]; a=zeros(tx*L,1); for t=1:L r=R_noised(:,t); HH=H(:,:,t); G=pinv(HH); % S表示一个时隙内还未检测的符号的序号的集合 S=[1:tx]; xtemp=zeros(tx,1); % 逐发射天线进行检测 for k=1:tx % G的在序号集合S的非零元素集合内范数最小的行是wki,它是G的第ki行 [wki,ki]=minnorm(G,S); % 已经检测过的序号清零 S(ki)=0; % 判决统计量y y=wki*r; % BPSK判决 xtemp(ki)=1*(y>=0)-1*(y<0)+0; % SIC串行干扰抵消 r=r-sqrt(1/tx)*xtemp(ki)*H(:,ki,t); % 将已经检测的信号对应的信道矩阵的列清零 HH(:,ki)=zeros(rx,1); G=pinv(HH); end x=[x,xtemp]; end for k=1:tx a(k:tx:end)=(x(k:tx:end)+1)/2; end [errbit,temp_ber]=biterr(A,a); berzs=[berzs,temp_ber]; end %========================================================== figure semilogy(SNR,berzp1,'o- b'),hold on semilogy(SNR,berzp2,'s- r') semilogy(SNR,berzs,'p- g'),grid on legend('ZF','ZF-PIC','ZF-SIC') xlabel('SNR(dB)'); ylabel('误比特率'); title('tx=2,rx=2,ZF-PIC,ZF-OSIC检测性能')