www.gusucode.com > ZBLAST算法仿真源码程序 > ZBLAST算法仿真源码程序/131014135Pro/vblastpic2.m
% 论文仿真原型程序,仿真四种(ZF,ZF-SIC,MMSE,MMSE-SIC) Vblast接收机的检测性能,绘制误比特率~信噪比曲线。 % Zhaidewei 2007.4.18 (2007-5-20修正版) % Email:zeal0502@yahoo.com.cn % qq:402731924 % 发端初始化=============================================================== % 发射天线数tx,接收天线数rx,发射矩阵长度L(帧长) tx=4;rx=4;L=4000; Modulation='BPSK'; SNR=[0:2:20]; A=randint(tx*L,1); 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======================================================================== disp('berz'); berz=[]; % 在不同的信噪比下计算ZF接收机误比特率berz for m=SNR m % 每个子信道的平均信噪比为snr的接受信号R_noised snr=10^(m/10); R_noised=R+sqrt(1/snr)*n; x=[]; a=zeros(tx*L,1); % 逐时隙对接收符号矢量进行检测,合并得到一帧发射矩阵X的估计x for t=1:L r=R_noised(:,t); % 迫零矩阵G G=pinv(H(:,:,t)); y=G*r; xtemp=(y>=0)-(y<0)+0; x=[x,xtemp]; end % 从x求A的估计a for k=1:tx a(k:tx:end)=(x(k:tx:end)+1)/2; end % 比较A和a计算错值率temp_ber [errbit,temp_ber]=biterr(A,a); berz=[berz,temp_ber]; end figure semilogy(SNR,berz,'o- b') % ZF-SIC(ordered)========================================================== disp('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 [wki,ki]=minnorm(G); y=wki*r; xtemp(S(ki))=1*(y>=0)-1*(y<0)+0; r=r-sqrt(1/tx)*xtemp(S(ki))*H(:,S(ki),t); HH(:,ki)=[]; S(ki)=[]; 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 hold on semilogy(SNR,berzs,'o- g') % MMSE==================================================================== disp('MMSE') berm=[]; berpl={}; 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); xtemp=zeros(tx,1); w=inv(HH'*HH+(1/snr)*eye(tx))*HH'; y=w*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); berm=[berm,temp_ber]; end semilogy(SNR,berm,'*- r') % MMSE-SIC(ordered)======================================================= disp('MMSE-SIC') berms=[]; 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=[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))=(y>=0)-(y<0)+0; r=r-sqrt(1/tx)*xtemp(S(ki))*H(:,S(ki),t); HH(:,ki)=[]; S(ki)=[]; 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); berms=[berms,temp_ber]; end semilogy(SNR,berms,'s- m'),grid on %理论Rayleigh============================================================ B=30000;Ts=1/24300;SNR+10*log10(Ts*B); ebn0=10.^((SNR+10*log10(Ts*B))/10); ber_bpsk_rayleigh=1/2*(1-sqrt(ebn0./(1+ebn0))); hold on,semilogy(SNR,ber_bpsk_rayleigh,'x- c') %标记==================================================================== legend('ZF','ZF-SIC','MMSE','MMSE-SIC','Rayleigh fading'); xlabel('SNR(dB)'); ylabel('误比特率'); title('tx=4,rx=4 时ZF,ZF-SIC,MMSE,MMSE-SIC接收机性能比较')