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.

[参考译文] TMDSLCDK138:对 DSPLIB 的怀疑

Guru**** 2587345 points
Other Parts Discussed in Thread: TMDSLCDK138

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/633312/tmdslcdk138-doubts-with-dsplib

器件型号:TMDSLCDK138

大家好、我将 TMDSLCDK138用于我的应用。 到目前为止、我成功地使用 EDMA3和 McASP 将采样从编解码器传输到外部存储器、然后将它们发送回编解码器、而无需进行任何处理。

我想对样本应用对称 FIR 滤波器、为此我查看了 DSPLIB。 特别是、我下载了软件包 DSPLIB_C674x_3_4_0_0。

虽然它具有通用 FIR 滤波功能、但没有用于应用对称 FIR 的功能。 为什么? 我曾认为、原因可能与架构有关、使用此类 FIR 实现没有优势。

我没有使用任何这样或任何东西、这都是从头开始使用的代码、但我想优化 DSP 操作。

抱歉、如果这不是合适的论坛、请提前感谢。

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

    我已将您的疑问转发给软件专家。 他们的反馈应发布在此处。

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

    您是否在寻找对称 FIR 滤波器的浮点或定点实现。 DSPLib C64x+ DSPLib 中可能存在 FIR 滤波器的定点实现。 我还在内部检查我们是否可以为您的开发工作分享一些内容。

    software-dl.ti.com/.../index_FDS.html

    C674x 与 C64x+架构兼容、因此代码可在 C674x DSP 上重复使用。

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

    我相信(FWIW),你在思考“建筑... 使用这种类型的 FIR 实现没有优势"。 对称 FIR 的计算优势来自于无需加载如此多的系数。 但是、C674x 存储器架构是专门设计的、能够为乘法累加运算、特别是 FIR 填充处理流水线。

    您可以想象地开发一个对称 FIR、它具有一些可用的 D 单元插槽、可以用其他方式使用。 但这需要在另一种算法中与 FIR 代码进行输入、这不是 TI 可以尝试开发的。 而且也不会更快地获得 FIR 结果。

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

    来自编解码器的24位样本保存在 Int32缓冲器中、我稍后将其转换为浮点进行处理。 在进行处理后、我使用_spint 将浮点值舍入到最接近的整数。 我假设这将有助于降低量化噪声。

    因此、原则上、我正在寻找浮点实现。

    RandyP

    无论采用哪种方式、我都意识到我需要使用循环缓冲的自己实现。 www.ti.com/.../spra645a.pdf 文档 提出了一个有趣的概念、我想我将尝试加以利用。

    我的申请需要小数延迟、我使用具有 FIR 差异的结构来实施、该结构基于 Soo-Chang Pei 和 Chien Cheng Tseng 的一封信。 微分器需要具有反对称性、中间为零、系数数量为奇数。 因此、我无法使用 DSPLIB。

    我想我可以做的是使用循环寻址以高效的方式实现循环缓冲器、然后实施我自己的 asm 版本的异步 FIR。 考虑到我对处理器的内部架构了解很少、我需要做一些工作、但我会尝试一下。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    菲德尔

    您会注意到、TMS320C6000上的循环缓冲应用手册是在 C6000器件首次发布时于2001年发布的。 当时、大多数 DSP 代码都是用汇编语言编写的、我们的大部分培训都是一个查看每个汇编指令的处理器。 C 编译器开始更高效地工作后、我们停止教授汇编编码、并开始教授编译器优化。

    为了实现向后兼容性、C6748内核中保留了循环寻址模式。 但不建议任何人使用 C 语言编写。如果您的整个应用程序将以汇编语言编写、并且仅此任务、则您可能没有太多问题。 否则、您必须保护循环寻址代码不会被任何使用 C 代码的内容中断、包括 TI-RTOS。 而且、一旦 FIR 执行完毕、您就必须将循环寻址完全恢复为标准寻址、并准备好允许 C 代码运行。

    我建议不要这样做、最好使用 C 编码和 DSPLIB 来实现您需要执行的操作。 通用 FIR 实现将为您提供高效且容易得多的实施。 使用 EDMA3高效地移动数据、以实现所需的任何缓冲器结构。

    这些只是我自己的建议。 您可以评估未来的任务并找到完成任务的最佳方法。 请告诉我们您的项目是如何完成的、并在论坛上分享您学到的知识。

    请单击上面主题中的绿色"已解决"按钮、以显示您满意。

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

    Randy、您好、感谢您的建议。

    我目前正在汇编语言中编写一个例程、该例程同时执行两个 FIR 滤波器、每个寄存器组和功能单元块一个。 我在过去两天对代码进行了优化、现在我使用了四个累加器和双字负载来实现最高效率。 我已经查看了 DSPLIB 附带的函数 DSPF_sp_fir 的 C 代码、我怀疑它几乎是一样的、除了一个 FIR。

    关于循环寻址和中断、我需要更深入地研究这个问题、但下面是我在发布您的帖子之前的想法:

    1) 1)使用 C 实现循环缓冲区、但使用汇编例程和循环寻址移动指针、而不是使用 C "if"来检查边界。 到目前为止、我认为这会更高效。 当然、每次我进入汇编代码段时、我都需要中断并更改寻址模式、当我退出时也要执行相同的操作。

    2) 2)使用我的汇编"double FIR"对样本应用多个 FIR、使用循环寻址从循环缓冲器的存储器区域读取。 当然、我所说的中断和寻址模式变化也适用于这里。

    具体的问题是什么、除了它更复杂? 更改存储器寻址模式和禁用中断的整个过程也许不值得? 我应该说我只有一个中断、EDMA3传输完成、并且由于 EDMA3传输了一个固定大小的缓冲器、所以我需要在下一次中断之前结束采样的处理。

    如果您仍然建议我用 C 语言编写所有内容、我将查看 funcion DSPF_sp_fif_gen 的代码、并在其中创建我自己的函数。 尽管我不知道编译器在多大程度上可以完美地利用所有寄存器和单元。

    顺便说一下、我确认实现对称 FIR 没有意义。 实际上、没有优势、更糟糕的是。 您可以使用环路展开来检查它。

    此致、

    菲德尔

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

    由于一个帖子被标记为已应答、此主题已关闭。 我看到您发送的一封电子邮件、但我在这里看不到该帖子。 我不知道它是否被阻止。 您是否删除了它?

    如果被阻止、您可能需要启动一个新的线程或拒绝应答标志。 我不能肯定这些限制。

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

    您好!

    是的、我删除了帖子。 这是一个 ASM 功能、但我意识 到它有几个错误、性能测试不是使用 L2存储器完成的、因此结果不适合与 DSPLIB 基准进行比较。 使用 L2存储器、性能非常出色。 不管怎样,我的原始问题在这一点上都不能解决。

    此致、

    菲德尔。