www.gusucode.com > ZBLAST算法仿真源码程序 > ZBLAST算法仿真源码程序/131014135Pro/vblastpic15.m
% QR 算法 % Zhaidewei 2007.4.18 % Email:zeal0502@yahoo.com.cn % 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_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,toc figure semilogy(SNR,berz,'o- b') %QR==================================================================== 'QR' berq=[];tic for m=SNR m snr=10^(m/10); R_noised=R+sqrt(1/snr)*n; x=[]; a=zeros(tx*L,1); y=zeros(tx,1); for t=1:L [q r]=qr(H(:,:,t)); rr=q'*R_noised(:,t); xtemp=zeros(tx,1); for k=[tx:-1:1] S=0; for i=(k+1):tx S=S+r(k,i)*sqrt(1/tx)*xtemp(i); end y(k)=(rr(k)-S)/r(k,k); xtemp(k)= (y(k)>=0)-(y(k)<0)+0; 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); berq=[berq,temp_ber]; end,toc hold on semilogy(SNR,berq,'o- r'),grid on title('tx=4,rx=4,Vblast QR分解检测') legend('ZF','QR'); xlabel('SNR(dB)'); ylabel('误比特率');