Matlab Simulink中的块积分器溢出
我正在研究MatlabSimulink模块:均值(变频)。该块显示在 该算法的第一步是对输入信号进行积分。然而,当输入信号为常数时,积分器将累积直到溢出。有人知道如何在这样的街区解决这个问题吗 我还附上以下该块的示意图:Matlab Simulink中的块积分器溢出,matlab,simulink,Matlab,Simulink,我正在研究MatlabSimulink模块:均值(变频)。该块显示在 该算法的第一步是对输入信号进行积分。然而,当输入信号为常数时,积分器将累积直到溢出。有人知道如何在这样的街区解决这个问题吗 我还附上以下该块的示意图: 稍后,我将把它改为离散时间模型,并在我的DSP中实现这种算法。如果您有任何建议,我是一个很好的倾听者。您需要实现一个防结音控制。最简单的方法是使用PID控制器并将恒定和微分增益设置为零。对于防缠绕,通常有两个选项:反向计算和夹紧。有关差异和参考,请参阅本文:您正在实现的函数是
稍后,我将把它改为离散时间模型,并在我的DSP中实现这种算法。如果您有任何建议,我是一个很好的倾听者。您需要实现一个防结音控制。最简单的方法是使用PID控制器并将恒定和微分增益设置为零。对于防缠绕,通常有两个选项:反向计算和夹紧。有关差异和参考,请参阅本文:您正在实现的函数是
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时为零,则可以假定为0。。。T
如果我们观察具有直流偏移的输入信号,例如
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)
然后集成,而不冒饱和的风险。因此,我建议将实施更改如下:
或者,您可以将理想的积分器1/s
更改为直流增益有限的低通滤波器,例如1/(1+s)
,尽管这(以及@thewaywewalk建议的抗饱和控制器)与理想行为相比会使信号失真
PS:感谢stackoverflow不支持正确的数学表示法<代码>:-/