waterfill.m

来自「可以运行的m4k20功率分配图」· M 代码 · 共 38 行

M
38
字号
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

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?