在目录c64plus\dsplib_v210\src\DSP_fft16x16,包含了三个层次的FFT库函数,分别是natural C version, intrinsic C version, serial SA version,最后一个是汇编级。在DSP_fft16x16_d.c中有三个测试用例对比耗时。三个函数用法差不多,例如:
复制代码
void DSP_fft16x16_cn (
const short * ptr_w,
int npoints,
short * ptr_x,
short * ptr_y
);
void test_fft(void)
{
const int N = 512;
short x[2*N], y[2*N], w[2*N];
gen_twiddle_fft16x16(w, N);
double fs = 8000.0, f1 = 114.8, f2 = 186.2;
short x8k[8000];
for (int i=0; i<8000; ++i)
x8k[i] = 1800.0 * (cos(2*PI*f1*i/fs) + cos(2*PI*f2*i/fs));
short x5[500]; // downsample
for (int i=0; i<500; ++i)
x5[i] = x8k[16*i];
int k = 0;
for (; k<6; k++) {
x[2*k + 0] = 0;
x[2*k + 1] = 0;
}
for (; k<106; k++) {
x[2*k + 0] = x5[k-6];
x[2*k + 1] = 0;
}
for (; k
x[2*k + 0] = 0;
x[2*k + 1] = 0;
}
DSP_fft16x16_cn(w, N, x, y);
for (int i=0; i
printf("%d\n", y[2*i]);
printf("%d\n", y[2*i+1]);
}
}