您好、香榭丽舍
客户使用 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
闪亮