4

我有一个关于在 MATLAB 中为德州仪器 TMS320C64xx DSP 编码算法的问题:

我在 MATLAB 中对我的过滤器进行了一个草率的实现。我的目标是使用 MATLAB Embedded Coder 将此算法转换为 C,然后我可以将其导入 Code Composer Studio 并加载到 DSP 上。

为此,我知道我需要对我的 MATLAB 代码做一些事情。例如,我需要为矩阵预先分配空间,以便它知道要制作它们的大小(除非我想对可变大小的数据大惊小怪)。所有将 MATLAB 代码转换为 C'ish 代码的操作,以便 MATLAB 编码器可以将其转换为我或多或少理解的内容。但是,我不知道如何确保我的数据类型(例如我的滤波器的系数)是定点而不是浮点,以便 MATLAB Embedded Coder 将我的代码转换为仅涉及定点数据类型的 C。

所以我想我的总体问题是:

1) 如果 C64xx 被指定为 32 位定点 DSP,这意味着如果我尝试使用浮点数据类型,它的编译器会抛出错误?

2) 有没有办法确保 MATLAB Embedded Coder 不创建浮点数据类型?

3) 我需要使用 MATLAB Fixed Point Toolbox 吗?

谢谢大家,让我知道是否还有必要的信息来回答我的问题。

4

2 回答 2

3

我只能回答你的第一个问题:

C64xx 是 32 位定点 DSP,但如果您使用浮点,编译器不会报错。生成的代码将运行良好,但会(很多)慢,因为将模拟浮点操作。

C64xx DSP 还可以做 16 位定点和混合 32x16 位定点。您使用的数据类型越小,生成的代码运行得越快。

于 2011-06-13T17:03:51.423 回答
3
  1. 您可以使用浮点数据类型,但正如前面的答案指出的那样,DSP 将模拟浮点数,执行速度会慢得多。对于某些数值运算,这种类型的执行是可以的在您的程序中不会经常出现占用大部分 CPU 周期的情况。

  2. 是的。MATLAB Coder 配置设置对话框中的“接口”窗格下有一个复选框,上面写着“仅支持纯整数”。检查这将确保您不会在生成的代码中获得任何浮点数据类型。但是,您首先需要确保在代码中仅使用整数/定点数据类型。此选项只是确保不生成浮点数 - 它不会自动从浮点 MATLAB 代码生成代码的定点或仅整数版本。

  3. 要真正创建定点 C 代码,您首先必须将浮点 MATLAB 代码转换为定点代码。您将需要定点工具箱,让您将变量指定为 FI 对象,并使用 FMATH 设置定义操作的定点规则。一旦为所有变量和操作定义了 16/32 位定点数据类型,您就可以对其进行模拟、分析结果并对其进行迭代以调整您的设置,以最大限度地减少溢出和舍入误差。然后,您可以生成一个真正的纯整数 C 代码,其行为与(或非常接近)您的定点 MATLAB 行为一样。您在定点 MATLAB 代码和定点 C 代码之间可能看到的任何差异主要是由于目标编译器引入的差异。

The following link to a recorded webinar on this topic should provide a good introduction to this process of using the Fixed-Point Toolbox: http://www.mathworks.com/wbnr38838

HTH.

于 2011-06-17T21:00:33.223 回答