Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
利用嵌入式Matlab函数_Matlab_Simulink_Pwm_Matlab Coder - Fatal编程技术网

利用嵌入式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:这不应该通过我在嵌入式函数中包含的时钟信号来实现吗?