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.

[参考译文] TMS320C6678:使用 DSPF_sp_ifftDPxDP 时、ifft 不正确

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/670072/tms320c6678-ifft-is-not-correct-when-using-dspf_sp_ifftdpxdp

器件型号:TMS320C6678

您好、香榭丽舍

客户使用 DSPLIB 3.1.0.0来实现 FFT 和 ifft、 DSPF_sp_fftDPxDP 的结果与 MATLAB 相同、但 DSPF_sp_ifftDPxDP 的结果与 MATLAB 不同、它们不是比例关系。  

客户已完成 标准化。

下面是他的代码。  

#include
#include
#include
#include
#include
#include
#include
#include


#define N 32.

#define PI 3.14159265358979323846

#pragma DATA_ALIGN (bev、8);
unsigned char brev[64]={
0x0、0x20、0x10、0x30、0x8、 0x28、0x18、0x38、
0x4、0x24、0x14、0x34、0xc、 0x2C、0x1c、0x3c、
0x2、0x22、0x12、0x32、0xA、 0x2a、0x1a、0x3a、
0x6、0x26、0x16、0x36、0xe、 0x2E、0x1E、0x3E、
0x1、0x21、0x11、0x31、0x9、 0x29、0x19、0x39、
0x5、0x25、0x15、0x35、0xd、 0x2D、0x1d、0x3D、
0x3、0x23、0x13、0x33、0xb、 0x2b、0x1b、0x3b、
0x7、0x27、0x17、0x37、0xF、 0x2F、0x1f、0x3f
};

#pragma DATA_ALIGN (f_src、8);
float f_src [2*N];
#pragma DATA_ALIGN (f_OUT、8);
float f_out [2*N];
#pragma DATA_ALIGN (f_tw、8);
float f_tw [2*N];

//static clock_t t_start、t_stop、t_开销;

用于生成特殊序列的 Twiddle 因子的函数*/
int gen_tw_1D_single (float *w、int n)

int i、j、k;

对于(j = 1、k = 0;j <= n >> 2;j = j << 2)

对于(I = 0;I < n >> 2;I += j)

w[k]=(float) sin (2 * pi * I / n);
w[k + 1]=(浮点) cos (2 * pi * I / n);
w[k + 2]=(float) sin (4 * pi * I / n);
w[k + 3]=(float) cos (4 * pi * I / n);
w[k + 4]=(float) sin (6 * pi * I / n);
w[k + 5]=(浮点) cos (6 * pi * I / n);
k +=6;

返回 k;

void main()

int 循环;

for (loop = 0;loop < N;loop ++)

f_src[loop * 2]=(float)(rand ()% 16383);
f_src[LOOP * 2 + 1]= 0;
printf ("%d\t"、(int) f_src[loop * 2]);

printf ("\n");

Gen_tw_1D_single (f_tw、N);

//TSCL=0;TSCH=0;
// t_start =_itoll (TSCH、TSCL);

/*
复数样本中 FFT 的*@param N 长度
*@param PTR_x 指向复杂数据输入的指针
*@param ptR_w 指向复数 Twiddle 因子的指针
*@param PTR_y 指向复数输出数据的指针
*@param brev 指向包含64个条目的位反向表的指针
*@param n_min 应为4如果 N 可表示为4的幂、否则 n_min 应为2
从主 FFT 开始、sub-FFT 的复数样本中的*@参数偏移指数
*@复数采样中主 FFT 的 param n_max 大小*

//dSPF_se_fftSPxSP_CN (N、f_src、f_tw、f_out、brv、 4、0、N);
dSPF_sp_fftSPxSP (N、f_src、f_tw、f_out、brev、 4、0、N);
//t_stop =_itoll (TSCH、TSCL);
//t_开销= t_stop - t_start;

for (LOOP = 0;LOOP < N * 2;LOOP ++)

f_src[LOOP]= f_OUT[LOOP]/N;

// printf ("周期消耗量:%d\n 时间消耗量:%f ms\n\n"、t_开销、(float) t_开销/ CYCLEPERMS);

/*
复数样本中 FFT 的*@param N 长度
*@param PTR_x 指向复杂数据输入的指针
*@param ptR_w 指向复数 Twiddle 因子的指针
*@param PTR_y 指向复数输出数据的指针
*@param brev 指向包含64个条目的位反向表的指针
*@param n_min 应为4如果 N 可表示为4的幂、否则 n_min 应为2
从主 FFT 开始、sub-FFT 的复数样本中的*@参数偏移指数
*@复数采样中主 FFT 的 param n_max 大小
*
*
dSPF_sp_ifftSPxSP (N、f_src、f_tw、f_out、brev、 4、0、N);

for (LOOP = 0;LOOP < N;LOOP ++)

printf ("%d\t"、(int) f_out[loop * 2]);

printf ("\n");


谢谢。

Rgds
闪亮

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

    我已通知软件团队。 他们将直接在此处发布反馈。

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

    MATLAB 输出与 DSPLib IFFT 输出之间的差异有多大。 让输出被环路以查看 inv FFT 输出的包络是否与输入到 FFT 匹配

    有关类似问题、您可以参阅以下几个 E2E 帖子:
    e2e.ti.com/.../1135801
    e2e.ti.com/.../319936


    他们还可以使用 CCS 图形工具来查看输入是否与此处讨论的逆向 FFT 匹配:
    e2e.ti.com/.../265955

    此致、
    Rahul