各位大哥好
小弟最近移植DSPF_sp_fftSPxSP这个函数。得到的结果总是令人匪夷所思。请各位大哥帮忙指点迷津。
void DSPF_sp_fftSPxSP_cn (int N, float *ptr_x, float *ptr_w, float *ptr_y,
unsigned char *brev, int n_min, int offset, int n_max)
调用如下:
DSPF_sp_fftSPxSP(4096, in, tw, out, brev, 4, 0, 1096);
in = sin(2*pi*1000*t/48000);然后将in的每两个数据中间插0,成为8192个数据,即虚部置0.
brev = {
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
};
tw =
void AfcN32b_TwGen(float *w, int n)
{
int i, j, k;
double x_t, y_t, theta1, theta2, theta3;
const double PI = 3.141592654;
for (j = 1, k = 0; j <= n >> 2; j = j << 2)
{
for (i = 0; i < n >> 2; i += j)
{
theta1 = 2 * PI * i / n;
x_t = cos (theta1) ;
y_t = sin (theta1) ;
w[k] = (float) x_t;
w[k + 1] = (float) y_t;
theta2 = 4 * PI * i / n;
x_t = cos (theta2) ;
y_t = sin (theta2) ;
w[k + 2] = (float) x_t;
w[k + 3] = (float) y_t;
theta3 = 6 * PI * i / n;
x_t = cos (theta3) ;
y_t = sin (theta3) ;
w[k + 4] = (float) x_t;
w[k + 5] = (float) y_t;
k += 6;
}
}
}
经过FFT计算后,得到的结果是,主瓣和副瓣跑到了最前面的几个点了,第0-10左右。而我使用matlab仿真的时候,得到的是主瓣和副瓣出现在170-180点附近。请问我在调用DSPF_sp_fftSPxSP()这个函数,哪里出了问题。