%% Optimal Downlink Beamforming Using Semidefinite Optimization
% Authors: Yaswanth Sai Karthik Atluri and Mahathi jampala
%% 
% In this report we are recreating the results of the paper
% "Optimal Downlink Beamforming Using Semidefinite Optimization"
% by Mats Bengtsson and Björn Ottersten.
%% Introduction
% The utilization of antenna arrays acquires new potential outcomes in the structure of mobile communications
% systems.It is notable that the framework limit is more constrained in the downlink than in the
% uplink .However, the writing on beamforming for transmission is moderately little,
% contrasted with the very much examined theme of beamforming 
% for a receiving antenna array.
% The most straightforward transmit procedure is to utilize standard beamforming, i.e., to point the principle lobe
% of the antenna array towards the particular receiver.Knowing the channel to 
% close-by co-channel clients, 
% it is conceivable to effectively smoother the signal to the interfered clients.
% Beamforming is the utilization of antenna arrays to point the principle lobe of the transmitted signal from
% a base station in the direction of a specific receiver or the client.This takes into account the concealment 
% of the interfering signals from different clients to every particular client. In this, we project 
% various beamforming array (or vector) design issues as the optimization problems.
% In particular, we contrast two option beamforming optimization arrangements with two set up 
% arrangements in the writing.The first proposed arrangement is a joint ideal structure where each 
% base station mutually upgrades its clients' beamforming vectors. The second arrangement is a decentralized 
% heuristic (sub-optimal) approach where the base station decides every client's beamformers 
% autonomously of different clients'.
%% Definition of the Problem
% The principal arrangement is a centralized enhancement issue that limits the all out transmitted power 
% to such an extent that the receibed signal-to-interference-and-noise-ratio (SINR) at every client $i$ is over a 
% certain threshold value , i.e., $$ \textrm{SINR}_{i} \geq \gamma_i $$. The comparing non-convex optimization
% problem is as follows:
%%
% 
% <<1.PNG>>
% 
%% 
% where $\mathbf{w}_i$ and $\mathbf{R}_{i,\kappa(n)}$ are the beamforming vector and channel covariance matrix 
% (from BS $\kappa(n)$) of user $i$, respectively, and $\mathbf{w}_i^H$ denotes the Hermitian of $\mathbf{w}_i$.
% For simplicity, we use $\mathbf{R}_i$ instead of $\mathbf{R}_{i,\kappa(i)}$. The above-mentioned problem 
% provides a lower-bound i.e, in terms of minimum transmit power on all the other beamforming schemes since it
% is fully centralized and hence, the best that can be done in terms of array design for a given set of SINR 
% constraints.
% The second proposed arrangement is a decentralized issue. This is increasingly reasonable for continuous systems
% since it eliminates the intra/inter base station overhead communication required in the centralized 
% problem and hence,it is considered as a heuristic approach. Clearly, this is a sub-optimal solution 
% i.e, compared to the centralized one. The proposed solution is formulated as a non-convex optimization 
% problem in the following:

%%
% 
% <<2.PNG>>
% 
%% 
% where $\mathbf{Q}_i := \sum_{n\neq i} \mathbf{R}_{n,\kappa(i)}$. The above-mentioned problem ensures 
% that the received signal-to-noise ratio of each user is above the pre-tuned threshold value $\mu_i$ and interference 
% signals are caused by each client is below the pre-tuned threshold $\xi_i$.

