www.pudn.com > space-timecodingBrankaVuceticJinhongYuan.rar > ltable.m, change:2006-12-31,size:4734b


function [dlt,slt,md]=ltable(option,RxDiv) 
 
 
switch option 
    case '4_State_4PSK' 
        md=4; 
        s=4; 
    case '8_State_4PSK' 
        md=4; 
        s=8; 
    case '16_State_4PSK' 
        md=4; 
        s=16; 
    case '32_State_4PSK' 
        md=4; 
        s=32; 
    case '8_State_8PSK' 
        md=8; 
        s=8; 
    case '16_State_8PSK' 
        md=8; 
        s=16; 
    case '32_State_8PSK' 
        md=8; 
        s=32; 
    case 'DelayDiv_8PSK' 
        md=8; 
        s=8; 
    case '16_State_16qam' 
        md=16; 
        s=16; 
    case 'DelayDiv_16qam' 
        md=16; 
        s=16; 
    otherwise 
        disp('Wrong option !!'); 
end 
         
% State matrix generator 
base = reshape(1:s,md,s/md)'; 
slt = repmat(base,md,1); 
load stc_bc16.txt; 
 
% Data matrix generator 
for j = 1:md 
	l = j - 1; 
	 
	ak = bitget(l,1); 
	bk = bitget(l,2); 
	dk = bitget(l,3); 
	ek = bitget(l,4); 
	 
	switch md 
	% 4 PSK 
	case 4   % NOTE: trace criterion option implemented as an example 
		for i = 1:s 
			k = i - 1; 
			 
			ak_1 = bitget(k,1); 
			bk_1 = bitget(k,2); 
			ak_2 = bitget(k,3); 
			bk_2 = bitget(k,4); 
			ak_3 = bitget(k,5); 
			bk_3 = bitget(k,6); 
			 
			switch s 
			case 4 %4state_4psk 
                if RxDiv~=2 
    				dlt(i,j,1) = mod(2 * bk_1 + ak_1,md);%rank & determinant croteria 
				    dlt(i,j,2) = mod(2 * bk + ak,md); 
                else 
%                    dlt(i,j,1) = mod(bk_1+2*ak_1+2*ak,md);%trace criterion 
%                    dlt(i,j,2) = mod(2*bk_1+2*bk+3*ak,md); 
    				dlt(i,j,1) = mod(2 * bk_1 + ak_1,md);%rank & determinant croteria 
				    dlt(i,j,2) = mod(2 * bk + ak,md); 
                     
 
 
                end 
			case 8 %8state_4psk 
                if RxDiv~=2 
				    dlt(i,j,1) = mod(2 * ak_2 + 2 * bk_1 + ak_1,md);%rank & determinant criteria 
    				dlt(i,j,2) = mod(2 * ak_2 + 2 * bk + ak,md); 
                else 
                    dlt(i,j,1)= mod(2*bk_1+2*bk+ak_1+2*ak,md);   %trace criterion 
                    dlt(i,j,2)= mod(bk_1+2*ak_2+2*bk+2*ak_1,md); 
                     
                end 
			case 16 %16state_4psk 
                if RxDiv~=2 
				    dlt(i,j,1) = mod(2 * ak_2 + 2 * bk_1 + ak_1,md);%rank & determinant criteria 
				    dlt(i,j,2) = mod(2 * bk_2 + 2 * ak_1 + 2 * bk + ak,md);     
                else 
                    dlt(i,j,1)=mod(2*bk_3+2*ak_3+3*bk_2+3*bk_1+2*ak_1+2*ak,md); %trace criterion 
                    dlt(i,j,2)=mod(2*bk_3+3*bk_2+bk_1+2*ak_1+2*bk+2*ak,md); 
                end 
			case 32 %32state_4psk 
				dlt(i,j,1) = mod(2 * ak_3 + 3 * bk_2 + 2 * ak_2 + 2 * bk_1 +...% rank & determinant criteria 
					ak_1,md); 
				dlt(i,j,2) = mod(2 * ak_3 + 3 * bk_2 + 2 * bk_1 + ak_1 + 2 *... 
          bk + ak,md); 
			end 
		end 
	 
	% 8 PSK 
	case 8 % 'rank & determinant' criteria only 
		for i = 1:s 
			k = i - 1; 
			 
			ak_1 = bitget(k,1); 
			bk_1 = bitget(k,2); 
			dk_1 = bitget(k,3); 
			ak_2 = bitget(k,4); 
			bk_2 = bitget(k,5); 
			 
			switch s 
			case 8 
                switch option 
                    case '8_State_8PSK' 
					    dlt(i,j,1) = mod(4 * dk_1 + 2 * bk_1 + 5 * ak_1,md); 
					    dlt(i,j,2) = mod(4 * dk + 2 * bk + ak,md); 
                    case 'DelayDiv_8PSK' 
       		            dlt(i,j,1)=mod(4 * dk_1 + 2 * bk_1 + ak_1,md); 
				    	dlt(i,j,2)=mod(4 * dk + 2 * bk + ak,md); 
                end 
			case 16 %16state_8psk 
				dlt(i,j,1) = mod(ak_2 + 4 * dk_1 + 2 * bk_1 + 5 * ak_1,md); 
				dlt(i,j,2) = mod(5 * ak_2 + 4 * dk_1 + 2 * bk_1 + ak_1 + 4 *... 
                dk + 2 * bk + ak,md); 
			case 32 %32state_8psk 
				dlt(i,j,1) = mod(2 * bk_2 + 3 * ak_2 + 4 * dk_1 + 2 * bk_1 +... 
                5 *	ak_1,md); 
				dlt(i,j,2) = mod(2 * bk_2 + 7 * ak_2 + 4 * dk_1 + 2 * bk_1 +... 
					ak_1 + 4 * dk + 2 * bk + ak,md); 
			end 
		end 
	 
	% 16 QAM 
	case 16% 'rank & determinant' criteria only 
		for i = 1:s 
			k = i - 1; 
			 
			ak_1 = bitget(k,1); 
			bk_1 = bitget(k,2); 
			dk_1 = bitget(k,3); 
			ek_1 = bitget(k,4); 
			 
			switch s 
			case 16 
            switch option     
                case '16_State_16qam' 
                    % Tarokh's paper "Space-Time Codes for High Data Rate Wireless Communication: 
                    %Performance Criterion and Code Construction, IEEE Transactions on 
                    %Inf Theory, vol. 44, No 2, March 1998 ->Fig 19 
                    dlt(i,j,1) = stc_bc16(k + 1,1);  
                    dlt(i,j,2) = stc_bc16(k + 1,2) - i + j; 
 
                case 'DelayDiv_16qam' 
                    dlt(i,j,1) = mod(8 * ek_1 + 4 * dk_1 + 2 * bk_1 + ak_1,md); 
					dlt(i,j,2) = mod(8 * ek + 4 * dk + 2 * bk + ak,md); 
				end 
			end 
		end 
	end 
end