针对256点的FFT,参考TI提供的例程,人为构造了一个512的输入数组buffer1Q15,奇数项为实部,也就是频率已知,幅值已知的模拟采样数据;偶数项为虚部,都为0。指定输出数组为buffer2Q15,同样也是512大小。
调用CFFT的程序:
// Step 1: Initialize CFFT object
CFFT.pInBuffer = buffer1Q15;
CFFT.pOutBuffer = buffer2Q15;
CFFT.init = (void (*)(void *))CFFT_init256Pt;
CFFT.run = (void (*)(void *))CFFT_run256Pt;
// Step 2: Initialize the handle
handleCFFT = &CFFT;
// Step 3: Calling the init() will setup the twiddle factor table
CFFT.init(handleCFFT);
CFFT.run(handleCFFT);
按照正常理解buffer2Q15为FFT计算结果,计算各次谐波的幅值。但是发现计算结果除了输入信号频率的幅值外,还有其他频率的幅值结果。最后发现输入数组buffer1Q15中保存的结果是我们预期想要的,感觉输入输出结果翻转了。这是为什么?
为了验证,对512点的CFFT进行了同样的测试,只是数组变为1024,结果和256点刚好相反,buffer2Q15中保存的是预期的计算结果。
这是为什么?
dili zhu:
回复 tecman chen:
和乒乓方式有关系,那么,CFFT.pInBuffer= buffer1Q15;CFFT.pOutBuffer = buffer2Q15;
是不是理解为只是付了一个初值,最终 CFFT.pOutBuffer 并不一定就是 buffer2Q15?
针对256点的FFT,参考TI提供的例程,人为构造了一个512的输入数组buffer1Q15,奇数项为实部,也就是频率已知,幅值已知的模拟采样数据;偶数项为虚部,都为0。指定输出数组为buffer2Q15,同样也是512大小。
调用CFFT的程序:
// Step 1: Initialize CFFT object
CFFT.pInBuffer = buffer1Q15;
CFFT.pOutBuffer = buffer2Q15;
CFFT.init = (void (*)(void *))CFFT_init256Pt;
CFFT.run = (void (*)(void *))CFFT_run256Pt;
// Step 2: Initialize the handle
handleCFFT = &CFFT;
// Step 3: Calling the init() will setup the twiddle factor table
CFFT.init(handleCFFT);
CFFT.run(handleCFFT);
按照正常理解buffer2Q15为FFT计算结果,计算各次谐波的幅值。但是发现计算结果除了输入信号频率的幅值外,还有其他频率的幅值结果。最后发现输入数组buffer1Q15中保存的结果是我们预期想要的,感觉输入输出结果翻转了。这是为什么?
为了验证,对512点的CFFT进行了同样的测试,只是数组变为1024,结果和256点刚好相反,buffer2Q15中保存的是预期的计算结果。
这是为什么?
tecman chen:
回复 dili zhu:
对的
针对256点的FFT,参考TI提供的例程,人为构造了一个512的输入数组buffer1Q15,奇数项为实部,也就是频率已知,幅值已知的模拟采样数据;偶数项为虚部,都为0。指定输出数组为buffer2Q15,同样也是512大小。
调用CFFT的程序:
// Step 1: Initialize CFFT object
CFFT.pInBuffer = buffer1Q15;
CFFT.pOutBuffer = buffer2Q15;
CFFT.init = (void (*)(void *))CFFT_init256Pt;
CFFT.run = (void (*)(void *))CFFT_run256Pt;
// Step 2: Initialize the handle
handleCFFT = &CFFT;
// Step 3: Calling the init() will setup the twiddle factor table
CFFT.init(handleCFFT);
CFFT.run(handleCFFT);
按照正常理解buffer2Q15为FFT计算结果,计算各次谐波的幅值。但是发现计算结果除了输入信号频率的幅值外,还有其他频率的幅值结果。最后发现输入数组buffer1Q15中保存的结果是我们预期想要的,感觉输入输出结果翻转了。这是为什么?
为了验证,对512点的CFFT进行了同样的测试,只是数组变为1024,结果和256点刚好相反,buffer2Q15中保存的是预期的计算结果。
这是为什么?
dili zhu:
回复 tecman chen:
好的,非常感谢您
TI中文支持网



