基于状态空间模型的预测控制

1、状态空间模型

线性离散时间系统的状态空间模型如下:
x ( k + 1 ) = A x ( k ) + B u u ( k ) + B d d ( k ) y c ( k ) = C c x ( k ) (1) \begin{aligned} &x(k+1)=Ax(k)+B_uu(k)+B_dd(k)\\[1ex] &y_c(k)=C_cx(k)\tag{1} \end{aligned} x(k+1)=Ax(k)+Buu(k)+Bdd(k)yc(k)=Ccx(k)(1)

其中 x ( k ) ∈ R n x x(k)\in\cal{R}^{n_x} x(k)Rnx 是状态变量; u ( k ) ∈ R n u u(k)\in\cal{R}^{n_u} u(k)Rnu 是控制输入变量; y c ( k ) ∈ R n c y_c(k)\in\cal{R}^{n_c} yc(k)Rnc 是被控输出变量; d ( k ) ∈ R n d d(k)\in\cal{R}^{n_d} d(k)Rnd 是可以测量的外部干扰变量。

上面的离散时间模型与连续时间模型
x ˙ = A c x ( t ) + B c u u ( t ) + B c d d ( t ) y c ( t ) = C c x ( t ) (2) \begin{aligned} &\dot{x}=A_cx(t)+B_{cu}u(t)+B_{cd}d(t)\\[1ex] &y_c(t)=C_cx(t)\tag{2} \end{aligned} x˙=Acx(t)+Bcuu(t)+Bcdd(t)yc(t)=Ccx(t)(2)
之间有如下的转化关系:
A = e A c T s B u = ∫ 0 T s e A c τ d τ ⋅ B c u B d = ∫ 0 T s e A c τ d τ ⋅ B c d (3) \begin{aligned} A&=e^{A_cT_s}\\[1ex] B_u&=\int_0^{T_s}e^{A_c\tau}\mathrm{d}\tau\cdot B_{cu}\\[1ex] B_d&=\int_0^{T_s}e^{A_c\tau}\mathrm{d}\tau\cdot B_{cd} \end{aligned}\tag{3} ABuBd=eAcTs=0TseAcτdτBcu=0TseAcτdτBcd(3)
其中 T s T_s Ts 是系统的采样时间。

2、预测方程

将模型(1)改写成增量模型
Δ x ( k + 1 ) = A Δ x ( k ) + B u Δ u ( k ) + B d Δ d ( k ) y c ( k ) = C c Δ x ( k ) + y c ( k − 1 ) (4) \begin{aligned} \Delta x(k+1)&=A\Delta x(k) + B_u\Delta u(k) + B_d\Delta d(k)\\[1ex] y_c(k)&=C_c\Delta x(k)+y_c(k-1)\tag{4} \end{aligned} Δx(k+1)yc(k)=AΔx(k)+BuΔu(k)+BdΔd(k)=CcΔx(k)+yc(k1)(4)

其中
Δ x ( k ) = x ( k ) − x ( k − 1 ) Δ u ( k ) = u ( k ) − u ( k − 1 ) Δ d ( k ) = d ( k ) − d ( k − 1 ) \begin{aligned} \Delta x(k)=x(k)-x(k-1)\\[1ex] \Delta u(k)=u(k)-u(k-1)\\[1ex] \Delta d(k)=d(k)-d(k-1)\\[1ex] \end{aligned} Δx(k)=x(k)x(k1)Δu(k)=u(k)u(k1)Δd(k)=d(k)d(k1)

首先以最新测量值为初始条件,基于模型(4)预测系统未来的动态。为此,设定预测时域为 p p p,控制时域为 m m m m ≤ p m\leq p mp。为了推导系统的预测方程,我们假设:

  1. 控制时域之外,控制量不变,即 Δ u ( k + i ) = 0 , i = m , m + 1 , ⋯ , p − 1 \Delta u(k+i)=0,\quad i=m,m+1,\cdots,p-1 Δu(k+i)=0,i=m,m+1,,p1
    该假设是因为控制时域有可能小于预测时域,而预测系统未来动态需要在整个预测时域的控制输入。
  2. 可测干扰在 k k k 时刻之后不变,即 Δ d ( k + i ) = 0 , i = 1 , 2 , ⋯ , p − 1 \Delta d(k+i)=0,\quad i=1,2,\cdots,p-1 Δd(k+i)=0,i=1,2,,p1
    该假设是因为在当前时刻( k k k 时刻),我们还不知道干扰的未来取值。

