📄 iterative_waterfill.m
字号:
%Sum Power Iterative Waterfilling Algorithm%Authors: Nihar Jindal, Wonjong Rhee, Sriram Vishwanath, Syed Jafar, Andrea%Goldsmith%Date: 6/20/05function [capacity, Covariances] = iterative_waterfill(H, P, iterations);%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%P: power in linear units%iterations: # of iterations performed%Function Outputs%capacity: Sum rate capacity in bps/Hz%Covariances: triply indexed matrices containing the capacity achieving% UPLINK covariance matrices% Covariances(:,:,k) is the (N x N) 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);%Initialize covariances to zeroCovariances = zeros(N,N,K); for wf_iterations = 1:iterations sum_int = eye(M); for k = 1:K sum_int = sum_int + H(:,:,k) * Covariances(:,:,k) * H(:,:,k)'; end; %Generate effective channels of each user (using covariances from the %previous step) for k = 1:K H_eff(:,:,k) = (sum_int - H(:,:,k) * Covariances(:,:,k) * H(:,:,k)')^(-0.5) * H(:,:,k); end; %Perform waterfilling across effective channels [temp, Ex] = waterfill_block(H_eff, P); %Update covariances of all users %Use original algorithm for first 5 iterations to speed up convergence if (wf_iterations <= 5) %Updated covariances set equal to new covariances for k = 1:K Covariances(:,:,k) = Ex(:,:,k); end; else %Update covariances with mixture of old and new covariances for k = 1:K Covariances(:,:,k) = ((K-1)/K)*Covariances(:,:,k) + (1/K) * Ex(:,:,k); end; end;end; %Compute final sum ratesum_int = eye(M);for k = 1:K sum_int = sum_int + H(:,:,k) * Covariances(:,:,k) * H(:,:,k)';end;capacity = real(log2(det(sum_int)));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -