Simulink中的块积分器溢出

时间:2015-01-25 00:31:14

标签: matlab simulink

我正在研究Matlab simulink块:均值(可变频率)。该块显示在http://www.mathworks.com/help/physmod/sps/powersys/ref/meanvariablefrequency.html

该算法的第一步是整合输入信号。但是,当输入信号是常数时,积分器将累积直到它溢出。有谁知道如何解决这个问题。

我还附上了以下这个方块的图表: enter image description here 稍后,我将其改为离散时间模型,并在我的DSP中实现这样的算法。如果您有任何建议,我是一个很好的倾听者。

2 个答案:

答案 0 :(得分:1)

您需要实施 Anti-Windup 控件。最简单的方法是使用 PID-Controller 并将常数和差分增益设置为零。对于Anti-Windup,您通常有两种选择:反算和钳位。有关差异和参考,请查看本文:Anti-windup control using a PID-Controller

答案 1 :(得分:1)

您正在实施的功能是

y(t) = Integrate_{x=0->t} u(x) dx  -  Integrate_{y=0->t-T} u(y) dy          (1)

其中T是传输延迟。这可以通过替换z = y + T并由于积分的线性来重新排序

y(t) = Integrate_{x=0->t} u(x) dx  -  Integrate_{z=T->t} u(z - T) dz
     = Integrate_{x=0->t} [ u(x) - u(x - T) ] dx + C                        (2)

其中

C = Integrate_{z=0->T} u(z) dz

是一个有限常数,取决于初始条件,如果您的信号u在初始时间t = 0 ... T为零,则可以假设为0。

如果我们查看具有DC偏移的输入信号,例如

u(t) = DC + sin(w*t)

然后实现(1)将首先进行整合然后减去,这将使您的注意力饱和或导致精度损失。但(2)将首先减去并删除任何DC

u(x) - u(x - T) = DC - DC + sin(w*t) - sin(w*t - w*T)
                = 0         sin(w*t) - sin(w*t - w*T)

然后集成,不会有饱和度的风险。因此,我建议按如下方式更改实现:

simulink design

或者,您可以将理想积分器1/s更改为在DC处具有有限增益的低通滤波器,例如, 1/(1+s)虽然这(以及@thewaywewalk建议的抗饱和控制器)会使信号与理想行为相比失真。

PS:感谢stackoverflow不支持正确的数学符号...... :-/