matlab c 嵌入式编码器代码

Posted

技术标签:

【中文标题】matlab c 嵌入式编码器代码【英文标题】:Matlab c embedded coder code 【发布时间】:2013-08-23 13:53:55 【问题描述】:
  b_k = 1;
  while (b_k <= iv0[1]) 
    h = vplus_data[0];
    u1 = vmax->data[(int)((1.0 + (double)k) + 1.0) - 1];
    if ((h <= u1) || rtIsNaN(u1)) 
      minval_data_idx_0 = h;
     else 
      minval_data_idx_0 = u1;
    

    b_k = 2;
  

  b_k = 1;
  while (b_k <= iv0[1]) 
    h = vmin->data[(int)((1.0 + (double)k) + 1.0) - 1];
    if ((h >= minval_data_idx_0) || rtIsNaN(minval_data_idx_0)) 
     else 
      h = minval_data_idx_0;
    

    vplus_data[0] = h;
    b_k = 2;
  

此代码与 min 函数进行比较以获得 h 或 u1 的最小值, 谁能告诉我为什么matlab会生成这样的语法?为什么是 while 循环,虽然我在 while 块内没有看到任何变化!

ma​​tlab 代码

v(k+1) = max(vmin(k+1), min(vplus, vmax(k+1)));

注意 max min 函数有两个循环

【问题讨论】:

这可能是您编写 Matlab 代码的一种副作用。可以贴一下 Matlab 代码吗? b_k1 开头(在b_k = 1; 行中,然后变为2(在b_k = 2; 行中);显然这是块内部的变化。不知道为什么它在那里,但它就在那里。 我编辑了帖子,更重要的是,第二个循环重复没有任何代码更改! 我同意这很奇怪。更重要的问题——它有效吗? 是的,它有效,令我惊讶的是,总体而言,大函数比我所比较的 c++ 代码快 50% 【参考方案1】:

我无法解释为什么生成的代码会这样结束,但它一定与您编写 Matlab 代码的方式有关。它看起来很奇怪,但如果它有效,那么它可能并不重要。

如果您对生成器感到好奇,请从非常简单的事情开始,并观察生成的代码如何随着您的代码变得更加复杂而发生变化。尝试以下变体:

z = min(x, y);

z = max(w, min(x, y));

for i = 1:length(v)
    z(i) = max(w, min(v(i), y));
end

继续一点一点地修改测试代码,让它像提示这个问题的代码一样,也许你会确切地发现是什么触发了你所看到的结果。

【讨论】:

以上是关于matlab c 嵌入式编码器代码的主要内容,如果未能解决你的问题,请参考以下文章

Windows下如何使用Matlab嵌入式编码器为LINUX编译?

如何使用 matlab 编码器将 matlab 函数“pchip”转换为 c 代码

Matlab 编码器:Matlab 数组到 C 数组

Matlab 编码器 fzero 函数

数组和 matlab 编码器的问题

基于ODBTC有序抖动块截断编码和DCT域数字水印嵌入提取算法matlab仿真