Matlab中“编码器”的目的是什么?

时间:2018-08-13 07:45:55

标签: matlab

我看到了内置函数estimateFundamentalMatrix,它看起来如下所示

function r = checkOutputClassStrings(list, value)

potentialMatch = validatestring(value, list, ...
  'estimateFundamentalMatrix', 'OutputClass');
coder.internal.errorIf(~strcmpi(value, potentialMatch), ...
  'vision:estimateFundamentalMatrix:invalidOutputClassString');
r = 1;

我对coder.internal.errorIf函数感到好奇。我猜想coder是一个显示函数内部状态的系统对象,但我不清楚。

2 个答案:

答案 0 :(得分:4)

coderMATLAB Coder产品的一部分。

MATLAB Coder允许您将MATLAB语言的子集转换为C代码-然后可以将C代码随后合并到更广泛的C应用程序中,或通过MEX接口带回到MATLAB中,或交付给嵌入式设备。使用MATLAB Coder时,您会将coder包中的命令包含在MATLAB代码中-当它们在MATLAB中运行时,它们通常对代码没有影响,但是当转换为C代码时,它们将帮助您控制方式通过添加有助于转换的其他信息(例如,通过控制函数的内联或指定应展开for循环)来转换它。

某些工具箱(包括包含您所引用的代码片段的计算机视觉工具箱)明确支持使用MATLAB Coder从中生成C代码,因为它们确保仅使用MATLAB语言的子集,即可转换为C,并且它们包含coder命令以帮助优化将其转换为C的过程。

您在此处看到的命令说,将MATLAB代码转换为C时,它应在C代码中包含一个显式检查,以将valuepotentialMatch进行比较,并退出并返回错误如果不匹配。

(老实说-我不确定为什么要这样做。据我所知,如果代码已经超过validatestrings语句,那么根据定义,它应该始终通过在随后的语句中进行测试。对我来说似乎有些多余,但也许我忽略了一些细节)。

答案 1 :(得分:2)

我只是在形式化我在评论中给出的答案...

  • coder.internal.errorIf恰如其名。这是内部命令,有条件地发出错误。

  • strcmpi函数执行不区分大小写的字符串比较,并返回布尔值(真/假)。

  • 波浪号(~)使对strcmpi的调用结果无效。

所以您好奇的线在表面上等效于

% Use strcmpi for case insensitive string comparison
if ~strcmpi(value, potentialMatch)
    % When using 'error', the string must be specified along with the message identifier.
    % The errorIf command was leveraging the in-built 'message' catalog.
    % In this case I've lifted the error message from calling the original errorIf command.
    error('vision:estimateFundamentalMatrix:invalidOutputClassString', ...
          'Expected OutputClass to be ''double'' or ''single''');
end

正如其他答案和评论所指出的,code.internal.errorIf命令与常见的error命令具有不同的构造,该命令允许MATLAB优化C代码生成(因此,为什么在{ {1}}包)。

有关特定于编码器的更多详细信息,请参见Sam's answer