Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab Simulink中的块积分器溢出_Matlab_Simulink - Fatal编程技术网

Matlab Simulink中的块积分器溢出

Matlab Simulink中的块积分器溢出,matlab,simulink,Matlab,Simulink,我正在研究MatlabSimulink模块:均值(变频)。该块显示在 该算法的第一步是对输入信号进行积分。然而,当输入信号为常数时,积分器将累积直到溢出。有人知道如何在这样的街区解决这个问题吗 我还附上以下该块的示意图: 稍后,我将把它改为离散时间模型,并在我的DSP中实现这种算法。如果您有任何建议,我是一个很好的倾听者。您需要实现一个防结音控制。最简单的方法是使用PID控制器并将恒定和微分增益设置为零。对于防缠绕,通常有两个选项:反向计算和夹紧。有关差异和参考,请参阅本文:您正在实现的函数是

我正在研究MatlabSimulink模块:均值(变频)。该块显示在

该算法的第一步是对输入信号进行积分。然而,当输入信号为常数时,积分器将累积直到溢出。有人知道如何在这样的街区解决这个问题吗

我还附上以下该块的示意图:
稍后,我将把它改为离散时间模型,并在我的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不支持正确的数学表示法<代码>:-/