注水算法matlab函数:
function[shanonCapacity powerAllocated] = ofdmwaterfilling(nSubChannel,totalPower,channelStateInformation,bandwidth,noiseDensity);
%为了使频率选择性信道的容量最大化,注水算法被使用,OFDM调制把总带宽分配成了
%n个子信道,如果正确的循环前缀被添加到每个OFDM模型的末端,那么大部分的子信道
%都能让其经历平衰落。注水算法就实现了把更多的功率分配给有好状态的信道,不给信道状态不好的(有深度衰落)的信道分配功率。
%参数设置
nSubChannel = 16;
totalPower = 1e-5;
channelStateInformation = random('rayleigh',1/0.6552,1,nSubChannel); %瑞利分布是一个均值为0,方差为σ^2的平稳窄带高斯过程
bandwidth = 1e6;
noiseDensity = 1e-11; %噪声密度
subchannelNoise=noiseDensity*bandwidth/nSubChannel;
carrierToNoiseRatio =channelStateInformation.^2/subchannelNoise;
initPowerAllo=(totalPower + sum(1./carrierToNoiseRatio))/nSubChannel-1./carrierToNoiseRatio;
%在这个阶段,公式一的最优化结果就会导致一些子信道被分配了少功率,
%在接下来的阶段,这些信道会被消除