%%
% Note: Ready to take care of both of the issues above utilizing the accessible optimization tools,e.g., CVX, we first 
% need to convexify them.We present the convexified adaptations of the two issues as we present 
% our source code for simulations.
%% Source for Data
% In the simulation setup, we accept that there are three clients served by a solitary base station in a given cell
% where one of the users is located at $\theta_1 = 10^{\circ}$ relative array broadside and the other two at 
% directions $\theta_{2,3} = 10^{\circ} \pm \Delta$, where the separation angle $\Delta$ varies from $5^{\circ}$ 
% to $25^{\circ}$. The transmitting antenna array is linear and has $m = 8$ elements spaced half a wavelength
% apart. Each user is surrounded by a large number of local scatterers corresponding to a spread angle of $\sigma_{\theta} = 2^{\circ}$,
% seen from the base station. In all cases, the beamformers are scaled, if possible, such that $\textrm{SINR}_i = \gamma$ for all users.
% In the cases where no such scaling is possible for a given $\gamma$, the scaling is choosen in a way that all users will 
% receive the same and as high an SINR as possible. The SINR threshold is set to $\gamma = 10$ dB for each user and,
% for simple analysis, we assume that $\mu_i \sigma_i^2 / \xi_i = 10$ dB for the decentralized problem.
%%
 clc;
 clear all; %remove all variables, globals, functions and MEX links

% Input Parameters
 d = 3; % number of users
 m = 8; % number of antenna elements
 theta = zeros(3,1); % line of sight angle
 sigma_theta = 2*pi/180; % spread angle
 R = zeros(m,m,d); % covariance matrix
 gamma = 10; % sinr threshold value 10 dB
 sigma_i_sqaured = 1; %The variance of noise

 delta = 5:25;% The delta of the position of the direction

% Output Parameters:
 P1 =zeros(1,length(delta)); % Total power transmitted  for scheme/strategy 1
 P2 =zeros(1,length(delta)); % Total power transmitted  for scheme/strategy 2
 P3 =zeros(1,length(delta)); % Total power transmitted  for scheme/strategy 3
 P4 =zeros(1,length(delta)); % Total power transmitted  for scheme/strategy 4

 SINR1 = 10*ones(d,length(delta));% signal-to-noise ratio (SINR) per user for scheme/strategy 1
 SINR2 = 10*ones(d,length(delta));% signal-to-noise ratio (SINR) per user for scheme/strategy 2
 SINR3 = 10*ones(d,length(delta));% signal-to-noise ratio (SINR) per user for scheme/strategy 3
 SINR4 = 10*ones(d,length(delta));% signal-to-noise ratio (SINR) per user for scheme/strategy 4

% Maximum signal-to-noise ratio (SINR) thershold value used for Scheme 4 in
% dB, it is prederminted by a linear model
% search code for delta < 13, otherwise its set to 10 dB
 gamma4 = [ -0.4130 0.5220 1.5183 2.5760 3.7245 5.0241 6.5628 8.4440 10 10 10 10 10 10 10 10 10 10 10 10 10];
%% 
% The $(k,l)$-th element of the channel covariance matrix for a given $(\theta, \sigma_\theta)$ is given as $$[\mathbf{R}(\theta, \sigma_{\theta})]_{kl}= e^{j \pi(k-l)sin\theta}e^{-\frac{(\pi(k-l)\sigma_{\theta}cos\theta)^{2}}{2}}.$
%%
 for ind=1:length(delta)    % looping over all values of delta
%%
% 
    theta(1) = 10; theta(2) = 10 + delta(ind); theta(3) = 10 - delta(ind); % theta value 1-3 for a given delta

    for theta_indx = 1:d % Generating channel covariance matrix
        for k = 1:m
            for l = 1:m
                R(k,l,theta_indx) = ...
                    exp( pi*(k-l)*sind(theta(theta_indx))*1i ) ...
                    * exp( -( (pi*(k-l)*sigma_theta*cosd(theta(theta_indx)) )^2 )/2 );
            end
        end
    end
