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.

[参考译文] TMS320F28379D:在 RFFT_ADC_F32.asm 文件中查找参考论文或算法手册。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file

器件型号:TMS320F28379D

你好。  

我正在研究 TMS320F28379的 RFFT DSO 库。

我想我理解为什么为 MCU 的基本算法实施2N 实数输入 RFFT。  

但我无法理解 RFFT_ADC_F32.asm 文件中使用的算法。   

例如、代码说明、

;; 1) Bit reverse input data and calculate stages 1, 2 & 3:
;;
;;  In Buf (read in bit reverse order)                             Out Buf
;;  +----+                                                          +----+
;;  | I1 | (((I1 + I2) + (I3 + I4)) + ((I5 + I6) + (I7 + I8)))/8 -> | I1'|
;;  | I2 | ((I1 - I2) + COS*((I5 - I6) + (I8 - I7))          )/8 -> | I2'|
;;  | I3 | ((I1 + I2) - (I3 + I4)                            )/8 -> | I3'|
;;  | I4 | ((I1 - I2) - COS*((I5 - I6) + (I8 - I7))          )/8 -> | I4'|
;;  | I5 | (((I1 + I2) + (I3 + I4)) - ((I5 + I6) + (I7 + I8)))/8 -> | I5'|
;;  | I6 | (COS*((I8 - I7) - (I5 - I6)) - (I4 - I3)          )/8 -> | I6'|
;;  | I7 | ((I7 + I8) - (I5 + I6)                            )/8 -> | I7'|
;;  | I8 | (COS*((I8 - I7) - (I5 - I6)) + (I4 - I3)          )/8 -> | I8'|
;;     .
;;     .
;;    \|/
;; Repeat above FFTSize/8 (i.e. if FFTSize = 1024, Repeat = 128 times)

我觉得这个部分扩展了8点 DFT、但它不能与我预期的结果相匹配(使用 N 复数 DFT 的2N 实数 DFT)。  

如果有参考文件或书籍、请指导我了解代码。  

我是 MCU 使用 DSP 方案的初学者。 我想知道、您是否能轻轻地指导我们找到目标。  

谢谢你。

