注水算法—功率分配

news2024/9/22 13:37:54

最近一直在学习一位学姐的知乎文章,文章链接放到下面了。

无线通信多用户MISO系统的发射功率最小化问题

这里面涉及到了注水算法,为了学习的更明白,写这篇博客方便以后能快速记起,如果内容有问题的地方,欢迎在评论区讨论

注水(water filling)算法

注水(water filling)算法是一种功率分配算法,旨在为信道条件更好的用户分配更多的功率

优化问题

一个基站对应多个用户

\mathop{\max}_{p} \sum_{k=1}^{K}{log_2(1+\frac{p_k}{\sigma^2}\left| h_k \right|^2)} (1) \\ s.t\;\;\sum_{k=1}^{K}{p_k} = P_{max} \\ p_k\geq 0, \forall k \in K \\

其中p_k表示第 k 个用户分配到的功率, |ℎ_k|^2 表示第 k 个用户的信道增益。

并且所有用户的功率和不能 超过总的功率限制L({\bf{p}},\lambda) = \sum_{k=1}^{K}{log_2(1+\frac{p_k}{\sigma^2}\left| h_k \right|^2)} + \lambda(P_{max} - \sum_{k=1}^{K}{p_k}) (2) \\

\sum_{k=1}^{K}{p_k} = P_{max}( P_{max}为基站发射的总功率)

求解思路

该优化问题可以通过拉格朗日乘子法得到最优解

这里推荐两个讲的比较好的博客

优化-拉格朗日乘子法 

拉格朗日乘子法(Lagrange Multiplier Method)详解

原问题(1),可以转换为:

L({\bf{p}},\lambda) = \sum_{k=1}^{K}{log_2(1+\frac{p_k}{\sigma^2}\left| h_k \right|^2)} + \lambda(P_{max} - \sum_{k=1}^{K}{p_k}) (2)

其中 \lambda∈R 是拉格朗日乘子。然后 L({\bf{p}},\lambda) 对 p_k的导函数为:

\frac{ \partial L({\bf{p}},\lambda) }{\partial p_k} = \frac{1}{ln2}\cdot\frac{\left| h_k \right|^2/ \sigma^2}{1 + p_k\left| h_k \right|^2/\sigma^2}- \lambda = 0 \\ p_k = \frac{1}{\lambda \cdot ln2} - \frac{\sigma^2}{\left| h_k \right|^2} \\

在这里为了表示方便,令\mu = \frac{1}{\lambda \cdot ln2},因此

p_k = \mu- \frac{\sigma^2}{\left| h_k \right|^2} \\

由于 p_k≥0 这一约束条件的存在,于是有


p_k = max(\mu- \frac{\sigma^2}{\left| h_k \right|^2},0) \\
 

由于\sum_{k=1}^{K}{p_k} = P_{max},则


\mu = \frac{P_{max} + \sum_{k=1}^{K}{\sigma^2/\left| h_k \right|^2}}{K}\\
 

\mu就是注水面

结果


p_k = max(\mu- \frac{\sigma^2}{\left| h_k \right|^2},0) \\ \mu = \frac{P_{max} + \sum_{k=1}^{K}{\sigma^2/\left| h_k \right|^2}}{K}
 

用下图可以形象的表示注水算法

MATLAB代码实现

clc;
clear;

%% Simulation params
N               = 1;        % Number of transmit antennas
K               = 4;        % Number of users
P_max           = -10:5:30;  % maximum transmission power (dBm)
sigma_2         = 1;        % noise power
ch_realization  = 10;       % channel realizations

%% Generate Channles - Normalized Rayleigh fading channel
H = sqrt(1/2)*(randn(N,K,ch_realization)+1i*randn(N,K,ch_realization));

rate_water = zeros(ch_realization, length(P_max));