在当前时刻 k k k,测量值为 x ( k ) x(k) x(k),可以计算 Δ x ( k ) = x ( k ) − x ( k − 1 ) \Delta x(k)=x(k)-x(k-1) Δx(k)=x(k)x(k1),这个将作为预测系统未来动态的起点。由(4)可以预测 k + 1 k+1 k+1 k + 3 k+3 k+3 时刻的状态(实际上是状态增量,简单起见称为状态)如下:
Δ x ( k + 1 ∣ k ) = A Δ x ( k ) + B u Δ u ( k ) + B d Δ d ( k ) Δ x ( k + 2 ∣ k ) = A Δ x ( k + 1 ∣ k ) + B u Δ u ( k + 1 ) + B d Δ d ( k + 1 ) = A 2 Δ x ( k ) + A B u Δ u ( k ) + B u Δ u ( k + 1 ) + A B d Δ d ( k ) Δ x ( k + 3 ∣ k ) = A Δ x ( k + 2 ∣ k ) + B u Δ u ( k + 2 ) + B d Δ d ( k + 2 ) = A 3 Δ x ( k ) + A 2 B u Δ u ( k ) + A B u Δ u ( k + 1 ) + B u Δ u ( k + 2 ) + A 2 B d Δ d ( k ) (5) \begin{aligned} \Delta x(k+1|k)&=A\Delta x(k) + B_u\Delta u(k) + B_d\Delta d(k)\\[1ex] \Delta x(k+2|k)&=A\Delta x(k+1|k) + B_u\Delta u(k+1) + B_d\Delta d(k+1)\\[1ex] &=A^2\Delta x(k) + AB_u\Delta u(k) + B_u\Delta u(k+1) + AB_d\Delta d(k)\\[1ex] \Delta x(k+3|k)&=A\Delta x(k+2|k) + B_u\Delta u(k+2) + B_d\Delta d(k+2)\\[1ex] &=A^3\Delta x(k) + A^2B_u\Delta u(k) + AB_u\Delta u(k+1) + B_u\Delta u(k+2) + A^2B_d\Delta d(k)\tag{5} \end{aligned} Δx(k+1∣k)Δx(k+2∣k)Δx(k+3∣k)=AΔx(k)+BuΔu(k)+BdΔd(k)=AΔx(k+1∣k)+BuΔu(k+1)+BdΔd(k+1)=A2Δx(k)+ABuΔu(k)+BuΔu(k+1)+ABdΔd(k)=AΔx(k+2∣k)+BuΔu(k+2)+BdΔd(k+2)=A3Δx(k)+A2BuΔu(k)+ABuΔu(k+1)+BuΔu(k+2)+A2BdΔd(k)(5)

式中, k + 1 ∣ k k+1|k k+1∣k 表示 k k k 时刻对 k + 1 k+1 k+1 时刻的预测;符号 ∣ | 后面的 k k k 表示当前时刻为 k k k。进而,可以预测 k + m k+m k+m k + p k+p k+p 时刻的状态
Δ x ( k + m ∣ k ) = A Δ x ( k + m − 1 ∣ k ) + B u Δ u ( k + m − 1 ) + B d Δ d ( k + m − 1 ) = A m Δ x ( k ) + A m − 1 B u Δ u ( k ) + A m − 2 B u Δ u ( k + 1 ) + ⋯ + B u Δ u ( k + m − 1 ) + A m − 1 B d Δ d ( k ) ⋮ Δ x ( k + p ∣ k ) = A Δ x ( k + p − 1 ∣ k ) + B u Δ u ( k + p − 1 ) + B d Δ d ( k + p − 1 ) = A p Δ x ( k ) + A p − 1 B u Δ u ( k ) + A p − 2 B u Δ u ( k + 1 ) + ⋯ + A p − m B u Δ u ( k + m − 1 ) + A p − 1 B d Δ d ( k ) (6) \begin{aligned} \Delta x(k+m|k)&=A\Delta x(k+m-1|k) + B_u\Delta u(k+m-1) + B_d\Delta d(k+m-1)\\[1ex] &=A^m\Delta x(k) + A^{m-1}B_u\Delta u(k) + A^{m-2}B_u\Delta u(k+1) +\cdots + B_u\Delta u(k+m-1) + A^{m-1}B_d\Delta d(k)\\[1ex] &\vdots\\[1ex] \Delta x(k+p|k)&=A\Delta x(k+p-1|k) + B_u\Delta u(k+p-1) + B_d\Delta d(k+p-1)\\[1ex] &=A^p\Delta x(k) + A^{p-1}B_u\Delta u(k) + A^{p-2}B_u\Delta u(k+1) +\cdots + A^{p-m}B_u\Delta u(k+m-1) + A^{p-1}B_d\Delta d(k)\\[1ex] \end{aligned}\tag{6} Δx(k+mk)Δx(k+pk)=AΔx(k+m1∣k)+BuΔu(k+m1)+BdΔd(k+m1)=AmΔx(k)+Am1BuΔu(k)+Am2BuΔu(k+1)++BuΔu(k+m1)+Am1BdΔd(k)=AΔx(k+p1∣k)+BuΔu(k+p1)+BdΔd(k+p1)=ApΔx(k)+Ap1BuΔu(k)+Ap2BuΔu(k+1)++ApmBuΔu(k+m1)+Ap1BdΔd(k)(6)

