This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28374S:CLA 数学精度

Guru**** 2539500 points
Other Parts Discussed in Thread: C2000WARE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1381483/tms320f28374s-cla-math-accuracy

器件型号:TMS320F28374S
Thread 中讨论的其他器件:C2000WARE

工具与软件:

您好!

关于 CLA 数学精度的一个疑问:

1) 1)使用 DataROM;

2) fresult=claacos(fval)被调用;

结果 为:  

fval=0.98、fresult=0.20128

fval=0.985、fresult=0.17343

fval=0.99、fresult=0.14221

fval=0.999、fresult=0.074669、精度不好

fval=0.9999、fresult=0.067115、准确度不太好

 来自 windows 计算器的值。

有什么办法来改进它?  

非常感谢。

BR, Jordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jordan、

     CLAacos()函数的算法如下:

    该算法使用硬编码到 ROM 中的系数进行计算。 我能想到的唯一选项是对算法进行编辑以提高准确度(函数定义位于:[C2000Ware install]/libraries/math/CLAmath/c28/source/CLAacos.asm 中、或者您可以使用 ROM 查找表自行实现算法)。 您也可以使用更精确的值制作自己的查找表、并将其复制到 CLA LSRAM 中使用;不过、这可能会占用大量的 LSRAM 空间。

    由于这些都是 耗时且难以实施的解决方案、因此我很遗憾地认为没有好方法来提高准确度。

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Delaney,

    对于 CLAacos ()、CLAsin ()等,算法中提到了一些关键字,如"index"和"table"。 这是否意味着这些函数使用了查找表?

    我尝试了禁用查找表、并切换到库"cla1_math_LIBRARY_fpu32"。 这些函数的结果始终为"0"。  

    非常感谢。

    BR, Jordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jordan、

    对于 CLAacos ()、CLAsin ()和其他人,从算法中,提到了一些关键字,如"index"和"table"。 是否意味着这些函数使用了查找表?[/QUOT]

    是的、是这样。 "索引"是指 ROM 中的 acos 表中的索引、"表"是指 acos 表本身。 查看 ROM 表的内容可能会有所帮助;这些表显示在同一文件夹的 CLAacosineTable.asm 文件中。

    我尝试禁用查找表并切换到库"cla1_math_LIBRARY_fpu32"。 这些函数的结果始终为"0"。  [报价]

    请确保您遵循中的所有步骤 4.3将库集成到您的项目中 CLA 数学用户指南(此处为链接)的一节、介绍了如何在不使用 ROM 表的情况下使用 CLA 数学库。  

    此致、

    Delaney

    [/quote]
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Delaney,

    是的、"将库集成到您的项目中"、下面将进行这些操作。

    但是,从源文件(如 CLAacos())中可以看到,有"index"和"table"。 它们使用的是 ROM 表、而不是计算。  

    BR, Jordan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Jordan、

    是的、CLA 数学函数始终必须使用查找表进行计算。 如您所见、ROM 表包含硬编码值、因此除非值本身更为精确或执行更为精确的计算、否则无法更改计算精度。  如果您禁用 ROM 查找表、并使用库的非 datarom 版本、则应将相同的表复制到 LSRAM 中、而"index"和"Table"属性对应的是这些表。  

    在 CLA 上执行三角函数需要查找表、因为 CLA 无法像 C28x CAN 那样调用 math.h 库中包括的 TRIG 函数、因为标准头文件(包括 math.h)并不是为 CLA 编译的。  

    此致、

    Delaney

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Delaney。

    BR, Jordan