【问题标题】:Block integrator overflow in SimulinkSimulink 中的块积分器溢出
【发布时间】:2015-01-25 00:31:14
【问题描述】:

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

该算法的第一步是对输入信号进行积分。但是,当输入信号为常数时,积分器会累加直到溢出。有谁知道如何在这样的块中解决这个问题。

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

【问题讨论】:

    标签: matlab simulink


    【解决方案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。

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

    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 更改为在 DC 处具有有限增益的低通滤波器,例如1/(1+s) 尽管与理想行为相比,这(以及@thewaywewalk 建议的抗饱和控制器)会使您的信号失真。

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

    【讨论】:

      【解决方案2】:

      您需要实现一个Anti-Windup 控件。最简单的方法是使用 PID 控制器 并将恒定和微分增益设置为零。对于 Anti-Windup,您通常有两个选择:反算和钳位。有关差异和参考,请查看这篇文章:Anti-windup control using a PID-Controller

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-22
        • 2015-12-20
        • 1970-01-01
        • 2015-03-16
        • 2021-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多