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.
你好。
我正在研究 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
感谢你的答复。
我查找此参考的原因是不再 提供"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 算法似乎遵循了本站点中提到的算法:
您需要知道算法本身的每个步骤是否有特殊原因? 如果您可以告诉我更多详细信息、例如您需要了解时序或存储器要求、我可能会提供更好的答案。
此致、
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