n = 1;
while (n < ch_realization + 1)
    n
    h = H(:,:,n);
    for j=1:length(P_max)
        p_max = db2pow(P_max(j));
        opt_p = zeros(K,1);
        sum1 = 0;
        for k=1:K
            sum1 = sum1 + sigma_2/(h(:,k)*h(:,k)');
        end
        mu = (p_max+sum1)/K;
        for k = 1:K
            opt_p(k) = max(mu - sigma_2/(h(:,k)*h(:,k)'),0);
        end
        rate_water(n,j) = rate(opt_p,h,sigma_2,K);
    end
    n = n+1;
end

plot(P_max,mean(rate_water,1),'or-','LineWidth',2)
hold on
grid on
xlabel('P_{max}(dBm)')
ylabel('Rate (bit/s/Hz)')
legend('waterFilling Method','Location','northwest')


function  r = rate(p,h,sigma_2,K)
    
sum = 0;
for k = 1:K
    sum = sum + log2(1+p(k)*(h(:,k)*h(:,k)')/sigma_2);
end
r = sum;
end

仿真结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1360996.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ref hook之useRef

一、useRef useRef函数&#xff1a; 1.一个参数&#xff1a;默认值 2.返回一个固定的对象&#xff08;对象的地址是不会变化的&#xff09;&#xff0c;{current: 值} import React, { useState } from reactexport default function App() {const inpRef React.createRef(…

深入理解Vue3中的自定义指令

Vue3是一个流行的前端框架&#xff0c;它引入了许多新特性和改进&#xff0c;其中之一是自定义指令。自定义指令是一种强大的功能&#xff0c;可以让开发者在模板中直接操作 DOM 元素。本文将深入探讨 Vue3中的自定义指令&#xff0c;包括自定义指令的基本用法、生命周期钩子函…

C#,归并排序算法(Merge Sort Algorithm)的源代码及数据可视化

归并排序 归并算法采用非常经典的分治策略&#xff0c;每次把序列分成n/2的长度&#xff0c;将问题分解成小问题&#xff0c;由复杂变简单。 因为使用了递归算法&#xff0c;不能用于大数据的排序。 核心代码&#xff1a; using System; using System.Text; using System.Co…

用友U8 Cloud smartweb2.RPC.d XML外部实体注入漏洞

产品介绍 用友U8cloud是用友推出的新一代云ERP&#xff0c;主要聚焦成长型、创新型、集团型企业&#xff0c;提供企业级云ERP整体解决方案。它包含ERP的各项应用&#xff0c;包括iUAP、财务会计、iUFO cloud、供应链与质量管理、人力资源、生产制造、管理会计、资产管理&#…

PHPStudy快速搭建网站并结合内网穿透远程访问本地站点

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点&#xff0c;测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中&#xff0c;查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

第九节HarmonyOS 常用基础组件6-progress

1、描述 进度条组件用于显示内容加载或操作处理等进度。 2、接口 Progress(options:{value:number,total?Number, type?:ProgressType}) 参数&#xff1a; 参数名 参数类型 必填 参数描述 value number 是 指定当前进度值。设置小于0的数值时置为0&#xff0c;设置…

AWTK 开源串口屏开发(5) - MCU端 SDK 用法

AWTK 开源智能串口屏&#xff0c;不但开放了串口屏端全部源码&#xff0c;还提供了MCU 端 SDK&#xff0c;大大加快 MCU 软件的开发。本介绍一下 MCU 端 SDK 在不同平台上的用法。 完整示例可以参考下面的几个例子&#xff1a; 普通嵌入式系统 mcu/stm32/hmi_app/hmi_app.c 低…

java基于ssm框架的校园闲置物品交易平台论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本校园闲置物品交易平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

30、共空间模式CSP与白化矩阵

CSP算法和PCA降维都涉及到了白化&#xff0c;那白化的目的和作用到底是啥呢&#xff1f; 矩阵白化目的&#xff1a; 对于任意一个矩阵X&#xff0c;对其求协方差&#xff0c;得到的协方差矩阵cov(X)并不一定是一个单位阵。 下面介绍几个线代矩阵的几个概念&#xff1a; 1、…

小微企业在银行信贷相关产品和机器学习建模案例_论文科研_企业调研

各银行小微企业贷款业务 互联网的时代&#xff0c;大量新信息技术的涌现和网络的无处不在&#xff0c;想要抢占这片金融天地&#xff0c;必须重视小微金融业务&#xff0c;小微企业是一直具有重大潜力的客户&#xff0c;商业银行、消金公司发展小微信贷业务可以拓宽自身客户群…

数据结构OJ实验14-哈希查找

A. DS哈希查找—线性探测再散列 题目描述 定义哈希函数为H(key) key%11&#xff0c;输入表长&#xff08;大于、等于11&#xff09;。输入关键字集合&#xff0c;用线性探测再散列构建哈希表&#xff0c;并查找给定关键字。 输入 测试次数t 每组测试数据为&#xff1a; …

无心剑七绝《未晚斋》

七绝未晚斋 倏忽半世莫伤怀 醉爱夕阳未晚斋 汉韵唐风情不尽 东华曼舞咏云台 2024年1月6日 新韵四开平韵 《未晚斋》这首诗&#xff0c;作者无心剑以其独特的笔触&#xff0c;描绘出了一幅宁静、淡雅的画面。诗中表达了对生活的热爱和对美好时光的珍惜。 首句“倏忽半世莫伤…

解决Gitlab Prometheus导致的磁盘空间不足问题

解决Gitlab Prometheus导致的磁盘空间不足问题 用docker搭建了一个gitlab服务&#xff0c;已经建立了多个项目上传&#xff0c;但是突然有一天就503了。 df -TH查看系统盘&#xff0c;发现已经Used 100%爆满了。。。 &#x1f4a1;Tips&#xff1a;/dev/vda1目录是系统盘目录。…

开源网络安全工具

开源工具代表了技术领域的一股动态力量&#xff0c;体现了创新、协作和可访问性。这些工具以透明度和社区驱动的原则开发&#xff0c;允许用户根据自己的独特需求仔细检查、修改和调整解决方案。 在网络安全领域&#xff0c;开源工具是无价的资产&#xff0c;使组织能够增强防…

input 关闭输入的自动提示 autocomplate

input 关闭输入的自动提示 autocomplate 一、问题 有些时候需要将 Input 的自动提示去掉&#xff0c;因为不去掉的话会很烦人&#xff0c;比如我有一个输入温度的输入框&#xff1a;每次点的时候都会出来这个提示框&#xff0c;很烦 二、解决方法 这个是可以解决的&#xff…

软件工程:用例图相关知识和多实例分析

目录 一、用例图相关知识 1. 基本介绍 2. 常用符号 二、用例图实例分析 1. 新闻管理系统 2. 医院病房监护系统 3. 实验上机安排系统 4. 远程网络教学系统 一、用例图相关知识 1. 基本介绍 用例图&#xff08;use case diagram&#xff09;是用户与系统交互的最简表示…

LeetCode-Z 字形变换(6)

题目描述&#xff1a; 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xff1a; P A H N A P L S I I G Y I R 之后&#xff0c;你的输出需要从左往…

Qt/C++摄像头采集/二维码解析/同时采集多路/图片传输/分辨率帧率可调/自动重连

一、前言 本地摄像头的采集可以有多种方式&#xff0c;一般本地摄像头会通过USB的方式连接&#xff0c;在嵌入式上可能大部分是CMOS之类的软带的接口&#xff0c;这些都统称本地摄像头&#xff0c;和网络摄像头最大区别就是一个是通过网络来通信&#xff0c;一个是直接本地通信…

小H靶场笔记:DC-5

DC-5 January 5, 2024 10:44 AM Tags&#xff1a;screen提权 Owner&#xff1a;只惠摸鱼 信息收集 探测靶机ip&#xff0c;大概率为192.168.199.135&#xff0c;且开放端口为80和111 扫描端口80&#xff0c;111相关服务、版本、操作系统、漏洞信息 sudo nmap -sS -O -sV 19…

如何让CHAT使用python绘制概率密度图像?

问CHAT&#xff1a;用python绘制概率密度图像 CHAT回复&#xff1a;你可以使用Python的matplotlib库和numpy库进行概率密度的绘制。 以下是一个简单的例子&#xff1a; python import numpy as np import matplotlib.pyplot as plt #随机生成1000个正态分布的数 data np.rand…