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:需要在 MSP430上执行16384点 FFT:如何最轻松地获取复杂的 Twiddle 因子

Guru**** 2593520 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/927092/msp430fr5994-need-to-do-16384-point-fft-on-msp430-how-to-most-easily-get-complex-twiddle-factors

器件型号:MSP430FR5994

MSP430 DSPLIB 为4096点 FFT 提供了一个分因子数组:

MSP_cmplx_Twiddle 表_4096_Q15

但是、对于16384点 FFT、它没有一个"现成"的文件。 是否有方法可以轻松生成一个可与库配合使用的库?

使用:

MSP_FFT_auto_Q15 (&fftParams、inSignal、&shift);

具体而言。

TI 网页的某些地方可能有一些特殊的实用程序代码?

我确实可以访问 Matlab、可以尝试编写一些代码来生成它们、但想知道是否有更好的方法来获得它们。

非常感谢任何人的阅读和回应。

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

    您好、 Greg、

    MSP430 DSPLIB 不附带可为任意大小生成 Twiddle 因子的实用程序代码。

    但下面是 Matlab 中为任何 N 创建 Twiddle 因子的实部和虚部的一些示例:

    N = 2048;

    N = 0:(N/2-1);

    tird_r = cos (2*pi*n/N);tird_i =-sin (2*pi*n/N);

    您必须包含上述定点转换(Q15格式):

    tird_r_fixPt = round (tird_r*(2^15)); tird_i_fixPt = round (tird_I*(2^15));  

    Srinivas

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

    太棒了! 谢谢!

    我刚才正在研究这个问题。  立即获取您的回复真是太棒了!

    不管怎样、我测试了它、它看起来运行正常!

    注意:对于来到这里并希望使用此代码的人员:

    TI 实用程序希望上述 Matlab 代码的输出采用以下格式:

    CONST _Q15 MSP_cmplx_twiddle_table_16384_Q15[DSPLIB_Table_offset+16384]={
    0x4000、0x0000、
    tird_r_fixPt (1)、 tird_i_fixPt (1)、 tird_r_fixPt (2)、 tird_i_fixPt (2)、...

    };

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

    以下代码将提供的代码合并到 Matlab 代码中、该代码生成包含字符串的文件、该字符串具有 TI 实用程序所需的常量数组表值。  根据 TI 提供的16位表进行测试时、以下代码会产生一个差异。  但是、我认为该代码提供的16个旋转因子输出更正确。  请原谅代码的丑恶性。

    %这计算了与 DSP 库一起使用所需的旋转因子
    %然后将它们打印到文件中、以便轻松合并到中
    % C 代码。
    百分比
    N = 16;
    N = 0:(N/2-1);
    tird_r = cos (2*pi*n/N);tird_i =-sin (2*pi*n/N);
    %您必须包含上述定点转换(Q15格式):
    tird_r_fixPt = round (tird_r*(2^15));tird_i_fixPt = round (tird_I*(2^15));
    fid = fopen ('tend.txt'、'w');
    如果 i=1:(N/2)、
      if (tird_r_fixPt (ii)>=0)
       if (tird_r_fixPt (ii)=32768)
         tird_r_fixPt (ii)= 32767;
       结束
      fprintf (fid、'0x%X、\n'、tird_fixPt (ii));
      其他
       fprintf (fid、'0x%X、\n'、BITOR (32768、32768-ABS (tird_r_fixPt (ii))));
      结束
      if (tifd_i_fixPt (ii)>=0)
        fprintf (fid、'0x%X、\n'、tifd_i_fixPt (ii));
      其他
        fprintf (fid、'0x%X、\n'、BITOR (32768、32768-ABS (t扭转_I_fixPt (ii))));
      结束
    结束
    fclose (fid);