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;