1

再会!

请考虑以下几点:

我想square()使用“嵌入式 Matlab 函数”在 Simulnk 中使用 Matlab 函数生成方波。我通过使用 尝试了相同的操作eml.extrinsic,但我不断收到错误消息

'y'<the output from embedded function block>  cannot be equated to square. 

请看以下屏幕截图:

SIMULINK 中的块 所述块的代码 错误列表

该模块背后的想法是根据定义的频率范围生成方波。

  • a= 幅度
  • f= 频率
  • dc= 占空比

请让我知道我做错了什么?或者指出我必须阅读的内容才能理解我的错误?或者提供替代方法来完成我想要的。

提前致谢!

4

1 回答 1

1

编译器无法确定外部函数输出的类型和大小。因此,编译器将被迫将其保留为“MATLAB 类型”(AKA an mxArray)。在 Embedded 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);
于 2013-05-31T09:18:11.107 回答