此致。  

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

    您好、Miles、

    您可以参考下面的 FPU 软件库指南、但遗憾的是、我认为它在解释这些函数如何在后端工作方面没有提供太多的说明(因为您必须阅读汇编文件中的注释)。

    [引用 userid="506901 " URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file ]]我认为该器件具有8点 DFT、但它与我预期的结果不匹配

    这看起来只是设置 第1-3阶段的第一步、而在第4阶段和以上阶段结束时、您应该得到结果。 我之前没有深入介绍过算法、但如果您的应用要求您全面了解这一点 、我可以尝试逐步了解确切的算法。

    此致、

    Omer Amir

    e2e.ti.com/.../FPU_5F00_SW_5F00_LIB_5F00_UG.pdf

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

    感谢你的答复。

    我查找此参考的原因是不再   提供"FPU_SW_LIB_UG.pdf"中的衍生 URL 链接(即">www.engineeringproductivitytools.com/.../PT10.HTM")。  

    我认为这是了解"FPU_SW_LIB_UG.pdf"中使用的算法的关键之一

    是否有任何方法可以找到链接的内容?  

    如果是、我可能会更容易理解。  

    此外、感谢您的参与、请听取此评论。  

    [引用 userid="515979" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file/4381071 #4381071"]我之前没有过多深入了解算法,但如果您的应用要求您全面了解这一点,我可以尝试 逐步了解准确的算法。

    谢谢你。  

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

    您好、Miles、

    我能够使用"回送机器"找到网页的存档版本 :https://web.archive.org/web/20180312110051/http://www.engineeringproductivitytools.com/stuff/T0001/PT10.HTM

    如果您仍然需要我分解 rfft_ADC_F32函数中的算法、请告诉我。

    此致、

    Omer Amir

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

    我很抱歉。  

    您恢复的链接没有解释我认为的算法。  

    这只是在 spra291.pdf 中解释的理论问题。  

    请细分 rfft_adc_F32函数中使用的算法。  

    特别是我提到的1/2/3级的代码等。  

    谢谢你。  

    此致、  

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

    您好、Miles、

    我将介绍该算法、并尝试提供足够的说明。 请留出一些延迟时间、因为 可能还需要一些时间来联系 一些维护软件的专家。

    此致、

    Omer Amir

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

    您好、Miles、

    我无法与参与在 DSP 库中编写算法的任何专家取得联系、但从我在汇编中查看的结果来看、FFT 算法似乎遵循了本站点中提到的算法:

    https://www.dspguide.com/ch12/2.htm#:~:text=The%20FFT%20operates%20by%20decomposing,into%20a%20single%20frequency%20spectrum。

    您需要知道算法本身的每个步骤是否有特殊原因? 如果您可以告诉我更多详细信息、例如您需要了解时序或存储器要求、我可能会提供更好的答案。

    此致、

    Omer Amir

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

    感谢您的回复。  

    首先、要实现的目标是使用具有 TMS320F28379D 的 SDFM 结果实时执行 RFFT。  

    本论坛的一些专家建议、这是从 RFFT 示例开始的好方法。  

    在我研究了这些示例之后、所有示例都使用 RFFT_ADC_F32.asm 文件作为 FFT 库的构建块。  

    因此、如果不了解代码、包括基于 FFT 的理论、我就无法对其进行管理。  

    不幸的是、我只是汇编语言的初学者、因此我无法理解汇编代码。  

    因此、我想从政治等式开始、然后我最终可以将汇编代码与等式匹配。  

    但无论如何,如果不能找到任何专家,我可以从基础开始。

    [引用 userid="515979" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file/4387560 #4387560">您是否需要了解算法本身的每个步骤? 如果您可以告诉我更多详细信息、例如您需要了解时序或内存要求、我可能会提供更好的答案。

    我的 ADC 结果数据来自 SDFM。 因此数据格式是"有符号16位整数"。  

    ->但我认为   RFFT_ADC_F32.asm 的输入格式是"无符号12位整数"  

    2.一些评论说,输入数据必须对齐。 但我无法确定已加算法的数据和未对齐数据之间的差异

    输入数据必须进行位反转。 因此、它可以在"_rfft_adc_f32_Stages1and2and3and BitReverse:"的起始点执行。  

    _rfft_adc_f32_Stages1and2and3andBitReverse:
    ;----------------------------------------------------------------------
    ;     Save all save-on-entry registers used
    ;----------------------------------------------------------------------
            PUSH     XAR1
            PUSH     XAR2
            PUSH     XAR3
            MOV32    *SP++,R4H
            MOV32    *SP++,R5H
            MOV32    *SP++,R6H
            MOV32    *SP++,R7H
            ADDB     SP,#14h
    
            MOVL     XAR2,*+XAR4[0]         ; &Inbuf
            MOVL     XAR5,*+XAR4[2]         ; &Outbuf
            SUBB     XAR5, #2
            MOVL     XAR4, XAR5
            MOVL     XAR5,*+XAR4[2]         ; &Outbuf
            MOVL     XAR3,*+XAR4[2]
            ADDB     XAR3,#8                ; &Outbuf[4]
            MOVL     XAR7,*+XAR4[4]         ; &CosSinbuf
    
            MOV      AR0,#0Ah
            MOV      AH,*+XAR4[AR0]         ; FFT SIZE
            LSR      AH,1                   ; FFT SIZE/2 - for 16-bit input data
            MOV      AR0,AH
    ;       LSR      AH,3
            LSR      AH,2                   ; for 16-bit input data
            SUBB     AH,#1                  ; (Size / 8) - 1
            MOVL     XAR1,#0000h            ; index if memory is not aligned
    
            RPTB    _rfft_32_Last, AH

    从第16行到第19行、"SubB   XAR5、#2"的用途是什么?

    谢谢你。  

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

    您好、Miles、

    [引用 userid="506901 " URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file/4390917 #4390917"]在我研究了这些示例之后,所有示例都使用 RFFT_ADC_F32.asm 文件作为 FFT 库的构建块。

    您是否意味着所有示例都将 rfft_adc_F32函数用作 FFT 库的构建块? 由于情况并非如此、因此有许多示例使用不同版本的 FFT 函数(复数、实数、窗口化、 ADC 输入等)、 这只是将定点输入转换为浮点输出的唯一方法

    [引用 userid="506901 " URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file/4390917 #4390917"]

    我的 ADC 结果数据来自 SDFM。 因此数据格式是"有符号16位整数"。  

    ->但我认为   RFFT_ADC_F32.asm 的输入格式是"无符号12位整数"

    [/报价]

    rfft_ADC_F32函 数用于处理来自12位 ADC 的输入数据、因此我相信您需要将其转换为该格式或将数据转换为浮点格式。 虽然从技术上讲 、FFT 句柄使用 uint16_t 指针、但这可能只是因为没有 uint12_t 数据类型。 当我浏览源代码时、不会立即发现它不接受16位输入、但在您的器件上测试该输入应该没有任何危害。

    [引用 userid="506901 " URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file/4390917 #4390917"]2. 一些评论说,输入数据必须对齐。 但是、我无法确定已对齐数据和未对齐数据之间的差异

    这本质上是指一些 FFT 函数的要求、这些函数利用一些空间优化来加速 FFT 本身。 要对齐数据输入、您需要将其分配到 RAM 或闪存中适合您正在处理的数据大小的边界上。 例如、如果  要处理数组中的1024个16位元素、则必须将数组及其元素分配到存储器位置、例如0xFC00或0x5800、其中最后10位(2^10=1024)基本上为0。 这将是1K 边界。 对于每个元素大小为32位的浮点输入、这需要是2K 边界、等等。 我认为对于内存对齐函数、 任何数组都必须进行内存对齐才能正确使用。

    但是、如果需要、可以放弃使用函数的内存对齐版本、只需使用名称末尾带有"u"的函数。

    [引用 userid="506901 " URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164736/tms320f28379d-looking-for-reference-paper-or-book-of-algorithm-in-rfft_adc_f32-asm-file/4390917 #4390917"]3. 输入数据必须进行位反转。 因此、它可能在"_rfft_adc_f32_Stages1and2and3andBitReverse 的起始点执行:"[/quoteale]
    从第16行到第19行开始执行、"SubB   XAR5、#2"
    的作用是什么?

    这 是在 FFT 函数本身内完成的、您无需执行任何操作。 此注释只是对源文件中发生的情况的描述。 您无需自己呼叫。 如果您仍然希望我尝试找出答案、请告诉我。

    您可以查看示例如何利用该函数来查看需要初始化的内容以及要预先调用的函数。 如果您 对示例中完成的步骤有任何疑问、我可以帮助 澄清。

    此致、

    Omer Amir

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

    感谢你的答复。  

    我一直在搜索该算法、我认为它与离散 Hartley 变换和 Fast Hartley 变换非常相似。  

    我将进行更多调查、并制作另一个主题以供进一步提问。  

    谢谢你。  

    此致。  

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

    您的欢迎里程。 我现在将此主题标记为已解决、但如果您有其他问题、请随时答复。

    此致、

    Omer Amir