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.

[参考译文] TMS320C5505:hwafft 输出

Guru**** 2952510 points

Other Parts Discussed in Thread: TMS320VC5505, TMS320C5505, TMS320C5515, TMS320C6748, TMS320C6747

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/663403/tms320c5505-hwafft-output

器件型号:TMS320C5505
主题中讨论的其他器件:TMS320VC5505、 TMS320C5515、 TMS320C6748、 TMS320C6747

尊敬的:

 我正在使用 hwafft.asm 函数来执行 FFT。

我提供的输入数组为 int32 ADC_OUT1[8]={1、2、4、8、16、32、64、128、};如果我得到的输出为  

实数部分和虚数部分如所示

255.0000000.000000
48.639610、166.066017
-51.000000,102.000000
-78.639610、46.066017
-85.000000,0.000000
-78.639610、-46.066017
-51.000000、-102.000000
48.639610、-166.066017

但我将获得的输出为

0、33

-20、7

-12、65530

-5、65527

0、65526

6、65527

13、65530

21、7.

我真的不理解我的错误,请告诉我它有什么错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    软件团队将收到通知。 他们将直接在此处发布反馈。

    请发布您正在使用的 SDK 版本。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    ccsv7.4
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的先生/ mam...plz、您好、我已解决了我的问题。。。。我一直坚持到这个问题
    我不明白
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    hello..plz 解决了我的问题...我为什么要获得这样的输出... 我 也遵循了您的勘误表...

    要从 DSP 的 ROM 中执行 HWAFT 例程、程序员必须满足数据和临时缓冲区的内存分配限制。 有关限制和权变措施的说明、请参阅特定于器件的勘误表:

    •《TMS320VC5505/VC5504定点 DSP 芯片勘误表》(芯片修订版本1.4)[文献编号 SPRZ281]

    •TMS320C5505/C5504定点 DSP 芯片勘误表(芯片修订版本2.0)[文献编号 SPRZ310]

    •《TMS320C5515/C5514定点 DSP 芯片勘误表(芯片修订版本2.0)》[文献编号 SPRZ308

    但我仍然得到相同的 issue..please 解决方案。

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

    有人回答我的问题...

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

    您好 Kanchan、

    您的数字看起来与 HWAFT 加速器所期望的值不同、具有定点符号。

    HWAFT 输入和输出2的补码16位定点 S16Q15小数、范围从-1到0.9999。

    最高有效位是符号位、后跟小数点和15小数位(S.QQQ QQQQQQ QQQQ QQQQ QQQ)

    从 S16Q15十六进制转换为十进制的示例:
    十六进制         十进制
    0x8000  =-1.000000000
    0x8001  =-0.999969482
    0xC000  =-0.500000000
    0x0000  =  0.000000000
    0x0001  =  0.000030518
    0x4000  =  0.500000000
    0x7FFF =  0.999969482

    我不理解您作为输出获得的数字(如-12和65530)。 这些必须是有符号32位数字。 有符号16位(不带任何小数点)的范围为-32768至37767。

    无论如何、您应该将输出解释为从十进制-1到0.9999之间的 S16Q15小数。

    假设您的输入 {1、2、4、8、16、32、64、128、}实际上是{0.000030518、0.000061035、0.000152588、0.000274658、0.000518799、 0.001007080、0.001983643、0.003936768}(请参阅下面的转换表)、FFT 结果现在是否合理? 您必须再次以 S16Q15格式解释这些数字。

    也许您可以以16位格式发布十六进制数字。

    您可以使用 MATLAB 通过以下代码转换为定点数:

    Nsig = 1024;
    fs = 16000;
    sig =零(1、Nsig);
    n = 0:(Nsig-1);%离散时间网格
    %add 纯正弦音调
    fK = 1000;
    sig =.5 * sin (2 * pi n*fk); %sinusoid
    
    SIG_FIXED = fi (sig、1、16、15);
    sig_fixed_hex = sig_fixed.hex; 

    我已附上创建下表的 Excel 工作表:

    /cfs-file/__key/communityserver-discussions-components-files/791/6574.S16Q15-fixed-point-numbers.xlsx

    位: 15. 14. 13. 12. 11. 10. 9. 8. 7. 6. 5. 4. 3. 2. 1 0  
    指数: 不适用 -1 -2. -3. -4. -5. -6. -7. -8. -9. -10 -11. -12 -13. -14. -15  
    位值: 符号 2 μ^(-1) 2 μ^(-2) 2 μ^(-3) 2 μ^(-4) 2 μ^(-5) 2 μ^(-6) 2 μ^(-7) 2 μ^(-8) 2 μ^(-9) 2 μ^(-10) 2 μ^(-11) 2 μ^(-12) 2 μ^(-13) 2 μ^(-14) 2 μ^(-15)  
    值: -1 0.5. 0.25. 0.125. 0.0625 0.03125 0.015625 0.0078125 0.00390625 0.001953125 0.000976563 0.000488281 0.000244141 0.00012207 0.000061035 0.000030518 十进制 值
    S16Q15: 0x8000 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1.000000000
    S16Q15: 0x8001 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 -0.999969482
    S16Q15: 0xC000 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -0.500000000
    S16Q15: 0x0000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.000000000
    S16Q15: 0x0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.000030518
    S16Q15: 0x4000 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.500000000
    S16Q15: 0x7FFF 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0.999969482
    输入 十六进制
    1 0x0001 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0.000030518
    2. 0x0002 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0.000061035
    4. 0x0004 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0.000152588
    8. 0x0008 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0.000274658
    16. 0x0010 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0.000518799
    32 0x0020 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0.001007080
    64 0x0040 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0.001983643.
    128 0x0080 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0.003936768

    希望这对您有所帮助、
    标记

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

    Mark、您好!

    非常感谢您对我们最期待的回复...

    感谢您提供的宝贵信息。

    我将获得所需的输出我是指理论输出(但舍入整数)、如果我将比例标志设置为1、即 SCAL_FLAG = NOSCALE_FLAG;

    但现在的问题是,HWAFFT 具有内置的功能 AS  

    uint16 hwafft_8pts (
    int32 *数据,
    int32 *暂存,
    int32 *重复_scratch、
    int32 *重复数据,
    UINT16 FFT_FLAG、
    uint16 scale_flag
    );

    其中 我只能传递整数值...如果我希望输入和输出都为浮点、该怎么办...

    如果我强制执行它、我无法将虚部和实部分离。如果我使用拼写检查来分离、则输出完全不同。

    plz 建议我该怎么做?

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

    您好!

    不用客气。 很抱歉耽误你的时间。

    HWAFT 加速器无法与浮点配合使用。 它仅使用介于-1到0.9999之间的16位定点。

    您可以从 float 转换为16位 int、转换、然后返回 float。 但 C55xx CPU 未针对浮点进行优化、它将需要多几个周期来执行浮点运算(在软件中)。

    我建议您使用此处理器固定点。

    希望这对您有所帮助、
    标记

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

    谢谢 Mark!

    U 意味着我必须只使用 typecasting 将 int 转换为 float。。。但我仍然无法获得准确的结果。。在这种情况下、我猜我需要更改处理器。 :(

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

    您的要求是什么? 浮点精度? 低功耗?
    推动浮点要求的动力是什么?

    也许您可以使用 C2000或 C6000 DSP。

    TMS320F2833x 和 TMS320C2834x 微控制器均提供原生浮点。

    TMS320C6747和 TMS320C6748也是可能的-它们都支持定点/浮点。 C6748具有更好的电源管理、并已用于便携式移动无线电。

    希望这对您有所帮助、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的建议!

    我的应用是测试和测量仪器应用、需要计算混合信号的相位角和频率。我该怎么办?。我是否使用同一个处理器?。我已经购买了 TMS320C5505 EVM USB 记忆棒来开发该应用。 实际上...我很难更改处理器、但我没有获得所需的输出...对吧? 或者是否有其他选项?

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

    为什么不尝试使用 DSPLib FFT 例程而不是使用硬件加速器。
    它们仍将是定点、但提供32位 FFT、这可能会为您提供足够的精度
    如果这些 FFT 例程为您提供了工作概念验证、那么您也许可以通过以后切换到 HWAFT 加速器来优化执行周期、该加速器限制为16位。

    DSPLIB: http://www.ti.com/tool/sprc100
    TMS320C55x DSP 库编程器参考: www.ti.com/.../spru422j.pdf

    CFFT: 正向复数 FFT
    CFFT32:32位正向复数 FFT

    您是否在 PC 上的 MATLAB 或 C 中使用 DSP 处理? 也许我们可以探究 C55x 的定点结果为何与您在浮点中所期望的结果不匹配。

    希望这对您有所帮助、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用 CCV7.4以 C 语言进行 DSP 处理的结果现在会得到匹配结果、但如果理论结果是57.98、则会得到57

    我的应用是测量 tan delta、其中我必须测量相位角、其精度应为0.00001  

    因此、如果 FFT 结果与此类似、我将无法实现所需的结果。

    使用 DSPLib 可以确保获得浮点或精确结果。

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

    您好 Kanchan、

    我搜索并找到了这个有用的网站、了解如何根据 FFT 结果计算相位:

    https://www.gaussianwaves.com/2015/11/interpreting-fft-results-obtaining-magnitude-and-phase-information/

    请注意、可能需要将接近零的纸槽脱粒。

    DSPLIB 包含优化的 atan 函数。

    * ushort atan16 (data *x、data *r、ushort nx)向量的反正切

    * ushort atan2_16 (data *q、data *i、data *r、ushort nx)向量的四象限反正切

    为什么不使用 MATLAB 来仿真 FFT 和反正切以找到相位、然后使用它的定点工具箱来观察量化噪声(从浮点到定点)的影响。

    信赖 Mathuranathan:
    -创始人兼作者@ gaussianwaves.com、获得了全球读者。 他是通信工程硕士、在通道建模方面拥有9年的技术专业知识、从事各种技术、从硬盘读取通道设计、GSM/EDGE/GPRS、OFDM、MIMO、3GPP PHY 层和 DSL。 他还专门从事各种主题的辅导、如信号处理、随机处理、数字通信等、 LinkedIn 个人资料