Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
66 lines
1.8 KiB
Matlab
Executable File
66 lines
1.8 KiB
Matlab
Executable File
%MAC to BC Transformation
|
|
%Authors: Nihar Jindal, Wonjong Rhee, Sriram Vishwanath, Syed Jafar, Andrea
|
|
%Goldsmith
|
|
%Date: 6/20/05
|
|
|
|
function Downlink = MAC_to_BC(H, Uplink);
|
|
|
|
%assumes users decoded in increasing order for uplink: 1,2,...,K,
|
|
%opposite encoding order for downlink (K, K-1,..., 1)
|
|
|
|
%Function Inputs
|
|
%H: triply indexed UPLINK channel
|
|
% H(:,:,k) refers to the UPLINK channel of the kth receiver
|
|
% H(:,:,k) is an (M x N) matrix
|
|
%Uplink: triply indexed matrices containing the UPLINK covariance matrices
|
|
% Uplink(:,:,k) is the (N x N) covariance of user k
|
|
|
|
%Function Outputs
|
|
%Downlink: triply indexed matrices containing the DOWNLINK covariance matrices
|
|
% Downlink(:,:,k) is the (M x M) covariance of user k
|
|
|
|
%Other Variables
|
|
%M: # of transmit antennas in downlink channel
|
|
%N: # of receive antennas in downlink channel
|
|
%K: # of receivers
|
|
|
|
%Determine # of antennas, users
|
|
[M,N,K] = size(H);
|
|
|
|
for k = 1:K
|
|
|
|
%Compute A_i (equation 34)
|
|
temp_sum = eye(M,M);
|
|
for l = (k+1):K
|
|
temp_sum = temp_sum + H(:,:,l) * Uplink(:,:,l) * H(:,:,l)';
|
|
end;
|
|
B(:,:,k) = temp_sum;
|
|
|
|
%Compute B_i (equation 34)
|
|
temp_sum = eye(N,N);
|
|
for l = 1:(k-1)
|
|
temp_sum = temp_sum + H(:,:,k)' * Downlink(:,:,l) * H(:,:,k);
|
|
end;
|
|
A(:,:,k) = temp_sum;
|
|
|
|
%take SVD of effective channel
|
|
Hk_eff = B(:,:,k)^(-0.5) * H(:,:,k) * A(:,:,k)^(-0.5);
|
|
[r,t] = size(Hk_eff);
|
|
if (t > r)
|
|
[F,D,G] = svd(Hk_eff',0);
|
|
Fk = G;
|
|
Gk = F;
|
|
else
|
|
[Fk,D,Gk] = svd(Hk_eff,0);
|
|
end;
|
|
|
|
%Compute downlink covariance (equation 35)
|
|
Downlink(:,:,k) = B(:,:,k)^(-0.5) * Fk * Gk' * A(:,:,k)^(0.5) * Uplink(:,:,k) * A(:,:,k)^(0.5) * Gk * Fk' * B(:,:,k)^(-0.5);
|
|
|
|
end;
|
|
|
|
|
|
|
|
|
|
|