gusucode.com > m4k20功率分配图 mimo功率优化,OFDM典型仿真程序,贪婪算法仿真程序 > code/mimo功率优化/waterfill.m

    function [lambda] = waterfill(gamma, sigma)
  
%------------------------------------------------------------
% Function to calculate the waterfilling power levels.
%
% Author: Mai Vu
% Date: 11/30/2003
% Modified: 04/17/2004
%------------------------------------------------------------

%------------------------------------------------------------
% INPUTS
%   gamma: SNR (linear, not dB)
%   sigma: channel eigenvalues
%
% OUTPUTS
%  lambda: waterfilling power levels
%
%------------------------------------------------------------

  [sigma_valid, indices] = sort(-sigma);
  sigma_valid = -sigma_valid;

  while (1)
    N = length(sigma_valid);
    mu = (1 + sum(1./sigma_valid)/gamma)/N;
    lambda_temp = mu - 1./sigma_valid/gamma;
    if min(lambda_temp) < 0
      sigma_valid = sigma_valid(1:N-1);
    else
      break;
    end
  end
  
  lambda_temp = [lambda_temp; zeros(length(sigma)-length(lambda_temp), 1)];
  lambda(indices) = lambda_temp;
  lambda = lambda';  % make into a column vector