如何在Matlab中实现反馈回路



考虑一个块方案,其中有一个反馈路径,反馈信号被某种滤波器过滤。

我如何在Matlab中实现这一点(不是Simulink)?我的疑问是关于滤波器的:我应该选择信号的哪个间隔来执行滤波器?

例如,如果滤波器有n系数,那么在i为当前迭代步长的情况下,滤波信号从i_ni的间隔是否足够?

我想复制Simulink的反馈回路的行为,但我发现没有办法将Simulink模型导出到Matlab脚本。

对于你的第一个问题,间隔取决于你的采样时间。然而,要实现实际的simulink行为,这还取决于您的求解器选项。当然,实现固定步骤的求解器要比实现可变步骤的求解器容易。

现在我们考虑一个最简单的反馈放大器

<>之前->添加->获得——>| |^ V|——过滤——|之前

如果过滤器有n个系数,您将需要内存来保留先前的输入(假设是FIR过滤器)。这就是persistent变量派上用场的地方。所以你的调用可能看起来像:

%% Sample Pseudocode. Do not run it until you fully understand.
function xo = feedbackTest(xi)
n = numel(xi);
xo = zeros(n,1);
for idx = 1:n // feed through and feedback
    xo(idx) = fsystem(xi(idx)) + xi(idx); 
end
%% ---------- filter ---------
function out = fsystem(in)
% y = a1[n] + a2[n-1] + a3[n-2]; // you need to insert your coefficients 
persistent x1 x2 x3; // retain previous inputs
if isempty(x2) x2 = 0; end
if isempty(x1) x1 = 0; end
x3 = x2;
x2 = x1;
x1 = in;
out = a1*x1 - a2*x2 + a3*x3;

当然,上面的例子只是一个演示,展示了使用脚本/函数设计反馈循环的可能性。对于一个非常复杂的系统,它仍然可以实现,但如果不使用Simulink就很难实现。您很可能将大部分时间花在设计过滤器模块上,而不是实际的控制机制上。

[编辑]

对于像Butterworth这样的IIR过滤器,这将涉及到过滤器/系统中的前馈路径。然而,实现概念与fsystem()中所示相似。最好是编写一个函数,根据截止点和波纹(假设你知道方程)生成适当的系数,然后在系统中应用你的过滤器。当你在整个模型中需要一个新的过滤器时,你不需要每次都硬编码系数。

希望这能回答你的问题

如果您有控制系统工具箱,您可以将过滤器和系统的其他组件表示为传递函数或状态空间对象,并使用feedback等函数将它们连接起来。一旦您用反馈循环表示了整个系统,您就可以使用lsim这样的函数来模拟系统对特定输入的时间响应。

看一下创建和操作线性模型的一个非常基本的例子。

相关内容

  • 没有找到相关文章

最新更新