📄 waterfilling.asv
字号:
%
% Waterfilling algorithm to compute:
%
% pi = (mu - bi)^+
% sum(pi) = Pt
%
% by screen lee
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Details of the function:
% ------------------------
%
%
% INPUTS: channel gain matrix H0,overall power Pt,and noise covariance
% matrix noise_cov.
%
% OUTPUT: Power allocation pi and signal input covariance matrix.
function[capacity,input_cov]=waterfilling(H0,Pt,noise_cov)
[Q,D]=eig(noise_cov);
H=D^(-1/2)*Q'*H0; % compute effective channel gain matrix.
[U,S,V] = svd(H);
K=rank(H);
S=S(1:K,1:K);
temp_H=sum(1./(S(i,i).^2));
mu=(Pt+temp_H)./K;
for j=1:K
pi(j)=max(mu-1./(S(j,i).^2),0);
end
input_s=[diag(pi) zeros(K,(size(H,2)-K));zeros((size(H,1)-K),K) zeros((size(H,1)-K),size(H,2)-K)];
input_cov=V*input_s*V';
capacity=(1/2).*log2(det(noise_cov+H0*input_cov*H0'));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -