Floating point 定点MATLAB-DSP算法

Floating point 定点MATLAB-DSP算法,floating-point,matlab,fixed-point,ti-dsp,Floating Point,Matlab,Fixed Point,Ti Dsp,我有一个关于在MATLAB中为德克萨斯仪器公司TMS320C64xx DSP编码算法的问题: 我已经在MATLAB中实现了一个粗略的过滤器。我的目标是使用MATLAB嵌入式编码器将该算法转换为C语言,然后将其导入CodeComposer Studio并加载到DSP上 要做到这一点,我知道我需要对我的MATLAB代码做一些事情。例如,我需要为矩阵预先分配空间,以便它知道生成矩阵的大小(除非我想处理大小可变的数据)。所有这些将MATLAB代码转换成C’ish代码的信息,以便MATLAB编码器能够将其

我有一个关于在MATLAB中为德克萨斯仪器公司TMS320C64xx DSP编码算法的问题:

我已经在MATLAB中实现了一个粗略的过滤器。我的目标是使用MATLAB嵌入式编码器将该算法转换为C语言,然后将其导入CodeComposer Studio并加载到DSP上

要做到这一点,我知道我需要对我的MATLAB代码做一些事情。例如,我需要为矩阵预先分配空间,以便它知道生成矩阵的大小(除非我想处理大小可变的数据)。所有这些将MATLAB代码转换成C’ish代码的信息,以便MATLAB编码器能够将其转换成我或多或少理解的代码。但是,我不知道如何确保我的数据类型(例如,我的过滤器的系数)是定点而不是浮点,以便MATLAB Embedded Coder将我的代码转换为只涉及定点数据类型的C

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

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

2) 有没有办法确保MATLAB嵌入式编码器不会创建浮点数据类型

3) 我需要使用MATLAB定点工具箱吗


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

我只能回答第一个问题:

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

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

  • 您可以使用浮点数据类型,但正如前面的答案所指出的,DSP将模拟浮点,执行速度将慢得多。这种类型的执行对于某些数值操作是可以的,其中 a) 你需要浮点数的精度 b) 和/或转换为定点通常是一种痛苦(如平方根)或并非始终可行, c) 和/或这些操作不会在程序中频繁发生,从而占用大部分CPU周期

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

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

  • 以下链接指向有关此主题的录制网络研讨会,可以很好地介绍使用定点工具箱的过程:


    +1。不过有一点吹毛求疵,从32位到16位的运算速度确实快得多,但从16位到8位并不能使它更快。谢谢Nils和Jim。为什么不是吉姆?另外,我意识到您可能无法回答这个问题,但是如果“速度慢得多”会取消实时处理的功能,您知道吗?正如你所知道的,我对DSP这整件事真的很陌生。以前只做过简单的8位微处理器。C64xx有很多定点指令,但它们都采用32位或16位输入(尽管在特殊情况下也有例外)。降到8位很可能不会给你更多的速度。相反,编译器将选择一条16位定点指令。收获不多,但精度损失。啊,明白了。我一直想看一下指令集,但TI的文档太密集了,我还没拿到。这就是你想到吉姆的原因吗?很好,谢谢!如果您有联系方式,我可以联系您,因为我似乎正在使用您使用的工具?@JGord您可以查看我的个人资料以查看我的全名。名字。mathworks.com上的姓是我的电子邮件。我在MathWorks工作,管理定点工具箱。我当然可以帮你解决你的问题。