问题标签 [matlab-coder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
428 浏览

c# - 去编组结果?

这是对这个问题的扩展,能够返回一个数组而不是一个标量。

通过 matlab 编码器从 matlab 代码生成的 C 代码现在看起来没问题(见下文)。我只是想弄清楚如何将结果返回到 C# 世界。这是我的第一次尝试:

C# 代码

Matlab代码:

生成的C代码

PS:

鉴于大卫的回答,我目前正在尝试这样的事情:

这只给了我一个条目:7 nCol 和 nRow 等于 1。

0 投票
1 回答
3485 浏览

matlab - Matlab 函数作为 Simulink 块

我尝试在 Simulink 中编写一个 Matlab 函数。我的第一个函数是这样的:

但我看到错误: 1. 尝试从“mxArray”中提取字段“selectStrongest”。2.未定义的函数或变量'vBoxPoints'。对局部变量的第一次赋值决定了它的类。3. 端口宽度或尺寸错误。“detecting_cross/MATLAB Function/v”的输出端口 1 是一个 [400x239] 矩阵。请帮忙。

0 投票
1 回答
3109 浏览

matlab - 使用嵌入式 Matlab 函数

再会!

请考虑以下几点:

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

请看以下屏幕截图:

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

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

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

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

提前致谢!

0 投票
1 回答
2142 浏览

string - 如何在嵌入式 Matlab 中使用带有可变长度字符串的开关构造?

我从不太喜欢嵌入式 MATLAB,正是因为我将要问的情况 :) 根据我的经验,转换到嵌入式 MATLAB 通常比简单地用 C 重写东西要付出更多的努力(当你知道 C 和MATLAB API 足够好)。

但是哦,好吧,我想有些事情是无法避免的。

无论如何,这是我的问题。在嵌入式 MATLAB 中,就像在 R2010a 中一样,您不能这样做:

where<some string>每次迭代都会改变。这是因为字符串的长度parameter是可变的,这意味着这个定义parameter超出了 Embedded Matlab 的能力:

???非常数表达式或空矩阵。这个表达式必须是常量,因为它的值决定了某个表达式的大小或类别。对常量字符串的限制仅适用于字符串上的开关,而不适用于数字上的开关。

将其更改switch为更直接的形式

当然没有帮助:

即使将字符串的大小限制为已知的恒定长度也无济于事:

但没有运气:

???非常数表达式或空矩阵。这个表达式必须是常量,因为它的值决定了某个表达式的大小或类别。对常量字符串的限制仅适用于字符串上的开关,而不适用于数字上的开关。

我看到了两种方法:

  1. 将所有允许的字符串映射到某个数字表示,并在数字上使用开关
  2. strcmp(i)在一个巨大的if-elseif-elseif-...-else-end结构内使用。

恕我直言,两者都同样丑陋,2.可能更丑陋(你需要另一个外在功能,strcmp)......

那么,有什么优雅的方法可以解决这个问题吗?

0 投票
2 回答
4951 浏览

matlab - Error due to variable size data in Matlab function block

I have a problem that many others had before, so I read some discussions and references before asking the following:

I have a Matlab function block in Simulink, which would like to be a modulator. It gets as input a [nx1] frame of data and should return a an [lx1] frame, where either l=n or l = n/K, for some K which divides n.

However, the (very simplyfied extract of) code

Doesn't compile because

Now, in line 2 I specified that it is a variable size matrix, and I also used an if/else constructor to initialize it.

To make the compiler happy, one may check the "Variable number of columns" checkbox for ak, in the Data and Ports Manager, but this turns out in a new error, because the blocks in cascade don't accept variable data, at least the ones I need, like digital filters.

0 投票
1 回答
1518 浏览

simulink - 使用嵌入式matlab功能块的simulink模型中信号的频率内容?

我试图在模拟运行时获取有关位移信号(例如 Vx)的频率信息。

我的想法是利用嵌入式 Matlab 功能块支持的 fft 命令。

我执行的第一件事是将位移信号“Vx”的值存储在长度为“L”的缓冲区中。

第二件事是计算存储在缓冲区中的那些值的 fft 并计算对应于最大幅度的索引值。

第三件事是从索引值、采样频率和缓冲区长度获取频率。

嵌入式 Matlab 代码如下:-

这是在模拟运行时获取信号频率内容的正确方法吗?

0 投票
1 回答
146 浏览

matlab - Matlab 编码器重新分配

我的 matlab 函数中有一些这样的代码:

因此,在循环的每一步中,首先将 a 的大小加倍,对其应用一些随机函数,然后删除所有为零的内容。

现在,我想对此运行 coder 以最终将其转换为 c 代码。当然,它给了我分配错误。

允许动态分配的数组没有帮助。我也不能简单地为我的变量使用不同的名称,因为它位于 for 循环中。

0 投票
1 回答
8687 浏览

matlab - 如何在 Simulink 中关闭代码生成?(独立代码生成不支持函数)

我正在创建一个模拟,我将自己移植到另一种语言。所以我不需要使用 Simulink 的代码生成功能。如何关闭它允许代码生成的尝试?

例如,我在MATLAB Function块中有以下代码:

它给出了一个错误

独立代码生成不支持函数“imresize”。请参阅 coder.extrinsic 的文档以了解如何在模拟中使用此函数。

如果我取消注释coder.extrinsic('imresize')行,我会收到新错误

应为逻辑、char、int、fi、single 或 double。找到一个 mxArray。MxArrays 从对 MATLAB 解释器的调用中返回,并且在表达式中不受支持。它们只能用于赋值的右侧,并作为外部函数的参数。

寻址第 11 行,使用if.

为什么?是否可以完全禁用代码生成,例如在模型级别?

0 投票
1 回答
541 浏览

c - 为什么 mex 代码比 matlab 代码运行得慢

我使用 matlab 编写了一个有很多迭代的程序。它不能向量化,因为每次迭代中的数据处理都与前一次迭代中的数据处理相关。

然后我使用内置的 MATLAB 编码器将 matlab 代码转换为 mex,结果速度甚至更低。我不知道是否需要自己编写 mex 代码,因为 mex 代码似乎没有帮助。

0 投票
4 回答
22956 浏览

matlab - MATLAB Compiler vs MATLAB Coder

What's the difference between the two?

As far as I understand it, MATLAB Compiler wraps the MATLAB code into a .exe file so that it can be used without installing MATLAB, and only requires the MCR. On top of it MATLAB Builder NE can also be used to produce .Net assemblies to be used with .Net framework instead of the .exe file, but they still require MCR.

Now I don't understand what MATLAB Coder used for? It generates C/C++ code. But is the MATLAB code really converted into C/C++, or is it merely packaged like in the case of MATLAB Compiler? Does it also need the MCR to run?

I understand that this is not exactly a programming question. But I have searched the internet and still haven't found a clear answer. These are very expensive products so I would like to know what I am getting into.