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

请教 DSP FFT库到底怎么调用啊~

请教 DSP FFT库到底怎么调用啊~

需要准备些什么?调用什么函数呢

只用DSPF_sp_bitrev_cplx 和DSPF_sp_cfftr2_dit 这个就可以了?

DSPF_sp_bitrev_cplx 中的index数组是怎么得到的啊?

user3823702:

tw_genr2fft(wd,N); // 产生旋转因子 bit_rev1(wd, N>>1); // 把系数倒置,为下面函数输入准备 DSPF_sp_cfftr2_dit(xd, wd, N); //计算该FFT,需要先调用上面两个函数 bit_rev1(xd,N); //输出是倒置的,所以重新倒置为正常

这么用的,你试一下。

bin Wang:

回复 user3823702:

谢谢

可是我用的DSPLIB 3.1.1中没有您说的那个函数啊

tw_genr2fft(wd,N); // 产生旋转因子

bit_rev1(wd, N>>1); // 把系数倒置,为下面函数输入准备

 

 

user3823702:

回复 bin Wang:

我用的是C67XDSPLIB_200,芯片是C6713,这个里面是这样用的,不知道你用的那款芯片,上面的那2个函数是在安装路径下面的SUPPORT目录下面的,不包含在库文件里面。

bin Wang:

回复 user3823702:

SUPPORT?能否具体说下呢

我看到 C:\ti\dsplib_c674x_3_1_1_1\examples\fft_example_sp.c 是这样调用的

gen_twiddle_fft_sp(w_sp, N);

DSPF_sp_fftSPxSP(N, x_sp, w_sp, y_sp, brev, 4, 0, N);

 

brev是单独写出来的

 

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

};

函数 gen_twiddle_fft_sp 是另外写的

/* Function for generating Specialized sequence of twiddle factors */

void gen_twiddle_fft_sp (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;

        }

    }

}

 

 

他给的这个例程是不是对所有C6000都是通用的~

gen_twiddle_fft_sp(w_sp, N);和brev数组不知道是通用的么?

 

 

我用的是OMAPL138,里面的DSP是C6748的~

你说的那个方法在 C6713测试通过了吧 能不能给个例子呢?

bin Wang:

回复 user3823702:

(⊙o⊙)…  我用的CCSv5 都找不到那个目录~

看来真的有很大不同

没有CSL但是有个Startware的库 函数级的~不过外设库不是很全

 

请问你一般是做多少点的FFT?FFT之前需要滤波什么的么?比如IIR或者FIR

user3823702:

回复 bin Wang:

我们一般做2048,4096,8192,最大到16384个点的FFT,暂时没有加滤波,直接拿采集的数据做输入的。把得到的结果做指数平均得到的谱线会平滑很多,你可以试一试。C6748和C6713是有很多不同,本来要把C6713换成C6748的,最后太麻烦了,只能先用C6713了,这个产品换代了感觉都不会用了。。

penghui zhang:

回复 user3823702:

请帮忙看一下我的

tw_genr2fft(w, Numlength); bit_rev(w,Numlength>>1); DSPF_sp_cfftr2_dit(Input,w,Numlength); bit_rev(Input,Numlength);

我头文件用了#include "utility.h"    lib有dsp67x.lib但为什么显示这样的错误:

undefined first referenced symbol in file——— —————-_bit_rev F:\CCS_Files\FFT_1\FFT\Debug\fft_6713.obj_tw_genr2fft F:\CCS_Files\FFT_1\FFT\Debug\fft_6713.obj

>> Compilation failure  

显示三个函数未定义,但在#include "utility.h"已经声明了呀 ,请指导一下

bin Wang:

回复 penghui zhang:

会不会是路径不对呢?

你选住那个函数,点击鼠标右键有个好像是打开函数的命令

看看程序能否跳转到那个函数

penghui zhang:

回复 bin Wang:

我把鼠标放函数上点击它弹出来的框可以跳转到utility.h文件的函数声明上,即

void tw_genSPxSPfft(float * w, int n);void bit_rev(float* x, int n); void tw_genr2fft(float* w, int n);void tw_genr4fft(float *, int);void R4DigitRevIndexTableGen(int n, int * count, unsigned short *IIndex, unsigned short *JIndex);void digit_reverse(double *yx, unsigned short *JIndex, unsigned short *IIndex, int count);

我的困惑是我用了DSPF_sp_cfftr2_dit()函数,添加了库文件DSPF_sp_cfftr2_dit.h,库文件只有声明,该函数不报错,但bit_rev()h和void tw_genr2fft()在库文件utility.h声明了却报错,是不是support文件里的库文件和include的库文件有很大区别?请专家指导一下,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » 请教 DSP FFT库到底怎么调用啊~
分享到: 更多 (0)