如何在Matlab中实现反馈循环?

时间:2014-07-24 15:47:10

标签: matlab feedback-loop

考虑一种块方案,其中存在反馈路径,并且反馈信号由某种滤波器滤波。

如何在Matlab(而不是Simulink)中实现这一点?我对滤波器特别怀疑:我应该选择哪个信号间隔来执行滤波器?

例如,如果过滤器具有n系数,是否足以过滤从i_ni的信号间隔,其中i是当前的迭代步骤?

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

2 个答案:

答案 0 :(得分:2)

对于您的第一个问题,间隔取决于您的采样时间。 但是,要实现实际的simulink行为,这也取决于您的求解器选项。当然,实现固定步长求解器比变量步骤1更容易。

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

In--->----Add--->----Gain--->---Out
           |           |
           ^           V
           |--filter---|

如果滤波器具有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()中所示类似。最好根据截止值和波纹编写一个生成适当系数的函数(假设您知道方程式),然后在系统中应用滤波器。每当您需要在整个模型中使用新过滤器时,您不必对系数进行硬编码。

希望这能回答你的问题。

答案 1 :(得分:0)

如果您拥有Control System Toolbox,则可以将您的过滤器和系统的其他组件表示为transfer functionstate-space个对象,并使用feedback等功能连接它们。一旦用反馈循环表示整个系统,就可以使用lsim等函数来模拟系统对特定输入的时间响应。

查看Creating and Manipulating Linear Models的基本示例。