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.

[参考译文] CCS/TMS320C5505:平方根实现

Guru**** 2589280 points
Other Parts Discussed in Thread: TMS320C5505

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/587934/ccs-tms320c5505-square-root-implementation

器件型号:TMS320C5505

工具/软件:Code Composer Studio

大家好、


我想编写自己的平方根函数、即用于 TMS320C5505 eZdsp 的 CCS。

输入是音频信号信号。


我想对该输入进行平方根运算。

我不能在 DSP 库中使用 sqrT_16函数、因为它只能找到16位数的平方根、但我需要32位数的平方根。

有人知道如何为 DSP 编写平方根代码吗? 我对 DSP 非常陌生。

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

    我已将此内容转发给 C5000软件专家。 他们的反馈应发布在此处。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从 Jeff Axlrod 1.00、A. Aboagye、8/31/98中查看"sqrtv"、N = 5、您得到的精度= 100 * 2/32767 = 0.0061%、这非常快
    您可以将其更改为32位-只需一个小表和20个 ASM_LINES...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Lars、

    感谢您的回复。
    在哪里可以找到 Jeff Axlrod 1.00、A. Aboagye、8/31/98的"sqrtv"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好,好的,现在它被命名为“来自李源01/30/2002”,但我今天早上已经检查了。 这已经不多了
    然后是 Jeff Axlrod 中的版本的中文副本和粘贴、其中包含大索引(XAR5/XAR6)和 SI_Bug 解决方法。
    所有的组合都是一样的! 您可以在 DSPLIB/55x_src 中找到它
    -创建一个长表、直至2^31 -不仅是30、然后查看此表、然后可以创建一个无符号版本、直至65000^2

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

    实际上、我对 DSP 非常不熟练。
    我尝试在 PC 中找到 DSPLIB/55x_src 文件夹、但没有找到它。
    我在该位置找到了一个 src 文件夹
    C:\ti\ccsv6\tools\compiler\c6000_7.4.18\lib\src
    但 src 文件夹没有"sqrtv"文件

    您能告诉我在哪里可以获得 DSPLIB/55x_src 吗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它是 CSL 的一部分-实际是307从 TI 的站点获取它
    但下一个问题是"如何更改为32位..."
    您知道 C55 ASM 吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    感谢您的回复。
    实际上、我最近在大约2个月前开始使用 DSP。
    我只处理了 c 编码、而不是汇编。
    我不太熟悉 C55 ASM。


    下面是用于生成正弦波平方根的 c 代码。 首先、我要将负值转换为正值、即将范围"-32767至32676"转换为"0至32767"。 一旦输入仅为正、我将使用平方根函数获取输入的平方根。

    signed short int generate_squareroot (signed short int 输入)

    signed short int SquareRoot = 0;
    signed short int SquareRoot2=0;

    输入=输入>> 1;
    输入=输入+ 0x3FFF;

    SquareRoot =输入;
    sqrT_16 (&SquareRoot、&SquareRoot2、1);//获取正弦曲线的平方根并将平方根存储到 SquareRoot 中
    返回 SquareRoot2;



    但正如您看到的、sqrT_16只能接受16位输入。 如果输入是16位、它可以取0到32767之间的任何值。 但是、一旦平方根完成、信号可以取0到181的值。 因此、当我平方根时、我会失去很多精度。

    我计划在0到2^31范围内提供输入、以便其平方根可以取0到2^15.5之间的值

    您是否认为有可能
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    uint32_t root = 0;
    uint32_t 位;

    对于(位= 0x80000000L;位> 0;位>=1)

    uint32_t trial = root + bit;
    if ((uint64_t) trial *(uint64_t) trial < input)(如果(uint64_t) trial *(uint64_t) trial

    root +=位;


    返回根;


    缓慢版本...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    非常感谢您的及时帮助。 我会尝试这个、并会返回给您。
    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    根据您的建议、我尝试了以下代码。 但它似乎不起作用。 在下面的情况下、输出等于输入。

    // 32位数的平方根
    signed long int generate_squareroot (signed long int 输入)

    signed long int SquareRoot = 0;
    signed long int root = 0;
    带符号长整型位;
    signed long int trial =0;

    //将输入范围从(-2^31)-(2^31)转换为(0)-(2^31)
    输入=输入>> 1;
    输入=输入+ 0x3FFFFFFF;

    SquareRoot =输入;

    对于(位= 0x40000000L;位> 0;位>=1)

    试用= root + bit;
    if ((unsigned long long) trial *(unsigned long long) trial < SquareRoot)(如果(unsigned long long)试用*(unsigned

    root +=位;


    返回根;