进一步,由增量方程(4)可以预测 k + 1 k+1 k+1 k + p k+p k+p 的被控输出
y c ( k + 1 ∣ k ) = C c Δ x ( k + 1 ∣ k ) + y c ( k ) = C c A Δ x ( k ) + C c B u Δ u ( k ) + C c B d Δ d ( k ) + y c ( k ) , y c ( k + 2 ∣ k ) = C c Δ x ( k + 2 ∣ k ) + y c ( k + 1 ∣ k ) = ( C c A 2 + C c A ) Δ x ( k ) + ( C c A B u + C c B u ) Δ u ( k ) + C c B u Δ u ( k + 1 ) + ( C c A B d + C c B d ) Δ d ( k ) + y c ( k ) , ⋮ y c ( k + m ∣ k ) = C c Δ x ( k + m ∣ k ) + y c ( k + m − 1 ∣ k ) = ∑ i = 1 m C c A i Δ x ( k ) + ∑ i = 1 m C c A i − 1 B u Δ u ( k ) + ∑ i = 1 m − 1 C c A i − 1 B u Δ u ( k + 1 ) + ⋯ + C c B u Δ u ( k + m − 1 ) + ∑ i = 1 m C c A i − 1 B d Δ d ( k ) + y c ( k ) , ⋮ y c ( k + p ∣ k ) = C c Δ x ( k + p ∣ k ) + y c ( k + p − 1 ∣ k ) = ∑ i = 1 p C c A i Δ x ( k ) + ∑ i = 1 p C c A i − 1 B u Δ u ( k ) + ∑ i = 1 p − 1 C c A i − 1 B u Δ u ( k + 1 ) + ⋯ + ∑ i = 1 p − m + 1 C c A i − 1 B u Δ u ( k + m − 1 ) + ∑ i = 1 p C c A i − 1 B d Δ d ( k ) + y c ( k ) , (7) \begin{aligned} y_c(k+1|k)&=C_c\Delta x(k+1|k)+y_c(k)\\[1ex] &=C_cA\Delta x(k)+C_cB_u\Delta u(k)+C_cB_d\Delta d(k)+y_c(k),\\[1ex] y_c(k+2|k)&=C_c\Delta x(k+2|k)+y_c(k+1|k)\\[1ex] &=(C_cA^2+C_cA)\Delta x(k)+(C_cAB_u+C_cB_u)\Delta u(k)\\[1ex]&\quad+C_cB_u\Delta u(k+1)+(C_cAB_d+C_cB_d)\Delta d(k)+y_c(k),\\[1ex] &\vdots\\[1ex] y_c(k+m|k)&=C_c\Delta x(k+m|k)+y_c(k+m-1|k)\\[1ex] &=\sum_{i=1}^mC_cA^i\Delta x(k)+\sum_{i=1}^mC_cA^{i-1}B_u\Delta u(k)+\sum_{i=1}^{m-1}C_cA^{i-1}B_u\Delta u(k+1)+\cdots\\[1ex]&\quad+C_cB_u\Delta u(k+m-1)+\sum_{i=1}^mC_cA^{i-1}B_d\Delta d(k)+y_c(k),\\[1ex] &\vdots\\[1ex] y_c(k+p|k)&=C_c\Delta x(k+p|k)+y_c(k+p-1|k)\\[1ex] &=\sum_{i=1}^pC_cA^i\Delta x(k)+\sum_{i=1}^pC_cA^{i-1}B_u\Delta u(k)+\sum_{i=1}^{p-1}C_cA^{i-1}B_u\Delta u(k+1)+\cdots\\[1ex]&\quad+\sum_{i=1}^{p-m+1}C_cA^{i-1}B_u\Delta u(k+m-1)+\sum_{i=1}^pC_cA^{i-1}B_d\Delta d(k)+y_c(k),\\[1ex] \end{aligned}\tag{7} yc(k+1∣k)yc(k+2∣k)yc(k+mk)yc(k+pk)=CcΔx(k+1∣k)+yc(k)=CcAΔx(k)+CcBuΔu(k)+CcBdΔd(k)+yc(k),=CcΔx(k+2∣k)+yc(k+1∣k)=(CcA2+CcA)Δx(k)+(CcABu+CcBu)Δu(k)+CcBuΔu(k+1)+(CcABd+CcBd)Δd(k)+yc(k),=CcΔx(k+mk)+yc(k+m1∣k)=i=1mCcAiΔx(k)+i=1mCcAi1BuΔu(k)+i=1m1CcAi1BuΔu(k+1)++CcBuΔu(k+m1)+i=1mCcAi1BdΔd(k)+yc(k),=CcΔx(k+pk)+yc(k+p1∣k)=i=1pCcAiΔx(k)+i=1pCcAi1BuΔu(k)+i=1p1CcAi1BuΔu(k+1)++i=1pm+1CcAi1BuΔu(k+m1)+i=1pCcAi1BdΔd(k)+yc(k),(7)

