MSP430FR5994用LEA的512点FFT问题

我们正参考“TIDM-FILTERING-SIGNALPROCESSING”设计,这个例子的代码是完成"256-point complex FFT",
我们需要改成“512-point comples FFT”,但是在“LEARAM”上出现问题。

看资料上,LEA模块变量必须定义在LEARAM内,必须小于4k字节,不能大于3783字节(0x3ac7-0x2c00 = 0x0ec7),是这样吗?
例子代码中定义的LEA变量:
struct FftData_s
{
_q15 input[VECTOR_SIZE*2];
_q15 samples[VECTOR_SIZE*2];
_q15 hamming[VECTOR_SIZE];
} fftDataParam;
VECTOR_SIZE=256,总共占用 2560字节(256*2*2+256*2*2+256*2)

我们要做512点FFT时需要将 VECTOR_SIZE改成512
这样变量占用内存就大于4k字节了。即使将AD采样只要一路采样
struct FftData_s
{
_q15 input[VECTOR_SIZE*2];
_q15 samples[VECTOR_SIZE];
_q15 hamming[VECTOR_SIZE];
} fftDataParam;
改成这样的结构,VECTOR_SIZE = 512,占用的内存正好4K字节。(512*2*2+512*2+512*2= 4096)
这样还是超过LEARAM的范围了,编译还是会报错。
请问这种情况有什么解决办法呢?是不用汉明窗吗?

5 个回复

  • 如您现在的情况,将VECTOR_SIZE 更改为512时将引发错误,因为它不再能够正确对齐LEA RAM中的所有不同变量。该示例可以配置为对输入数据执行FFT,FIR或IIR,因此所有这些变量必须能够以正确的对齐方式适合LEA RAM。

    另外TI设计中的hammingWindow是硬编码的,因此更改起来不是很简单。

    如果您的最终目标是仅测试512点FFT以查看其是否有效,则建议您查看DSPLIB中提供的示例(如下链接)并将样本大小更改为512,该示例可以构造一个可变长度的汉明窗

    software-dl.ti.com/.../transform_ex1_fft_fixed_q15_8c-example.html

     

    若是该回复回答了您的问题,请点击“确认此为答案”,谢谢

    If a post answers your question, please mark it with the "verify answer" button.

  • 回复 Susan Yang:

    谢谢您的回答,我们已经修改了DEMO code的程序,将FIR,IIR的内容都去掉了,是可以对齐到LEARAM的定义范围内的。
    也许您没有仔细看我们的问题。您的回答好像是e2e 英文社区里另一个问题的回复一样。
    您给出的那个链接的示例程序好像是一个256点 real fft的例子,我们想做512点的 complex FFT
    我们的问题是:LEARAM定义最大长度是小于4K字节的长度问题,
    然而,如果做512点的FFT,需要定义在LEARAM的输入输出数据 _q15 input[vector_size*2] 需要 2k字节(512*2*2),
    AD采样的数据 _q15 samples[VECTOR_SIZE] 需要1k字节(512*2),如果再加上512点的汉明窗数据_q15 hamming[VECTOR_SIZE];
    也是需要1k字节,那这三个变量的数组需要的LEARAM字节总共为 4K字节。这应该是超出了LEARAM的限定长度范围了。
    这样程序编译的时候就会报错,LEARAM超限制了。
    我们看到这几个变量在示例程序里,DSPLIB的函数里都用到了,所以觉得都需要定义在LEARAM里。
    这样就使得定义的变量长度超过了LEARAM允许的最大长度,这个问题有什么解决办法吗?还是我们理解有什么错误的地方?

  • 回复 user6140878:

    请问您是否有参考过

    www.ti.com/.../slaa698b.pdf

    在该文档内有相关代码下载以及结论说明

    Project collateral discussed in this application report can be downloaded from the following URL: www.ti.com/lit/zip/SLAA698

    以及

    Figure 12. 512-Point Complex FFT Running at 8 MHz With the LEA Module Enabled

     

    若是该回复回答了您的问题,请点击“确认此为答案”,谢谢

    If a post answers your question, please mark it with the "verify answer" button.

  • 回复 Susan Yang:

    您好!我们也参考国SLAA698的,它的程序的LEA输入数据是固定的处理过的数据,只需要在LEARAM定义 input[VECTOR_SIZE*2],不需要做别的数据处理,直接运行FFT的运算函数,所以LEARAM的定义不会超出4K字节的长度。
  • 回复 user6140878:

    The MSP430FR599x MCU family has a total of 8KB of SRAM, of which 4KB is shared with the LEA module for data input, output, and parameters.

    LEA RAM的长度为4KB。在查看.map文件时,您已经注意到一些内存分配给LEA堆栈。实际上,LEA模块是一个独立于MSP430 CPU的CPU。它需要使用堆栈,就像MSP430 CPU一样,才能调用函数并成功返回。

    一般是这样定义

    RAM       : origin = 0x1C00, length = 0x1000

    LEARAM                  : origin = 0x2C00, length = 0x1000 - LEASTACK_SIZE

    TI 诚邀您参加全新设计的产品页面测试,参加测试即可享有 TI 购物 9 折优惠码,点击加入 EP产品页面测试报名,名额有限。感谢您的参与!

     

    若是该回复回答了您的问题,请点击“确认此为答案”,谢谢

    If a post answers your question, please mark it with the "verify answer" button.