gusucode.com > 多天线系统的各种信号检测算法matlab源码程序 > MIMO_detection/zero_joint_CS.m
function [MLD_det_bit]=zero_joint_CS(y,H_ori,Tx,Modu_bit,SNR) %considering Tx=4, and 64QAM SNR=10^(SNR/10); Noise_power=1/SNR; OneBySqrt42=0.1543033499; if Tx==4 & Modu_bit==6 tmp=[-7,-5,-3,-1,1,3,5,7]; cand=zeros(64,1); for a=1:8 for b=1:8 index=b+(a-1)*8; cand(index)=tmp(a)+j*tmp(b); cand(index)=cand(index)*OneBySqrt42; end end %sort P=inv(H_ori'*H_ori+Noise_power*eye(Tx)); SINR=1./real(diag(P)); sort_SINR=sort(SINR); %sort_SINR(Tx) is the largest, sort_SINR(Tx-1) is the second largest %find the original position in the SINR position=zeros(Tx,1); for tx=1:Tx position(tx)=findPosition(SINR,sort_SINR(tx),Tx); end bak_position=zeros(Tx,1); %position(Tx)<-> 4, %position(Tx-1)<->3,position(Tx-2)<->2,position(Tx-3)<->1 H_bak=H_ori; bak_position=zeros(Tx,1); for col_index=Tx:-1:1 H(:,col_index)=H_bak(:,position(col_index)); bak_position(col_index)=position(col_index); end % H(:,Tx)=H_bak(:,position(Tx)); bak_position(4)=position(Tx);%bak_position(3)=position(Tx) the largest one , original index is position(Tx) % H(:,Tx-1)=H_bak(:,position(Tx-1));bak_position(3)=position(Tx-1); % bak_position(4)=position(Tx-1) original index is position(Tx-1) % H(:,Tx-2)=H_bak(:,position(Tx-2));bak_position(2)=position(Tx-2); %bak_position(2)=position(Tx-2) % H(:,Tx-3)=H_bak(:,position(Tx-3));bak_position(1)=position(Tx-3); %bak_position(1)=position(Tx-3) z=y; for col_num=Tx:-1:1 H_sub=H(:,1:col_num); Filter_matrix=inv(H_sub'*H_sub+Noise_power*eye(col_num))*H_sub';%2*4 s_estimated=Filter_matrix(col_num,:)*z; MLD_det_bit(bak_position(col_num),:)=component_wise(s_estimated,Modu_bit); s_index_optimal=sort_optimal_index(s_estimated,cand,64); z=z-H(:,col_num)*cand(s_index_optimal); end end %if Tx==4 return;