我正在研究 Matlab simulink block :Mean(可变频率)。该 block 显示在 http://www.mathworks.com/help/physmod/sps/powersys/ref/meanvariablefrequency.html
该算法的第一步是对输入信号进行积分。然而,当输入信号为常数时,积分器会累加直至溢出。有谁知道如何在这样的 block 中解决这个问题。
我还附上了下面这个 block 的图: 稍后,我将其更改为离散时间模型,并在我的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)
然后整合,而不会有饱和的风险。因此我建议按如下方式更改实现:
或者,您可以将理想积分器 1/s
更改为直流时具有有限增益的低通滤波器,例如1/(1+s)
尽管与理想行为相比,这(以及 @thewaywewalk 建议的抗饱和 Controller )会使您的信号失真。
PS:感谢 stackoverflow 不支持正确的数学符号... :-/
关于matlab - Simulink 中的 block 积分器溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28131900/