# How to speed up this function?

1 view (last 30 days)
Jonathan Mayers on 26 May 2016
Answered: Jonathan Mayers on 26 May 2016
Hi all,
I am calculating a value Gamma as shown in the image below. I have implemented this calculation as a for-loop and I suspect it could be done without using a for-loop and be faster. Every h term is the jth column of an NxK matrix and Pj is the jth column of KxK diagonal matrix P. What is the fastest way to calculate this value?
function [ GAMMA ] = gamma_dnc( P,Hh,Ht,K )
%GAMMA_DNC Calculates the component GAMMA in the DNC
% beamforming matrix V.
% Running total
total = 0;
for j = 1:K
p = P(j,j); % Select jth column of P
ht = Ht(:,j); % Select jth column of Ht
hh = Hh(:,j); % Select jth column of Hh
% Perform summation
h1 = ht*(hh');
h2 = hh*(ht');
h3 = ht*(ht');
h4 = h1 + h2 + h3;
total = total + p*h4;
end
GAMMA = mean2(total);
end
James Tursa on 26 May 2016
What are the dimensions of the variables? And which variables are complex?

Jonathan Mayers on 26 May 2016
Matrix P is a real-valued matrix and the H matrices are complex-valued matrices. I have found a way to do it without looping.
function [ GAMMA ] = gamma_dnc( P,Hh,Ht )
%GAMMA_DNC Calculates the component GAMMA in the DNC
% beamforming matrix V.
% Store transposes of matrices to reduce
Hh_tp = Hh';
Ht_tp = Ht';
% Compute intermediate products
H1 = Ht*Hh_tp;
H2 = Hh*Ht_tp;
H3 = Ht*Ht_tp;
H4 = H1 + H2 + H3;
H5 = P(1,1)*H4; % All users transmit with equal power
T = sum(H5); % Find sum of all columns
GAMMA = mean(T)/10; % Have to divide by 10 for some reason
end