1

考虑一个有反馈路径并且反馈信号被某种滤波器过滤的块方案。

如何在 Matlab(不是 Simulink)中实现这个?我的疑问特别是关于过滤器:我应该选择什么间隔的信号来执行过滤器?

例如,如果滤波器有n系数,是否足以将信号的间隔从当前迭代步长过滤i_ni哪里?i

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

4

2 回答 2

2

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

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

In--->----Add--->----Gain--->---Out
           | |
           ^ 五
           |--过滤器--|

如果滤波器有 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 将很难实现。您很可能会花费大部分时间来设计过滤器模块,而不是做实际的控制机制。

[编辑]

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

希望这能回答你的问题。

于 2014-07-25T05:47:26.543 回答
0

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

查看创建和操作线性模型以获得一个非常基本的示例。

于 2014-07-25T08:46:18.557 回答