定义 p p p 步预测输出向量和 m m m 步输入向量如下:
Y p ( k + 1 ∣ k ) = ⁣ = d e f [ y c ( k + 1 ∣ k ) y c ( k + 2 ∣ k ) ⋮ y c ( k + p ∣ k ) ] p × 1 , Δ U ( k ) = ⁣ = d e f [ Δ u ( k ) Δ u ( k + 1 ) ⋮ Δ u ( k + m − 1 ) ] m × 1 (8) \begin{aligned} Y_p(k+1|k)&\overset{\mathrm{def}}{=\!=}\left[ \begin{matrix} y_c(k+1|k) \\[2ex] y_c(k+2|k) \\[2ex] \vdots\\[2ex] y_c(k+p|k) \end{matrix} \right]_{p\times 1},\\[1ex] \Delta U(k)&\overset{\mathrm{def}}{=\!=}\left[ \begin{matrix} \Delta u(k) \\[2ex] \Delta u(k+1) \\[2ex] \vdots\\[2ex] \Delta u(k+m-1) \end{matrix} \right]_{m\times 1} \end{aligned}\tag{8} Yp(k+1∣k)ΔU(k)==def yc(k+1∣k)yc(k+2∣k)yc(k+pk) p×1,==def Δu(k)Δu(k+1)Δu(k+m1) m×1(8)

那么,对系统未来 p p p 步预测的输出可以由下面的预测方程计算:
Y p ( k + 1 ∣ k ) = S x Δ x ( k ) + I y c ( k ) + S d Δ d ( k ) + S u Δ U ( k ) (9) Y_p(k+1|k)=S_x\Delta x(k)+{\cal{I}}y_c(k)+{\cal{S}_d}\Delta d(k)+{\cal{S}_u}\Delta U(k)\tag{9} Yp(k+1∣k)=SxΔx(k)+Iyc(k)+SdΔd(k)+SuΔU(k)(9)

