我正在研究Matlab simulink块:均值(可变频率)。该块显示在http://www.mathworks.com/help/physmod/sps/powersys/ref/meanvariablefrequency.html
该算法的第一步是整合输入信号。但是,当输入信号是常数时,积分器将累积直到它溢出。有谁知道如何解决这个问题。
我还附上了以下这个方块的图表: 稍后,我将其改为离散时间模型,并在我的DSP中实现这样的算法。如果您有任何建议,我是一个很好的倾听者。
答案 0 :(得分:1)
您需要实施 Anti-Windup 控件。最简单的方法是使用 PID-Controller 并将常数和差分增益设置为零。对于Anti-Windup,您通常有两种选择:反算和钳位。有关差异和参考,请查看本文:Anti-windup control using a PID-Controller
答案 1 :(得分: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。
如果我们查看具有DC偏移的输入信号,例如
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不支持正确的数学符号...... :-/