%% 
% The Code mentioned above is to be used for the generation of Co variance Matrix R
%% Solutions for the Problem
% We will start looking at the execution of the accompanying plans as far the most extreme supportable SINR for every client and all the out transmitted power is guranteed for $\Delta$.
%%
% 
% # The joint optimal (centralized) design
% # The decentralized heuristic design
% # The heuristic generalized eigenvector beamformer
% # The traditional beamforming design
%% Scheme 1: The Joint Optimal Design
% This scheme corresponds to the centralized design introduced as above. To
% convexify the centralized problem, the authors introduced
% the matrices $\mathbf{W}_i = \mathbf{w}_i\mathbf{w}^H_i$, use the rule $\mathbf{w}^H_i \mathbf{R} \mathbf{w}_i = \textrm{Tr}[\mathbf{R}\mathbf{w}_i \mathbf{w}^H_i]$ 
% and relaxes the rank one constraint on $\mathbf{W}_i$. Incorporating these properties into the original (non-convex) centralized problem results in the following
% "approximated" version which we refer to as Scheme 1( joint optimal
% design)
%%
% 
% <<3.PNG>>
% 
%% 
% Since we eliminate the rank one limitation on $\mathbf{W}_i$, the issue above gives a lower-bound (and, subsequently, an estimate) 
% to the first brought centralized issue.This lower-bound is equal to the objective of the original problem, only if all the resulting $\mathbf{W}_i$'s (from Scheme 1) are of rank one.
% The SINR disparities in the first issue are used to change the uniformity constraints in Scheme 1 to keep up equivalent SINR at every client; otherwise, 
% whenever it is required it can change the balances back to disparities.
%
% The following shows the simulation code for Scheme 1.
 cvx_begin sdp quiet
    variable W(m,m,d) complex hermitian;
    expression total_power;
    total_power =   trace(W(:,:,1)) ...
        + trace(W(:,:,2)) ...
        + trace(W(:,:,3));

    minimize total_power
    subject to
    for i = 1:d
        trace( R(:,:,i)*W(:,:,i) ) - gamma*( ...
            trace( R(:,:,i)*W(:,:,1) ) + ...
            trace( R(:,:,i)*W(:,:,2) ) + ...
            trace( R(:,:,i)*W(:,:,3) ) - ...
            trace( R(:,:,i)*W(:,:,i) ) ) == gamma * sigma_i_sqaured;
        W(:,:,i) == hermitian_semidefinite(m);
    end
    cvx_end

    %output of total_power
    P1(ind) = total_power;
    cvx_clear;   % Clearing the previous CVX variables
    %% Scheme 2 :  The decentralized heuristic design
    % By applying the same mathematical tricks as in the centralized problem,
    % the decentralized problem can be recast as the following convex
    % optimization problem which we refer to as Scheme 2(decentralized
    % heuristic design)
    %
    % $$
    % \begin{array} {cl}
    % \mathbf{W}_i = \arg \min ~ & \textrm{Tr} [\mathbf{W}_i] \\
    % ~ \textrm{s.t.} & \textrm{Tr} [\mathbf{W}_i \mathbf{R}_i] \geq \mu_i \sigma^2_i,\\
    % & \textrm{Tr}[\mathbf{W}_i\mathbf{Q}_i] \leq \xi_i, \\
    % & \mathbf{W}_i^H = \mathbf{W}_i, \\
    % & \mathbf{W}_i \succeq 0, ~~ i=1,...,d. \\
    % & \end{array}
    % $$
    %
    % Note: 
    % That the system performance under Scheme 2 depends upon the values of $\mu_{i}$ and $\xi_{i}$. Since these values are not specified , we use linear search to approximate them (Recall that we keep $\mu_{i}\sigma^{2}_{i}/\xi_{i} = 10$ dB).
    %
    % The following shows the simulation code for Scheme 2.
    %%
    if (delta(ind)>=8.5)
        %Fine-tune the parameter eta
        if delta(ind) == 11
            eta = 10^3/3;
        elseif delta(ind) == 11.5
            eta = 10^3/2.5;
        elseif 9 <= delta(ind) && delta(ind) < 10
            eta = 10^3/4;
        elseif delta(ind) == 10 || delta(ind) == 10.5 || delta(ind) == 12
            eta = 10^3;
        else
            eta = 10^3/5;
        end

        mu = 10 * eta / sigma_i_sqaured; % set mu

        V = zeros(m,m,d); % incorparting a V matrix to save W's.
        total_power = 0; % incorparting the  power variable

        % Solving the decentralized problem
        for i = 1:d
            cvx_begin sdp quiet
            variable W(m,m,d) complex hermitian;
            minimize trace( W(:,:,i) )
            subject to
            trace( W(:,:,i)*R(:,:,i) ) >= mu * sigma_i_sqaured;
            trace( W(:,:,i)*( R(:,:,1)+R(:,:,2)+R(:,:,3)-R(:,:,i) ) ) <= eta;
            W(:,:,i) == hermitian_semidefinite(m);
            cvx_end
            V(:,:,i) = W(:,:,i);
            cvx_clear
        end

        % scaling weight matrices so that every user will receive an SINR of
        % exactly 10 dB
        cvx_begin sdp quiet
        variable scaler(d,1);
        subject to
        for i = 1:d
            scaler(i)*trace( R(:,:,i)*V(:,:,i) ) - gamma*( ...
                scaler(1)*trace( R(:,:,i)*V(:,:,1) ) + ...
                scaler(2)*trace( R(:,:,i)*V(:,:,2) ) + ...
                scaler(3)*trace( R(:,:,i)*V(:,:,3) ) - ...
                scaler(i)*trace( R(:,:,i)*V(:,:,i) ) ) == gamma * sigma_i_sqaured;
            scaler >= 0;
        end
        cvx_end

        % updating the weights according to their corresponding scalar
        % values
        for i = 1:d
            scaler(i)*trace( R(:,:,i)*V(:,:,i) ) / ( ...
                scaler(1)*trace( R(:,:,i)*V(:,:,1) ) + ...
                scaler(2)*trace( R(:,:,i)*V(:,:,2) ) + ...
                scaler(3)*trace( R(:,:,i)*V(:,:,3) ) - ...
                scaler(i)*trace( R(:,:,i)*V(:,:,i) ) + sigma_i_sqaured );
        end

        P2(ind) = scaler(1)*trace(V(:,:,1)) + ...
            scaler(2)*trace(V(:,:,2)) + ...
            scaler(3)*trace(V(:,:,3));
    end
    %% Scheme 3: The heuristic summed up eigenvector plan 
    % In the following two segments, we present two regular beamforming 
    % heuristic strategies to analyze the proposed beamforming schemes 1 and 2.
    %
    % The first conventional heuristic method which is based on the following selection
    %
    % $\mathbf{w}_{i} = \arg \max \frac{\mathbf{w}_{i}^{H} \mathbf{R}_{i} \mathbf{w}_{i}}{\mathbf{w}_{i}^{H} \mathbf{Q}_{i} \mathbf{w}_{i}}.$
    %
    % where
    %
    % $\mathbf{Q}_{i} = (\alpha \mathbf{I} + \sum_{n \neq i} {\mathbf{R}_{n}})$ and $\alpha = (0.1/m) \textrm{Tr}[ \sum_{n \neq i }^{d} {\mathbf{R}_{n}}].$
    % 
    % which we refer to as Scheme 3.
    % The equation above has a very intuitive meaning; the base station selects the beamforming vector for each user independently and it maximizes the ratio
    % between the received signal and interference caused to other users. The solution to the $\arg\max$ equation above is the generalized eigenvector corresponding 
    % to the matrix pair $( \mathbf{R}_{i},\mathbf{Q}_{i} )$.
    %
    % The following is the code to simulate Scheme 3. 
    %
    % Recalling the
    % $\mathbf{w}_i$'s
    % which is obtained from the equation above are scaled to ensure that the received SINR at each user is equal and as high as possible
    % These scaling factors are obtained by solving a system of linear equations which are shown in the code. For $\Delta < 8^{\circ}$, the optimal received SINR thresholds
    % (for a given $\Delta$) are determined by a linear search code; otherwise, they are set to 10 dB.
    %%
    % Selecting the approperiate value of gamma
    if (delta (ind)==5)
        gamma3 =10.^(5.5348/10);
    elseif (delta (ind)== 6)
        gamma3 = 10.^(7.1564/10);
    elseif (delta(ind)==7)
        gamma3= 10.^(8.6542/10);
    else
        gamma3 = gamma;
    end
    for i=1:d
        SINR3(i,ind) = gamma3;
    end

    w = zeros(m,d); % Beamforming of vector

    alpha = zeros(d,1); % Arbitrarily variable
    R_i = zeros(m, m, d); % Interference covariance matrix

    % Calculating the values of interference covariance matrix
    for n=1:d
        for k=1:d
            if (n~=k)
                R_i(:,:,n) = R_i(:,:,n) + R(:,:,k);
            end
        end
    end

    % Calculating the alpha of arbitrarily variable
    for i =1:d
        alpha(i,1) = 0.1*trace(R_i(:,:,i))/m;
    end

    % Calculating the beamforming weight vector 
    for i = 1:d
        Q =  alpha(i,1)*eye(8,8)+R_i(:,:,i);
        [V,D] = eig(R(:,:,i),Q);
        [row,col] = find(D == max(max(D)));
        w(:,i) = V(:,col);
    end

    % Scaling the total power transmitted to achieve the required SINR thershold
    % (gamma) value by solving a 3x3 linear system of equations
    syms x y z

    % SINR for first user
    eqn1 = x*(w(:,1)'*R(:,:,1)*w(:,1)) - gamma3*( ...
        x*( w(:,1)'*R(:,:,1)*w(:,1)) + ...
        y*( w(:,2)'*R(:,:,1)*w(:,2) ) + ...
        z*( w(:,3)'*R(:,:,1)*w(:,3) ) - ...
        x*( w(:,1)'*R(:,:,1)*w(:,1) ) ) == gamma3 * sigma_i_sqaured;

    % SINR for second user
    eqn2 = y*(w(:,2)'*R(:,:,2)*w(:,2)) - gamma3*( ...
        x*( w(:,1)'*R(:,:,2)*w(:,1)) + ...
        y*( w(:,2)'*R(:,:,2)*w(:,2) ) + ...
        z*( w(:,3)'*R(:,:,2)*w(:,3) ) - ...
        y*( w(:,2)'*R(:,:,2)*w(:,2) ) ) == gamma3 * sigma_i_sqaured;

    % SINR for third user
    eqn3 = z*(w(:,3)'*R(:,:,3)*w(:,3)) - gamma3*( ...
        x*( w(:,1)'*R(:,:,3)*w(:,1)) + ...
        y*( w(:,2)'*R(:,:,3)*w(:,2) ) + ...
        z*( w(:,3)'*R(:,:,3)*w(:,3) ) - ...
        z*( w(:,3)'*R(:,:,3)*w(:,3) ) ) == gamma3 * sigma_i_sqaured;

    [A,B] = equationsToMatrix([eqn1, eqn2, eqn3], [x,y,z]);

    scaler = double( linsolve(A,B) );% scaling factor per user to maintain the SINR thershold required

    % Obtaining the total transmitted power
    P3(ind) = real(scaler(1)*w(:,1)'*w(:,1) + ...
        scaler(2)*w(:,2)'*w(:,2) + ...
        scaler(3)*w(:,3)'*w(:,3));
   
    %% Scheme 4 : The traditional beamforming design
    % For the second conventional beamforming, we use the traditional beamforming design which is based on the following equation.
    % We refer to this as Scheme 4.
    %
    % $\mathbf{w}_{i} = \arg\max \frac{\mathbf{w}_{i}^{H} \mathbf{R}_{i} \mathbf{w}_{i}}{\mathbf{w}_{i}^{H} \mathbf{w}_{i}}.$
    %
    % The instinct behind the plan is to expand the received signal to-transmit-signal proportion.The solution to this $\arg\max$ equation is the principle eigenvector of $\mathbf{R}_i$ [3].
    % The following shows the simulation code for Scheme 4. 
    % Recall that the $\mathbf{w}_i$'s obtained from the equation above are scaled to ensure that the received SINR at each user is equal and as high as possible. The scaling factors are obtained by solving a system of linear equations.
    % For $\Delta < 13^{\circ}$, the optimal received SINR thresholds (for a given $\Delta$) are determined by a linear search code; otherwise, they are set to 10 dB.
    %%
    % w = zeros(m,d);% Beamforming vector

    % Calculating beamforming weight vector based on the eigenvector of
    % channel covariance matrix
    for i = 1:d
        [V,D] = eig( R(:,:,i) );
        [row, col] = find( D == max(max(D)) );
        w(:,i) = V(:,col);
    end

    % Scaling the total power transmitted to achieve the required SINR thershold
    % (gamma)value by solving a 3x3 linear system of equations
    syms x y z

    % SINR for first user
    eqn1 = x*(w(:,1)'*R(:,:,1)*w(:,1)) - 10^(gamma4(ind)/10)*( ...
        x*( w(:,1)'*R(:,:,1)*w(:,1)) + ...
        y*( w(:,2)'*R(:,:,1)*w(:,2) ) + ...
        z*( w(:,3)'*R(:,:,1)*w(:,3) ) - ...
        x*( w(:,1)'*R(:,:,1)*w(:,1) ) ) == 10^(gamma4(ind)/10) * sigma_i_sqaured;

    % SINR for second user
    eqn2 = y*(w(:,2)'*R(:,:,2)*w(:,2)) - 10^(gamma4(ind)/10)*( ...
        x*( w(:,1)'*R(:,:,2)*w(:,1)) + ...
        y*( w(:,2)'*R(:,:,2)*w(:,2) ) + ...
        z*( w(:,3)'*R(:,:,2)*w(:,3) ) - ...
        y*( w(:,2)'*R(:,:,2)*w(:,2) ) ) == 10^(gamma4(ind)/10) * sigma_i_sqaured;

    % SINR for third user
    eqn3 = z*(w(:,3)'*R(:,:,3)*w(:,3)) - 10^(gamma4(ind)/10)*( ...
        x*( w(:,1)'*R(:,:,3)*w(:,1)) + ...
        y*( w(:,2)'*R(:,:,3)*w(:,2) ) + ...
        z*( w(:,3)'*R(:,:,3)*w(:,3) ) - ...
        z*( w(:,3)'*R(:,:,3)*w(:,3) ) ) == 10^(gamma4(ind)/10) * sigma_i_sqaured;

    [A,B] = equationsToMatrix([eqn1, eqn2, eqn3], [x,y,z]);

    scaler = double( linsolve(A,B) );% the scaling factor per user to maintain the SINR thershold required

    % Obtaining the total power transmitted 
    P4(ind) = real(scaler(1)*w(:,1)'*w(:,1) + ...
        scaler(2)*w(:,2)'*w(:,2) + ...
        scaler(3)*w(:,3)'*w(:,3));

    for i=1:d
        SINR4(i,ind) = 10^(gamma4(ind)/10);
    end
    %%
 end
        
    %% Result Visualization
    % In the primary figure, we plot the complete transmitted power with respect to the noise level at every recipient as a component of the point division $\Delta$, where the absolute transmitted power is dictated by computing $P = \sum^d_{i=1} \|\mathbf{w}_{i}\|^2$.
    % 
    % The following code is used to generate the plot.
    %%
    hold on;
    axis([3 25 0 100]);
    plot(delta,10.*log10(P1));
    plot(delta,10.*log10(P2),'g *-');
    plot(delta,10.*log10(P3),'r --');
    plot(delta,10.*log10(P4),'k -.');
    title('Total transmitted power at each receiver w.r.t noise level')
    ylabel('Power Transmitted, dB')
    xlabel('Separation of angle, degrees')
    legend('1. Optimal','2. Decentralized heuristic','3. Generalized eigenvector','4. Traditional beamfomring');
    hold off;
 %% 
 % In the second figure, we plot the received SINR at the middle user (i.e., the one with broadside angle of $\theta = 10^{\circ}$)
 % as a function of the angle separation $\Delta$. The following is the code used to generate the figure.
 %%
 figure
 hold on;
 axis([3 25 -2 12]);
 plot(delta,SINR1(2,:));
 plot(7:25,SINR2(2,3:length(delta)),'g *-');
 plot(delta,SINR3(2,:),'r --');
 plot(delta,SINR4(2,:),'k -.');
 title('Received SINR at the middle user')
 ylabel('SINR, dB')
 xlabel('Separation of Angle, degrees')
 legend('1. Optimal','2. Decentralized heuristic','3. Generalized eigenvector','4. Traditional beamfomring', 'Location','southeast');
 hold off;
 
%% Analysis and Conclusion 
% 
% * We effectively recovered each of the outcomes 
% * In Scheme 1, in spite of the fact the outcomes give a lower-bound to the first issue since they correspond to casual form of the original issue,
%   we see that for medium to high division angles ($\Delta$) the execution of the lower-bound is practically indistinguishable for the schemes 2, 3 and 4 
%   all of which are sub-optimal. Hence, the lower-bound is tight and gives a very good approximation to the unrelaxed problem.
% * In scheme 2, the total transmitted power graph is not identical ,for $\Delta \leq 12$, since $\mu_{i}$ and $\xi_{i}$ 
%   require very precise fine-tuning and their values used are not specified there. As far as execution in terms of performance, Scheme 2 beats Scheme 3 in terms
%   of most extreme supportable SINR for low estimations of $\Delta$. In any case, the Scheme 3 is a lot quicker to execute in real-time networks 
%   since it just requires the calculation of the greatest summed up eigenvector of a couple of matrix frameworks, the SINR improvement in 
%   Scheme 2 can be viewed as an standpoint over Scheme 3.
% * In terms of performance, Scheme 3 by far appears to be the most
%   efficient solution out of the four schemes because of its practicality,
%   since it is easy to compute and it's good performance.
% * Scheme 4 exhibits a similar performance to that of Scheme 2 for $\Delta\geq 13$; for lower values of $\Delta$, Scheme 2 outperforms 
%   Scheme 4 in terms of maximum supportable SINR at each user. However, one should note that Scheme 4 is much simpler in terms of implementation
%   costs since it does not require fine-tuning of any parameters and is easy to compute as opposed to Scheme 2.
% * A major drawback of the paper under study is the lack of enough details for simulation setup and paramaters used.
%   For example, in the beginning, it was very unclear to us as how the weight vectors are scaled. Furthermore, the lack of a
%   table to show the optimal values used for $\mu_{i}$ and $\xi_{i}$ made the simulation task extremely cumbersome. 
%   We faced a similar issue when trying to fine-tune the optimal SINR threshold (to generate feasible weight vectors) 
%   for $\Delta <  8^{\circ}$ and $\Delta < 13^{\circ}$ for schemes 3 and 4, respectively. To obtain such optimal thresholds, we had to use a
%   linear search with a step size of 0.001 dB which again made the simulation task unnecessarily time-consuming.    
%     
%
%% References
% 
% #  Mats Bengtsson and Björn Ottersten. Optimal Downlink Beamforming Using Semidefinite Optimization.
%    Published in Annual Allerton Conference on Communication, Control, and Computing, pp. 987-996, 1999.
% #  Jason Goldberg and Javier R. Fonollosa. Downlink beamforming for cellular mobile communications. 
%    In Proceedings of VTC’97, volume 2, pages 632–636, 1997.
% #  Henry Cox, Robert M. Zeskind, and Mark M. Owen. Robust adaptive beamforming.
%    IEEE Transactions on Acoustics, Speech, and Signal Processing, 35(10):1365–1375, October 1987.
% #  T. Asté, P. Forster, L. Féty, and S. Mayrargue. Downlink beamforming avoiding DOA
%    estimation for cellular mobile communications. In Proc. IEEE ICASSP 98, volume 6,
%    pages 3313–3316, 1997. 
% #  Hervé Lebret and Stephen Boyd. Antenna array pattern synthesis via convex optimization.
%    IEEE Transactions on Signal Processing, 45(3):526–532, March 1997.
% #  Eugene Visotsky and Upamanyu Madhow. Optimum beamforming using transmit antenna
%    arrays. In Proceedings of VTC’99, volume 1, pages 851–856, Houston, Texas,
%    USA, May 1999. IEEE.    
    
    







