我在使用dsplib中的fft库函数时,我使用相同的数据(matlab产生,用single转换为单精度模式,写入dat文件中,在CCS端使用load memory加载到指定数组),使用TI参考的例程,但是计算得到的结果与matlab并不一致。下面是程序和部分数据的截图,FFT_Out是DSPfft库函数的计算输出。下面的截图展示的是部分数据,请问为什么会这样?
#include <stdint.h> #include <math.h> #include <stdio.h>// C 语言标准输入输出函数库 #include <math.h>// C 数学函数库 #include "mathlib.h"// DSP 数学函数库 #include "dsplib.h"// DSP 函数库 /* Global definitions */ /* Number of samples for which FFT needs to be calculated */ #define N 16384 /* Number of unique sine waves in input data */ #define NUM_SIN_WAVES 4 #define SW_BREAKPOINTasm(" SWBP 0 "); #define PI3.141592654 #define F_TOL(1e-06) #pragma DATA_ALIGN(Input, 8);// 信号 float Input[2*N]; float InputOrig[2*N];// 信号 副本 #pragma DATA_ALIGN(FFT_Out, 8);// FFT 输出 float FFT_Out[2*N]; #pragma DATA_ALIGN(IFFT_Out, 8);// IFFT 输出 float IFFT_Out[2*N]; #pragma DATA_ALIGN(W, 8);// 旋转因子 float W[2*N]; #pragma DATA_ALIGN(x, 8);// 旋转因子 float x[2*N]; /* Align the tables that we have to use */ 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 }; void gen_twiddle_fft_sp (float *w, int n) {int i, j, k; //const double PI = 3.141592654;for (j = 1, k = 0; j <= n >> 2; j = j << 2){for (i = 0; i < n >> 2; i += j){ #ifdef _LITTLE_ENDIANw[k] = (float) sin (2 * PI * i / n);w[k + 1] = (float) 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] = (float) cos (6 * PI * i / n); #elsew[k] = (float) cos (2 * PI * i / n);w[k + 1] = (float) -sin (2 * PI * i / n);w[k + 2] = (float) cos (4 * PI * i / n);w[k + 3] = (float) -sin (4 * PI * i / n);w[k + 4] = (float) cos (6 * PI * i / n);w[k + 5] = (float) -sin (6 * PI * i / n); #endifk += 6;}} } void main () {/* Generate the input data */ //generateInput (NUM_SIN_WAVES);/* Genarate twiddle factors */gen_twiddle_fft_sp(W, N);SW_BREAKPOINT/* Call FFT routine */DSPF_sp_fftSPxSP(N, Input, W, FFT_Out, brev, 4, 0, N);SW_BREAKPOINT }
CCS显示的部分计算结果
matlab的计算结果
使用的数据文件ccsdata.dat
Nancy Wang:
是否对比过计算结果的正确性?看您的描述不清楚是哪个的计算结果不对。
Nancy Wang:
回复 user4333456:
感谢分享!