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.

[参考译文] MSP430FR6043:使用 LEA 计算实际 FFT/iFFT

Guru**** 2539500 points
Other Parts Discussed in Thread: MSP430FR6043, MSP430FR5994

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/836024/msp430fr6043-real-fft-ifft-calculation-using-lea

器件型号:MSP430FR5994
主题中讨论的其他器件:MSP430FR6043

您好!  

我们正在使用 MSP430FR6043评估实数 FFT/iFFT、发现了以下问题:

  • 使用 MSP_FFT_FIXED_Q15 ()将时域信号 A 转换为频域信号 B。
  • 使用 MSP_ifft_fixed_q15 ()将频域信号 B 转换回域信号 C。
  • 发现 A 与 C 完全不同,不是由精度损失引起的。

您能帮您研究一下吗?

感谢你的帮助。

Chofan

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

    器件型号:MSP430FR5994

    您好!  

    我们正在使用 MSP430FR6043评估实数 FFT/iFFT、发现了以下问题:

    • 使用 MSP_FFT_FIXED_Q15 ()将时域信号 A 转换为频域信号 B。
    • 使用 MSP_ifft_fixed_q15 ()将频域信号 B 转换回域信号 C。
    • 发现 A 与 C 完全不同,不是由精度损失引起的。

    您能帮您研究一下吗?

    感谢你的帮助。

    Chofan

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

    测试代码如下所示。

    提供的测试矢量是[0、1、2、3、4、 5、6、7、8、9、 10、11、12、13、14、15、 16、17、18、19、20、 21、22、23、24、25、26、 27、28、29、30、31]

    FFT 和 ifft 之后、它更改为[-11、-10、12、-11、6、 -3、14、-6、15、-3、 14、-10、22、-5、21、 0、27、2、12、1、 24、-1、20、2、25、 11、22、12、20、9、 13、12]

    #include "msp430.h"

    #include
    #include
    #include
    #include "DSPLib.h"

    define SAples 32

    /*输入信号和 FFT 结果*/
    DSPLIB_DATA (输入、MSP_ALIGIN_FFT_Q15 (样本))
    _q15输入[samples*2];

    void main (void)

     int16_t idx;
     MSP_STATUS 状态;
     MSP_FFT_Q15_params FFtParams;

     /*禁用 WDT */
     WDTCTL = WDTPW + WDTHOLD;

     对于(idx = 0;idx <样本;idx++)
     {
     input[idx]= idx;
     }

     fftParams.length =样本;
     fftParams.bitReverse = true;
     fftParams.twiddleTable = MSP_cmplx_twidde_table_32_Q15;

     /*执行具有固定比例的实数 FFT */
     状态= MSP_FFT_FIXED_Q15 (&fftParams、input);
     MSP_checkStatus (status);

     /*执行具有固定比例的实数 iFFT */
     状态= MSP_ifft_fixed_q15 (&fftParams、input);
     MSP_checkStatus (status);

     /*程序结束。 *
     __no_operation();

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

    您好、Chofan、

    我需要咨询我们的 DSPLIB 专家、然后再与您联系。

    BR、

    Leo

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

    当我读取该值时、您的输入为(a)振幅约为0.0009、非常接近重要性损失、(b)在极小的窗口中采样(无法与直流电相区分)。 我怀疑这个输出只是噪声。

    尝试使用 sin ()生成输入矢量。

    [编辑:固定奈奎斯特基准。]

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

    是否有此问题的更新? 我提供的测试矢量只是一个示例、无论测试矢量是多少、ifft 输出似乎总是不同的。

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

    您尝试了其他哪些测试向量?

    由于四舍五入误差、我不希望 FFT+IFFT 为位精确。 (不过、它应该是可重复的。) 在您发布的测试用例中、我希望舍入误差占主导地位。

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

    您好、Chofan、

    请尝试使用 MSP_cmplx_FFT_auto_Q15和 MSP_cmplx_ifft_auto_Q15函数以获得更高的精度。

     

    结果并不完美、但是对于您使用的示例、我们能够得到一条作为 IFFT 函数输出增加的线、如下所示。

     

    BR、

    Leo