我正在尝试为温度传感器数据创建一个移动平均窗口。
我遵循了:如何为包含matlab函数的simulink声明全局变量?和https://www.mathworks.com/help/simulink/ug/using-global-data-with-the-matlab-function-block.html
它解释了如何对单个变量进行此操作,即(a=5,我可以使用a(
如何对可以编辑其值的全局数组/向量执行此操作?
简单地进行
function y = fcn(u)
global A
A = [];
A(end+1)=u;
y = sum(A)/length(A)+10;
不起作用。
每次调用函数时,都会重新初始化全局A
变量。改为:
function y = fcn(u)
global A
A(end+1)=u;
y = sum(A)/length(A)+10;
(当然,如果您将其作为Simulink操作的一部分使用,则需要添加逻辑以防止数组增长过快。我假设您生成了一个最小的示例来解决问题。(
在许多情况下,一种改进是使用persistent
而不是global
。持久变量保留在对一个函数的多次调用之间,但对任何其他函数都不可用。这样可以防止对变量进行意外更改。(特别是如果您的操作代码使用名为"a"的变量。(
function y = fcn(u)
persistent A
A(end+1)=u;
y = sum(A)/length(A)+10;
使用global
或persistent
变量的一种更通用的方法是进行isempty
检查,以查看是否需要初始化。像这样:
function y = fcn(u)
persistent A
if isempty(A)
A = 0; %Or whatever the appropriate initial value is. An empty array is the default.
end
A(end+1)=u;
y = sum(A)/length(A)+10;