TI中文支持网
TI专业的中文技术问题搜集分享网站

DSPF_sp_fftSPxSP

各位大哥好

小弟最近移植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()这个函数,哪里出了问题。

Denny%20Yang99373:

建议单步跑一下,看看DSPF_sp_fftSPxSP输入输出计算有没有问题

gang liu10:

回复 Denny%20Yang99373:

您好,这个问题已经解决了。在计算tw时,tw的长度应该是FFT长度的2倍。即FFT长度为N,调用AfcN32b_TwGen(tw, N)时,tw这个数组长度为2*N;

现在对我的代码在Windows上进行仿真(直接使用源码DSPF_sp_fftSPxSP_cn)。所得的结果与我的预期是一样的。移植到我程序中也是正常的。但是,我将代码放在DSP内运行的时候,所得结果令人费解,所得结果很大,且部分已经超出范围成为无效值。输入数据也发生变化。如:

0:-5037223007223807.5733181:-712912628875263.9293672:0.0000003:0.0000004:-875247360278527.9750825:4918937460408320.4269416:-12122759941324801.4450077:-7640381747363840.3415688:1434625243086848.0205549:-4222929957027839.42222610:-4641181925375.99921211:-104951686627327.99053212:3063128799576063.15612813:-2700812874678272.00889614:-119671210639359.99870315:-61662308597759.98592416:-2924329415213056.20670317:2980699250360320.21045718:0.00000019:0.00000020:2282891944936674237251281.73828121:2177207809949818551540374.75585922:-3974166524985343.81389623:-4897591472947199.940681

请问各位大哥,这是什么情况。代码上应该没有问题,我在Windows上运行所得结果一样。DSP也是直接使用的源代码。

赞(0)
未经允许不得转载:TI中文支持网 » DSPF_sp_fftSPxSP
分享到: 更多 (0)