matlab - Simulink 中的 block 积分器溢出

标签 matlab simulink

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

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

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

最佳答案

您正在实现的功能是

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)

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

simulink design

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

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

关于matlab - Simulink 中的 block 积分器溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28131900/

相关文章:

linux - 如何在打开 matlab 文件的同时从 linux 终端启动 matlab?

c++ - 如何从 S 函数调用 matlab 变量?

matlab - 从工作区向 Simulink 输入数据

matlab - 在 MATLAB 中使用回归函数时出现秩不足警告

matlab - 三角剖分和直接线性变换

matlab:如果用户按下关闭按钮,则关闭图形用户界面

algorithm - 如何重新排序二进制矩阵,使列中至少有 '1' 值

matlab - 多个起点和终点的高效冒号运算符

matlab - Simulink - 代码为 'Comment through' block

simulink - 如何将数据输入到现有的 simulink 模型?