利用嵌入式Matlab函数
你好利用嵌入式Matlab函数,matlab,simulink,pwm,matlab-coder,Matlab,Simulink,Pwm,Matlab Coder,你好 请考虑以下事项: 我想使用Simulink中的Matlab函数square()生成一个方波,使用“嵌入的Matlab函数”。我用eml.extrinsic尝试了同样的方法, 但我一直得到一个错误 'y'<the output from embedded function block> cannot be equated to square. “y”不能等于平方。 请参见以下屏幕截图: 这个模块背后的想法是根据定义的频率范围生成方波 a=振幅 f=频率 dc=占空比
请考虑以下事项:
我想使用Simulink中的Matlab函数square()
生成一个方波,使用“嵌入的Matlab函数”。我用eml.extrinsic
尝试了同样的方法,
但我一直得到一个错误
'y'<the output from embedded function block> cannot be equated to square.
“y”不能等于平方。
请参见以下屏幕截图:
这个模块背后的想法是根据定义的频率范围生成方波
=振幅a
=频率f
=占空比dc
提前谢谢 编译器无法确定外部函数输出的类型和大小。因此,编译器将被迫将其保持为“MATLAB类型”(即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);
编译器无法确定外部函数输出的类型和大小。因此,编译器将被迫将其保持为“MATLAB类型”(即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);
谢谢你,伙计!我有一个问题:1。我甚至看不到一个完整的时期。有什么建议吗?您在每个时间步生成长度为2948的信号,即您在每个时间步同时生成整个方波轨迹。假设您确实希望在每个时间步生成一个长度为1的信号,该信号仅包含当时方波的值。最简单的方法是在MATLAB中生成信号,然后使用“从工作区”块输入Simulink。@PhilGoddard:谢谢你的回答。很抱歉我的申请被推迟了,我这个周末没有上网。我已经尝试过使用SIM-IN模块,但总是出现一个错误,即没有定义时间帧或采样时间,这就是我切换到嵌入式功能的原因。如果我理解正确,你的意思是我应该定义一个[100x3]矩阵,其中第一列是时间,另外两列只是我想要的值?对吗???@PhilGoddard:这不是应该由我在嵌入式函数中包含的时钟信号来完成吗?非常感谢,伙计!我有一个问题:1。我甚至看不到一个完整的时期。有什么建议吗?您在每个时间步生成长度为2948的信号,即您在每个时间步同时生成整个方波轨迹。假设您确实希望在每个时间步生成一个长度为1的信号,该信号仅包含当时方波的值。最简单的方法是在MATLAB中生成信号,然后使用“从工作区”块输入Simulink。@PhilGoddard:谢谢你的回答。很抱歉我的申请被推迟了,我这个周末没有上网。我已经尝试过使用SIM-IN模块,但总是出现一个错误,即没有定义时间帧或采样时间,这就是我切换到嵌入式功能的原因。如果我理解正确,你的意思是我应该定义一个[100x3]矩阵,其中第一列是时间,另外两列只是我想要的值?对吗???@PhilGoddard:这不应该通过我在嵌入式函数中包含的时钟信号来实现吗?