其中
S x = [ C c A ∑ i = 1 2 C c A i ⋮ ∑ i = 1 p C c A i ] p × 1 , I = [ I n c × n c I n c × n c ⋮ I n c × n c ] p × 1 , S d = [ C c B d ∑ i = 1 2 C c A i − 1 B d ⋮ ∑ i = 1 p C c A i − 1 B d ] p × 1 , S u = [ C c B u 0 0 ⋯ 0 ∑ i = 1 2 C c A i B u C c B u 0 ⋯ 0 ⋮ ⋮ ⋮ ⋮ ∑ i = 1 m C c A i − 1 B u ∑ i = 1 m − 1 C c A i − 1 B u ⋯ ⋯ C c B u ⋮ ⋮ ⋮ ⋮ ∑ i = 1 p C c A i − 1 B u ∑ i = 1 p − 1 C c A i − 1 B u ⋯ ⋯ ∑ i = 1 p − m + 1 C c A i − 1 B u ] p × m (10) \begin{aligned} S_x&=\left[ \begin{matrix} C_cA \\[2ex] \sum_{i=1}^2C_cA^i \\[2ex] \vdots\\[2ex] \sum_{i=1}^pC_cA^i \end{matrix} \right]_{p\times 1} ,\quad{\cal{I}}=\left[ \begin{matrix} I_{n_c\times n_c} \\[1ex] I_{n_c\times n_c} \\[1ex] \vdots\\[1ex] I_{n_c\times n_c} \end{matrix} \right]_{p\times 1},\quad{\cal{S}_d}=\left[ \begin{matrix} C_cB_d \\[2ex] \sum_{i=1}^2C_cA^{i-1}B_d \\[2ex] \vdots\\[2ex] \sum_{i=1}^pC_cA^{i-1}B_d \end{matrix} \right]_{p\times 1},\\[4ex] {\cal{S}_u}&=\left[ \begin{matrix} C_cB_u & 0 & 0 & \cdots & 0\\[2ex] \sum_{i=1}^2C_cA^iB_u & C_cB_u & 0 & \cdots & 0 \\[2ex] \vdots & \vdots & \vdots & &\vdots \\[2ex] \sum_{i=1}^mC_cA^{i-1}B_u & \sum_{i=1}^{m-1}C_cA^{i-1}B_u & \cdots & \cdots & C_cB_u \\[2ex] \vdots & \vdots & \vdots & &\vdots \\[2ex] \sum_{i=1}^pC_cA^{i-1}B_u & \sum_{i=1}^{p-1}C_cA^{i-1}B_u & \cdots & \cdots & \sum_{i=1}^{p-m+1}C_cA^{i-1}B_u \end{matrix} \right]_{p\times m} \end{aligned}\tag{10} SxSu= CcAi=12CcAii=1pCcAi p×1,I= Inc×ncInc×ncInc×nc p×1,Sd= CcBdi=12CcAi1Bdi=1pCcAi1Bd p×1,= CcBui=12CcAiBui=1mCcAi1Bui=1pCcAi1Bu0CcBui=1m1CcAi1Bui=1p1CcAi1Bu0000CcBui=1pm+1CcAi1Bu p×m(10)

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

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

相关文章

HackTheBox-Machines--Nineveh

Nineveh测试过程 1 信息收集 NMAP 端口扫描 80 端口 80端口是服务器的默认页面,无可利用功能点,源代码没有可利用的敏感信息 目录扫描 1.http://10.129.25.123/department 访问/department目录跳转到登录页面,尝试暴力破解,获取…

Java——标识符

一、标识符介绍 1、什么是标识符 标识符(Identifier)是Java编程语言中用于命名变量、方法、类、包、常量及其他用户定义项目的名称。简单的说就是只要是可以自定义命名的地方就是标识符。 2、标识符的命名规则 在Java中,标识符的命名必须…

嵌入式期末复习

一、选择题(20) 二、判断题(10) 三、填空题(10) 主机-目标机的文件传输方式主要有串口传输方式、网络传输方式、USB接口传输方式、JTAG接口传输方式、移动存储设备方式。常用的远程调试技术主要有 插桩/st…

NVIDIA NeMo - 训练本地化多语种 LLM

