美好的一天!
请考虑以下事项:
我想使用“Emebedded Matlab函数”在Simulnk中使用Matlab函数square()
生成方波。我使用eml.extrinsic
尝试了同样的方法,
但我一直收到错误,说明
'y'<the output from embedded function block> cannot be equated to square.
请参阅以下屏幕截图:
该块背后的想法是基于定义的频率范围生成方波。
a
=幅度f
=频率dc
=责任周期请让我知道我做错了什么?或者指出我要阅读的内容以便理解我的错误?或提供替代方法来实现我想要的目标。
提前致谢!
答案 0 :(得分:1)
编译器无法确定外部函数输出的类型和大小。因此,编译器将被强制保持“MATLAB类型”(AKA an mxArray
)。你可以用嵌入式Matlab中的mxArray
来做唯一的事情就是将它传递给另一个外在函数,但是你不能直接将它分配给任何东西。
在调用外部函数之前,你必须告诉MATLAB外部函数输出的类型和大小。您可以通过预先将变量与(预期)输出的类型和大小相同来执行此操作。
所以,对于你的方波:
function y = fcn(~)
%#eml
eml.extrinsic('square', 'linspace');
a = 1;
dc = 50;
f = 2*pi* (6908:1:9856);
% Pre-allocate
t = f;
% THEN assign
t = linspace(0, 1, numel(f));
% pre-allocate
y = t;
% THEN assign
y = a*square(f.*t, dc);