定点 MATLAB DSP 算法

Posted

技术标签:

【中文标题】定点 MATLAB DSP 算法【英文标题】:Fixed Point MATLAB DSP Algorithm 【发布时间】:2011-06-13 15:08:36 【问题描述】:

我有一个关于在 MATLAB 中为 Texas Instruments 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 吗?

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

【问题讨论】:

【参考方案1】:

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

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

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

以下指向有关此主题的录制网络研讨会的链接应该很好地介绍了使用定点工具箱的过程: http://www.mathworks.com/wbnr38838

HTH。

【讨论】:

漂亮,谢谢!有没有机会我可以联系到您,因为我似乎正在使用您使用的确切工具? @JGord 你可以查看我的个人资料以查看我的全名。名。 mathworks.com 的姓氏是我的电子邮件。我在 MathWorks 工作并管理定点工具箱。我当然可以帮助您解决问题。【参考方案2】:

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

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

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

【讨论】:

+1。挑剔一点,从 32 位到 16 位操作确实会变得更快,但是从 16 位到 8 位并不会让它变得更快。 感谢尼尔斯和吉姆。为什么不是吉姆?另外,我意识到您可能无法回答这个问题,但是您知道“慢得多”是否会消除实时处理的能力吗?正如你所知道的,我对整个 DSP 事情真的很陌生。以前只做过简单的 8 位微控制器。 C64xx 有很多定点指令,但它们都采用 32 位或 16 位输入(尽管有特殊情况例外)。下降到 8 位很可能不会给你更多的速度。相反,编译器将选择 16 位定点指令。收获不多,但精度损失了。 啊,明白了。我一直想通过指令集,但 TI 的文档太密集了,我还没有到达那里。这就是你想到吉姆的原因吗?

以上是关于定点 MATLAB DSP 算法的主要内容,如果未能解决你的问题,请参考以下文章

如何在FPGA上建立MATLAB和Simulink算法原型

导出CCS3.3数据及使用matlab处理的方法

DSP视频教程DSP视频教程第5期:Matlab生成C算法文件在STM32上运行,相比Simulink生成C工程具有更广泛适用性(2022-03-27)

视频中固定点的Matlab图像稳定

MATLAB里将十进制负小数转换成十六进制数

如何对matlab画出的曲线中的定点进行打标记(并进行标记)