本文转载自:使用 NVIDIA NeMo 训练本地化多语种 LLM (2024年 5月 17日 By Nicole Luo and Amit Bleiweiss 第 1 部分 https://developer.nvidia.com/zh-cn/blog/training-localized-multilingual-llms-with-nvidia-nemo-part-1/ 第 2 部分 https://deve…

SourceTree配置

SourceTree跳过注册方法跳过注册页 2.SourceTree分体暂存视图 配置(暂存才会生效) 3.SourceTree提交信息描述模版配置 备注: SourceTree核心GUI操作直观 Atlassian 提交信息描述模版配置: #应集团要求:所有需要发布的应用都需要按照以下的…

cocos入门1:简介

Cocos是一款由厦门雅基软件有限公司推出的数字内容开发一站式解决方案,它具备开源、免费、轻量、高性能等特点,为全球范围内的开发者提供服务。以下是对Cocos的详细介绍及教程概括: Cocos的基本介绍 产品背景:Cocos成立于2010年…

Cocos入门2:软件安装

Cocos Creator的安装教程如下,按照步骤进行,可以帮助您顺利安装Cocos Creator: 一、下载Cocos Dashboard 访问Cocos官网:前往Cocos Creator的官方网站(https://www.cocos.com/creator/)。 下载Cocos Dash…

【架构艺术】代码架构治理之四层境界

最近逐渐开始写一些简单且稍微务虚的文章。原因有挺多,其一是,自己的工作内容和企业的内部情况绑定的更加深入了,许多信息如果要在互联网上分享,需要考虑在很多地方做加工;其二是,过分拘泥于非常深度的技术…

重生之 SpringBoot3 入门保姆级学习(14、内容协商基础简介)

重生之 SpringBoot3 入门保姆级学习(14、内容协商基础简介) 3.3 内容协商3.3.1 基础简介3.3.2 演示效果 3.3 内容协商 3.3.1 基础简介 默认规则 基于请求头的内容协商(默认开启) 客户端向服务器发送请求,携带 HTTP 标…

GraphQL(1):GraphQL简介

1 GraphQL介绍 GraphQL是Facebook开发的一种数据查询语言,并于2015年公开发布。它是RESTAPI的替代品。 GraphQL 既是一种用于 API的查询语言也是一个满足你数据查询的运行时。 GraphQL对你的 API中的数据提供了一套易于理解的完整描述,使得客户端能够准…

20240601使用iperf3在Toybrick的TB-RK3588开发板上跑预编译的Android12测网速

20240601使用iperf3在Toybrick的TB-RK3588开发板上跑预编译的Android12测网速 2024/6/1 20:39 【常见问题】给TB-RK3588开发板刷机Androidd12之后,如果刷机线type-C不拔掉。可能起不来! 搞得我都以为板子坏了呢! rootrootrootroot-ThinkBook-…

Linux|Linux系统的exec函数族浅浅解析

exec 函数族是 Linux 和其他类 Unix 操作系统中的一组系统调用,用于在当前进程的上下文中执行新的程序。这些函数包括 execl, execle, execlp, execv, execve, execvp 和 execvpe 等。使用这些函数可以替换当前进程的地址空间,使其执行一个新的程序。 基…

Linux[高级管理]——使用源码包编译安装Apache网站

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年5月31日14点20分 🀄️文章质量:96分 在Linux系统上编译和安装Apache HTTP Server是…

Kubernetes 安全指南:从审计到备份的全面防护

▲ 点击上方"DevOps和k8s全栈技术"关注公众号 Kubernetes(K8s)作为现代容器编排的领先平台,其在提升应用部署和管理效率方面表现出色。然而,随着其应用的广泛普及,Kubernetes的安全性也成为了大家关注的重点…

搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL(四)

上一篇:搭建基于Django的博客系统增加广告轮播图(三) 下一篇:基于Django的博客系统之用HayStack连接elasticsearch增加搜索功能(五) Sqlite3数据库迁移到MySQL 数据库 迁移原因 Django 的内置数据库 SQL…

动态规划求多段图的最短路径

一、基本思想 动态规划法将待求解问题分解成若干个相互重叠的子问题,每个子问题相互关联;动态规划法与分治法的区别就在于分治法的子问题相互不关联,而动态规划法的子问题是相互关联的,且有重叠的部分。 二、算法分析 动态规划…

x264 参考帧管理原理:reference_build_list 函数

reference_build_list函数 原理 功能:构建参考列表,它根据当前编码帧的POC(Picture Order Count)来决定哪些帧可以作为参考帧。 内部执行流程:声明了一个布尔变量b_ok,用于在排序循环中作为标志;初始化参考帧列表0和1的计数器i_fref[0]、i_fref[1];如果当前编码的切片…

独孤思维:赚不到的人,身边也都是不赚钱的垃圾

01 如果你身边的人,都被你吐槽垃圾,那么你一定垃圾。 因为你身处在垃圾之中,而你不愿意改变,那么你肯定垃圾。 如果你做副业,一直没赚到钱,也一直在埋怨项目不行。 那么一定是你这个人不行。 无论换多…

android源码下载编译模拟器运行

安卓aosp源码下载,编译,模拟器运行 virtualbox7 安装ubuntu20.04,ubuntu22.04 编译android aosp 源码可以,但是模拟器跑不了,哪个版本都是要么黑屏,要么整个vbox虚拟机闪退。解决方案使用vmware17 ##拯救…

性能优化相关:nginx负载均衡中的动静分离

结合上次博客:正向代理和反向代理 什么是动静分离: 静态资源:包含css文件、图片、js文件、配置文件等 动态资源:脚本处理等 更改/usr/local/nginx/conf下的nginx.conf文件,设置动静目录,添加如下 locatio…