gcc使用
前言
介绍
GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。
GCC 原名为 GNU C语言编译器,因为它原本只能处理 C 语言,但如今的 GCC ,不仅可以编译 C、C++ 和 Objective-C,还可以通过不同的前端模块支持各种语言,包括 Java、Fortran、Ada、Pascal、Go 和 D 语言等等。
GCC支持多种硬件开发平台,还能进行跨平台交叉编译。此外,GCC是按模块化设计的,可以加入新语言和新CPU架构的支持。
GCC、gcc、g++三者之间的关系
gcc(GUN C Compiler)是GCC中的c编译器,而g++(GUN C++ Compiler)是GCC中的c++编译器。
gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按c ...
PF粒子滤波器
背景
对于一般的非线性/非高斯系统,解析求解的途径是行不通的。在数值近似方法中,蒙特卡罗仿真是一种最为通用、有效的手段,粒子滤波就是建立在蒙特卡罗仿真基础之上的,它通过利用一组带权值的系统状态采样来近似状态的统计分布。由于蒙特卡罗仿真方法具有广泛的适用性,由此得到的粒子滤波算法也能适用于一般的非线性/非高斯系统。但是,这种滤波方法也面临几个重要问题,如有效采样(粒子)如何产生、粒子如何传递以及系统状态的序贯估计如何得到等。
简单的理解,粒子滤波就是使用了大量的随机样本,采用 蒙特卡洛(MonteCarlo,MC)仿真技术完成 贝叶斯递推滤波 (Recursive Bayesian Filter) 过程。
推导
系统描述
对于一个离散的开环系统
xk=Axk−1+Gwk−1zk=Cxk+Hvkx_k=Ax_{k-1}+Gw_{k-1}\\z_k=Cx_k+Hv_k
xk=Axk−1+Gwk−1zk=Cxk+Hvk
其中 xkx_kxk 为 k 时刻的系统状态向量, zkz_kzk 为 k 时刻的测量输出向量,这里是一个开环系统,不考虑系统的输入 uuu。 wk,vkw_k ...
数字滤波器
数字滤波器
数字滤波器按照最佳逼近特性可以分为巴特沃斯Butterworth,切比雪夫Chebyshev,贝塞尔Bessel,椭圆Elliptic滤波器。按照频带又可以分为低通,高通,带通,带阻滤波器,其中高通,带通和带阻滤波器都可以由低通滤波器由频率变换得到。
低通滤波器
当输入信号频率小于某一截止频率时,低通滤波器能够通过信号,使其保留低频分量,而将高于截止频率的部分信号阻止或者减弱
传递函数为
G(s)=G0wcn(s+wc)nG(s)=\frac{G_0w_c^n}{(s+w_c)^n}
G(s)=(s+wc)nG0wcn
这就是 n 阶低通滤波的传递函数,其中 wcw_cwc 就是截至频率, G0G_0G0 是通带增益或零频增益
高通滤波器
当输入信号频率大于某一截止频率时,高通滤波器能够通过信号,使其保留高频分量,而将低于截止频率的部分信号阻止或者减弱
传递函数为
G(s)=G0wcnsn(s+wc)nG(s)=\frac{G_0w_c^ns^n}{(s+w_c)^n}
G(s)=(s+wc)nG0wcnsn
这就是 n 阶高通滤波的传递函数,其中 wc ...
QP二次规划
一些定义
对于一个函数 F:Rn→RmF:R^n→R^mF:Rn→Rm 是一个将欧式 n 维空间的函数,该函数由 m 个实函数构成, y1(x1,…,xn),…,ym(x1,…,xn)y_1(x_1,…,x_n),…,y_m(x_1,…,x_n)y1(x1,…,xn),…,ym(x1,…,xn)
Jacobian 矩阵
函数 F 的偏导数组成一个 m 行 n 列的矩阵,就是 Jacobian 矩阵
JF(x1,...,xn)=[∂y1∂x1...∂y1∂xn.........∂ym∂x1...∂ym∂xn]J_F(x_1,...,x_n)=\begin{bmatrix}\frac{\partial y_1}{\partial x_1}&...&\frac{\partial y_1}{\partial x_n}\\...&...&...\\\frac{\partial y_m}{\partial x_1}&...&\frac{\partial y_m}{\partial x_n}\end{bmatrix}
JF(x1,... ...
贝叶斯滤波
在时移系统中通过对带有噪声的观测来估计隐状态的处理方法,滤波专门是指利用前面 k 个观测 y1,y2,…,yky_1,y_2,…,y_ky1,y2,…,yk 来估计第 k 个隐状态 xkx_kxk 的方法,记作 xk∣y1:kx_k|y_{1:k}xk∣y1:k
如果利用前 d 个观测 (d<k) 来估计第 k 个状态,称为预报
如果利用前 d 个观测 (d>k) 来估计第 k 个状态。则称为平滑或内插
所以实际的滤波是 d=kd=kd=k 的情形,本质上就是观测 yky_kyk 已知并且带有噪声,用它来估计未知隐状态 xkx_kxk
状态空间模型
对于一个可观测的系统,可以得到
xk=Axk−1+Buk+Gwkyk=Cxk+vkx_k=Ax_{k-1}+Bu_k+Gw_k\\y_k=Cx_k+v_k
xk=Axk−1+Buk+Gwkyk=Cxk+vk
其中 wk,vkw_k,v_kwk,vk 分别是过程噪声和观测噪声,并且上式为状态空间方程的状态方程,下式为测量方程
模型假设
由于跟踪设备获得的量测信息和我们根据控制信息得到的预测信息都 ...
PR比例谐振控制器
github仓库
比例谐振控制算法分析 - 百度文库 (baidu.com)
前言
在传统的矢量控制系统中,广泛的采用了坐标变换技术,将三相静止坐标系下的电流电压等正弦量转化为同步旋转坐标系下的直流量,这个实现了简化系统,并且能够很好的使电机实现解耦控制。这么做的原因就是 PI 控制器无法对正弦量实现无静差控制,坐标变换简化了系统外环控制的设计,却造成内环结构复杂,设计困难。而且在电机运行中,电机的电感,电阻等电机参数会随着磁路的饱和,温度的升高而发生改变,从而使交叉耦合项不准确,进而使系统的控制精度下降。
PR 控制器可以实现对交流的无静差控制,将 PR 控制器用于网侧变换器的控制系统中,可以在两个相对静止的坐标系下对电流进行调节,可以简化控制过程中的坐标变换,消除电流 d,q 轴分量之间的耦合关系,并且可以忽略电网电压对系统的扰动作用。并且使用 PR 控制器更容易实现低次滤波补偿,这些都有利于简化系统的结构
傅里叶变换
F(ω)=∫−∞∞f(t)e−jωtdtf(t)=12π∫−∞∞F(ω)ejωtdωF(\omega)=\int_{-\infty}^{\infty}f(t)e^{ ...
卡尔曼滤波
github仓库
卡尔曼滤波 KF
公式
x^k∣k−1=Fkx^k−1∣k−1Pk∣k−1=FkPk−1∣k−1FkT+QkKk=Pk∣k−1HkT(HkPk∣k−1HkT+Rk)−1x^k∣k=x^k∣k−1+Kk(zk−Hkx^k∣k−1)Pk∣k=(I−KkHk)Pk∣k−1\hat{x}_{k|k-1}=F_k\hat{x}_{k-1|k-1}\\P_{k|k-1}=F_kP_{k-1|k-1}F_k^T+Q_k\\K_k=P_{k|k-1}H_k^T(H_kP_{k|k-1}H_k^T+R_k)^{-1}\\\hat{x}_{k|k}=\hat{x}_{k|k-1}+K_k(z_k-H_k\hat{x}_{k|k-1})\\P_{k|k}=(I-K_kH_k)P_{k|k-1}
x^k∣k−1=Fkx^k−1∣k−1Pk∣k−1=FkPk−1∣k−1FkT+QkKk=Pk∣k−1HkT(HkPk∣k−1HkT+Rk)−1x^k∣k=x^k∣k−1+Kk(zk−Hkx^k∣k−1)Pk∣k=(I−KkHk)Pk∣k−1
基本 ...
最优控制
一个最优的控制策略是无论最初状态和最初的决策是什么,剩余的控制策略一定符合最优控制策略
需要考虑的问题
性能指标
假设一个系统中的状态量分别为 x1,…,xnx_1,…,x_nx1,…,xn,并且期望值 x1d,…,xndx_{1d},…,x_{nd}x1d,…,xnd ,可以得到性能指标,这里的状态量指的是一个状态在不同的时间下的具体表现
J=(x1−x1d)2+...+(xn−xnd)2J=(x_1-x_{1d})^2+...+(x_n-x_{nd})^2
J=(x1−x1d)2+...+(xn−xnd)2
体现的是每个状态变量的代价,也就是代价函数,当 J→0J→0J→0 也就是说明状态与期望状态越接近,上式还可以写作另一种形式,令 en=xnd−xne_n=x_{nd}-x_nen=xnd−xn
J=[e1...en][e1...en]J=\begin{bmatrix}e_1&...&e_n\end{bmatrix}\begin{bmatrix}e_1\\...\\e_n\end{bmatrix}
J=[e1...en]⎣⎢⎡e ...
ADRC自抗扰控制器
github仓库
为了解决快速性和超调的矛盾,在控制器设计过程中引入了过渡过程,通俗的讲就是输入信号从初始值到目标值并不是阶跃的,而是平滑过渡的,并且这个过渡过程的时间长短是可以调节的。将过渡过程和微分器在一个模块中实现,称为**跟踪-微分器(TD),**单独的过渡过程和速度规划并没有本质区别。但是TD和速度规划不是一回事,TD将输入过渡和微分器统一为一个模块,它一边尽可能快地跟踪输入信号,同时给出输入信号近似的微分。
自抗扰控制对扰动和不确定性的处理是自抗扰控制最突出的特征,它把作用于被控对象的所有不确定因素都归结为“未知扰动”,而用被控对象的输入输出数据对它进行估计,并给予补偿。“自抗扰”的名称也来源于此,即主动抵抗干扰,不需要直接测量外扰的作用,也不需要实现知道扰动的规律(能知道更好)。构建观测器,利用被控对象的输入、输出和所施加的控制输入来估计作用于系统的总扰动(包括内扰和外扰,可以粗浅地理解为所有的影响因素),实现这一功能的模块被称为扩展状态观测器(Extended State Observer,ESO)。这个名字也与观测器的形式十分匹配,因为在设计ESO时,首先构造一个扩 ...
LQG线性二次高斯
github仓库
Linear Quadratic Gaussian
在实际系统中,噪声是不可避免的,在噪声的影响下,系统状态方程可以写作
{X˙=AX+Bu+Gwy=CX+Du+Hw+v\left\{\begin{aligned}&\dot{X}=AX+Bu+Gw\\&y=CX+Du+Hw+v\end{aligned}\right.
{X˙=AX+Bu+Gwy=CX+Du+Hw+v
其中 w,vw,vw,v 均被当作为白噪声
如果我们假设噪声是均值为0高斯分布(事实上很多时候确实近似服从高斯分布,想想为什么呢?)由于系统噪声和输出噪声的存在,状态不能完美的衰减为0。我们就希望优化损失函数的期望,即
J=E{limT→∞1T∫0T[XTQX+UTRU]dt}J=E\{\underset{T\rightarrow\infty}{\lim}\frac{1}{T}\int_0^T[X^TQX+U^TRU]dt\}
J=E{T→∞limT1∫0T[XTQX+UTRU]dt}
LQG 控制器实际上就是一个最优二次型线性调节器+一个最优状态估计器(卡尔曼滤波器)而得到的 ...