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.

[参考译文] MSP430FR5994:使用LEA计算FFT

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/583803/msp430fr5994-fft-calculation-using-lea

部件号:MSP430FR5994

您好,

我有一位客户正在MSP430FR5994中评估LEA。
他使用加速度数据(x,y,z)作为输入,并使用LEA计算FFT。
这些输入值介于-40至+40 [m/s^2]之间。

现在我要回答以下问题:
Q1)根据DSPLIB API指南,只有Q15和IQ31格式可以用作定点类型。
因此,在LEA操作之前,所有输入值都需要在-1和+1之间标准化,并转换为Q15或IQ31格式,正确吗?

Q2) LEA支持的最大FFT长度是多少? 是否可以使用4096?

Q3)假设FFT长度为256,采样率为50Hz,我们获得256个输出数据。
Q3-1) 256数据如何对应于频率?
Q3-2)根据DSPLIB API指南,如果使用MSP_FFT_FIXED_Q15(),则输出值除以128。
(我想原因是为了避免溢出)
是否可以将结果乘以128以获得原始值?

Q4)输出值包括负值和正值。
通常,FFT结果仅为正值,例如当使用CCS“FFT Magnitude Graph”时。
是否有任何选择可以获得此类正值?

谢谢,此致,
Kot

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

    您好,Kot,

    1. Q15和IQ31是FFT功能的精度,分别在16位和32位输入上运行。 FFT的输入可以是任何整数或固定点类型,结果将是相同的格式,如果FFT的输入是整数数组,则结果也将是整数。
    2. LEA支持的最大FFT长度受可用RAM和对齐要求的限制。 MSP430FR5994具有共享RAM的4 KB ,但其中一些是分配给LEA堆栈的,因此FFT的最大大小为1024点(Q15为2048字节)。 如果将来的设备具有更多的共享RAM,则可以使用更大的FFT大小,但目前1024是使用LEA可能使用的最大FFT大小。
    3. FFT的结果是复杂对数组,256点实数FFT将有128个复杂对结果。 每个结果的频率分辨率是采样频率除以大小,因此在您的情况下,每个结果对应于0.195.3125万 Hz (50 Hz / 256)。 由于实际FFT仅计算频率范围的前半部分,因此结果范围为0 Hz (指数0)至24.804.6875万 Hz (指数127)。
    4. 结果被缩放以防止溢出,除非您要计算真正的FFT结果,否则不必进行缩放。
    5. 如上面的#3所示,每个结果实际上是一对复杂的结果。 复数对可用于计算幅度和相位,其幅度仅为sqrt (实数^2 + imag^2),相位为arctan (实数,实数)。 如果要获得与CCS FFT计算相同的结果,则需要在FFT之后执行此步骤。

    希望上述内容能回答您的问题,它也可能有助于进一步研究傅立叶变换,以便更好地了解它们是什么以及结果的含义

    此致,

    Brent Peterson

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

    您好,Brent,

    感谢您的详细回答!
    我能够获得FFT结果,并将其与Excel FFT计算的结果进行比较。
    请参阅随附的Excel表格以获取摘要。

    e2e.ti.com/.../FFT-with-LEA_5F00_iq31.xlsx

    在“Data to Hex”(十六进制数据)表中,被红线包围的数据用作LEA输入数组。
    在“LEA_X_FFT”,“LEA_Y_FFT”和“LEA_Z_FFT”工作表中,用红线表示的数据是LEA输出的数据。
    我计算了幅度,并将其与Excel数据分析(“Excel的FFT”表)计算的FFT结果进行了比较。

    如您所见,LEA和Excel结果的频率特征相同。
    但低浓缩铀结果中的绝对值幅度要高得多。
    您知道为什么会出现这种差异吗?

    谢谢,此致,
    Kot

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

    Kot,

    更具体地说,Excel工作表中LEA结果的大小正好是Excel参考FFT结果的两倍。

    正如Keith指出的那样,不同的FFT实施具有不同的扩展能力。 在这种情况下,结果按2进行缩放,因为您使用的是优化的Real FFT函数,该函数仅计算转换的前半部分(后半部分是围绕N/2镜像的前半部分的复数偶联物)。 最简单的思考方式是将频谱后半部分的组件包括在前半部分中,这样实际FFT的总功率等于复杂FFT的功率。 实际FFT算法在MSP_split_iq31函数的注释块中有更详细的解释,并引用了以下应用说明 :www.ti.com/.../spra291.pdf

    如果您修改代码以使用复杂FFT函数(MSP_cmplx_FFT_iq31),您将得到一个与Excel结果非常匹配的结果。 复杂的FFT函数平均需要两倍的时间,因此不建议在输入数据都是真实数据时使用它们,但您可以使用它们来比较结果。

    此致,

    布伦特

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

    您好,Brent,

    感谢您的详细回答。
    我了解实际FFT结果是参考FFT计算的两倍。

    我发现MSP_FFT_FIXED_Q15()提供了与MSP_FFT_iq31()不同的结果。
    MSP_FFT_FIXED_Q15()结果与Excel执行的参考FFT计算完全相同。
    请参阅附件。

    要将输入数据置于Int16刻度范围内,它们被除以3 (对于Y值)或15 (对于Z值)。
    因此结果乘以3 (对于Y)或15 (对于Z)。
    然后所有的X,Y,Z乘以128,因为MSP_FFT_FIXED_Q15()应用1/128的缩放系数。
    e2e.ti.com/.../FFT-with-LEA_5F00_q15.xlsx
    我认为MSP_FFT_iq31()和MSP_FFT_FIXED_Q15()都使用相同的实际FFT算法,除了:
    -输入数据格式(16或32位)
    -缩放(带或不带缩放)
    您知道为什么它们显示不同的缩放结果吗?

    谢谢,此致,
    Kot