定点MATLAB DSP算法

时间:2011-06-13 15:08:37

标签: floating-point matlab fixed-point ti-dsp

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

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

要做到这一点,我知道我需要对MATLAB代码做一些事情。例如,我需要为矩阵预先分配空间,以便它知道制作它们的大小(除非我想对可变大小的数据进行讨论)。所有按摩MATLAB代码到C'ish代码,以便MATLAB编码器可以转换它我或多或少了解。但是,我不知道如何确保我的数据类型(例如我的过滤器的系数)是固定点而不是浮点,以便MATLAB Embedded Coder将我的代码转换为仅涉及定点数据类型的C. / p>

所以我猜我的整体问题是:

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

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

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

谢谢大家,如果有更多信息需要回答我的问题,请告诉我。

2 个答案:

答案 0 :(得分:3)

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

C64xx是32位定点DSP,但如果使用浮点数,编译器不会抱怨。生成的代码运行正常但会(很多)慢,因为将模拟浮点运算。

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

答案 1 :(得分:3)

  1. 您可以使用浮点数据类型,但正如前面的答案所指出的,DSP将模拟浮点数并且执行速度会慢得多。对于某些数值运算,这种类型的执行是可行的 a)你需要浮子的精度 b)和/或转换到定点通常是痛苦(例如平方根)或总是不可行, c)和/或这些操作不会经常发生在程序中,以便占用大部分CPU周期。

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

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

  4. 关于此主题的录制网络研讨会的以下链接应该为使用定点工具箱的这一过程提供一个很好的介绍: http://www.mathworks.com/wbnr38838

    HTH。