噪声对理想的PID控制器又有什么影响呢?

1  先说噪声
在电子设备等电路系统中,噪声是不被系统需要的电信号;电子设备产生的噪声会由于多种不同的影响而产生很大的差异。在通信系统中,噪声是一个错误或不希望出现的随机干扰从而作用于有效的信号。
2  噪声对于系统的影响
噪声出现的第一个场景,当我们在教室里做英语听力,然后旁边的同学手机忽然来了一条短信,这时候往往可以听到放英语听力的喇叭会被干扰,然后会发出哔哔哔的声音;
下面是一个正弦信号跌加噪声的例子,在原始信号上叠加一定幅度的高斯噪声,可以看到信号不再像原来的正弦信号那样完美,具体如下图所示;
或者,很久很久以前,数字电视还没有普及,那时候的显像管的黑白电视,也容易出现这样的雪花一样的噪声,叠加在图片上就会出现这样的效果,具体如下图所示;
从上述的例子中可以看到,噪声往往会对系统造成一定程度的影响,但是如果噪声的幅度减小到一定程度,对于系统的影响可能就没有那么容易被发现。
下面做一个实验;在一张黑色图片上叠加幅度很小幅度的高斯噪声;从第二张图片中发现噪声没有影响到整体图片;  
然后我尝试提高了整幅图片的亮度,发现,噪点便开始出来了,这像极平时那些枪版影片的马赛克画质;整体的实验结果如下图所示;
3 对于pid控制器的影响
既然噪声的幅度减小到一定程度,对于系统的影响可能就没有那么容易被发现,那么对理想的pid控制器又有什么影响呢?
不要忘了,在理想pid控制器中,微分控制器会对偏差的变化率(斜率)进行累加,从而产生积分器的输出;
对于微分器来说,即使噪声幅度足够小,但是只要达到足够高频率,偏差的变化率一样可以变得很大,下面举个例子;
简单画了一下这个信号,具体如下图所示;
遇到高频噪声,那么微分器会产生较大的输出,从而最终对系统造成影响,这是我们不希望出现的结果,因此在反馈回路中并不希望高频噪声进入pid控制器的计算,这里就需要低通滤波器将噪声滤除。
4 加入滤波器
低通滤波器可以滤除高频信号,这样保留了有效信号,可以设置所需的截止频率;系统处理有效信号,由于低频部分信噪比较高,因此噪声对于系统的影响较小,而高频部分,信噪比就很低,这时候对于系统来说,噪声就会造成不小的影响,具体如下图所示;
信噪比:有效信号和噪声的比值,英文名称叫做snr或s/n(signal-noise ratio);
所以下面我们会在pid控制器的微分部分加入低通滤波器,这样对反馈的信号进行一部分处理,从而减小系统干扰,如下图所示;
4.1 传递函数
4.2 串联微分的等效形式反馈积分
串联等效传递函数的关系为,两个方框串联等于各个方框传递函数的乘积;具体如下所示;
因此低通滤波串联微分的传递函数为:
闭环负反馈的等效传递函数的关系如下所示;
这里我们可以使用负反馈积分的方式,构建等效于串联微分的传递函数,最终的传递函数结果是相同的,具体如下图所示;
串联微分的形式,可能在算法的实现上会更加直观,但是会比较费资源;
使用负反馈积分的等效形式进行实现,则进一步减少了算法的资源消耗,下面给出一个ti公司的pid算法实现就是通过负反馈积分的等效形式进行实现的。
5 c语言实现
这里直接使用了ti公司的pid算法,对于微分部分做了滤波的处理,并且使用的是负反馈积分的方式, 具体可以参考controlsuitelibsapp_libsmotor_controlmath_blocksv4.2pid_grando.hpid控制器的整体框图如下所示,我们只关心微分部分;
c语言实现如下:
/* =================================================================================file name:       pid_grando.h ===================================================================================*/#ifndef __pid_h__#define __pid_h__typedef struct {  _iq  ref;      // input: reference set-point      _iq  fbk;      // input: feedback      _iq  out;      // output: controller output       _iq  c1;      // internal: derivative filter coefficient 1      _iq  c2;      // internal: derivative filter coefficient 2    } pid_terminals;    // note: c1 & c2 placed here to keep structure size under 8 wordstypedef struct {  _iq  kr;    // parameter: reference set-point weighting       _iq  kp;    // parameter: proportional loop gain      _iq  ki;       // parameter: integral gain      _iq  kd;           // parameter: derivative gain      _iq  km;           // parameter: derivative weighting      _iq  umax;   // parameter: upper saturation limit      _iq  umin;   // parameter: lower saturation limit    } pid_parameters;typedef struct {  _iq  up;    // data: proportional term      _iq  ui;    // data: integral term      _iq  ud;    // data: derivative term      _iq  v1;    // data: pre-saturated controller output      _iq  i1;    // data: integrator storage: ui(k-1)      _iq  d1;    // data: differentiator storage: ud(k-1)      _iq  d2;    // data: differentiator storage: d2(k-1)       _iq  w1;    // data: saturation record: [u(k-1) - v(k-1)]    } pid_data;typedef struct {  pid_terminals term;      pid_parameters param;      pid_data  data;    } pid_controller;/*-----------------------------------------------------------------------------default initalisation values for the pid objects-----------------------------------------------------------------------------*/                     #define pid_term_defaults {              0,                               0,                               0,                               0,              0                       }#define pid_param_defaults {                              _iq(1.0),                            _iq(1.0),                             _iq(0.0),                            _iq(0.0),                            _iq(1.0),                            _iq(1.0),                            _iq(-1.0)                     }#define pid_data_defaults {                                  _iq(0.0),                            _iq(0.0),                             _iq(0.0),                            _iq(0.0),                            _iq(0.0),                             _iq(0.0),                            _iq(0.0),                            _iq(1.0)                     }/*------------------------------------------------------------------------------  pid macro definition------------------------------------------------------------------------------*/#define pid_macro(v)                         /* proportional term */          v.data.up = _iqmpy(v.param.kr, v.term.ref) - v.term.fbk;                /* integral term */           v.data.ui = _iqmpy(v.param.ki, _iqmpy(v.data.w1,    (v.term.ref - v.term.fbk))) + v.data.i1;     v.data.i1 = v.data.ui;                         /* derivative term */           v.data.d2 = _iqmpy(v.param.kd, _iqmpy(v.term.c1,    (_iqmpy(v.term.ref, v.param.km) - v.term.fbk))) - v.data.d2;v.data.ud = v.data.d2 + v.data.d1;       v.data.d1 = _iqmpy(v.data.ud, v.term.c2);                    /* control output */           v.data.v1 = _iqmpy(v.param.kp,         (v.data.up + v.data.ui + v.data.ud));      v.term.out= _iqsat(v.data.v1, v.param.umax, v.param.umin); v.data.w1 = (v.term.out == v.data.v1) ? _iq(1.0) : _iq(0.0); #endif // __pid_h__


PCB高速信号布线的要点
大数据技术原理与应用
运算放大器在稳压电源应用中的分析及研究
PCB的工艺流程详细讲解
金山文档结合龙芯3C5000/3D5000系列服务器满足文档处理场景需求
噪声对理想的PID控制器又有什么影响呢?
在SCL中使用浮点数REAL和LREAL进行计算
新能源乘用车月度推荐目录及配套供应商分析报告 部分内容
基于飞凌嵌入式OK-G2LD-C开发板的存储读写速度和兆网带宽测试
荣耀20i发布 售价1599元起
建材烟密度测试仪的功能特点是怎样的
光纤网络中运营以太网服务的划分
Korea Circuit拿下大单,向意法半导体供应FC-BGA基板
“独角兽”大疆投资人透露:账面已浮盈100倍
芯闻3分钟:苹果将推AirPods Pro,台积电两年狂揽八项全球第一
必看!智能电动汽车对MCU、功率器件的新要求
微软宣布强化在Azure公有云基础设施平台上提供的人工智能产品
PLC网关采集PLC数据之后数据都放到哪里去了呢
经济衰退影响 Adobe CEO 09财年薪酬减少68%
关于电源抗干扰技术在工控设计中的应用分析和介绍