嵌入式开发者社区

标题: 例程中FFT使用问题 [打印本页]

作者: shuo    时间: 2016-4-6 11:00
标题: 例程中FFT使用问题
StarterWare中给的FFT例程输入信号是(2*Tn+4)个,但是做Tn点FFT,这样也是可以的吗?为什么输入要设置成(2*Tn+4)个?


// FFT 输入信号
#pragma DATA_ALIGN(CFFT_In, 8);
float CFFT_In[2*Tn+4];

// FFT 输出
#pragma DATA_ALIGN(CFFT_Out, 8);
float CFFT_Out[2*Tn+4];

// FFT 计算
DSPF_sp_fftSPxSP(Tn,CFFT_In,Cw,CFFT_Out,brev,rad,0,Tn);


作者: 希望缄默    时间: 2016-4-7 08:59
为了数据对齐或者防止计算过程中越界
作者: shuo    时间: 2016-4-7 09:59
希望缄默 发表于 2016-4-7 08:59
为了数据对齐或者防止计算过程中越界

        // 复数 FFT
        for (i=0;i<2*Tn;i++)
                CFFT_In=0.0;
        for (i=0;i<Tn;i++)
        {
                CFFT_In[2*i]=Input;                // 实部
                CFFT_In[2*i+1]=0;                     // 虚部为 0
        }
那在如上这一步把CFFT_In的虚部赋值,不设为零,即CFFT_In中有Tn个表示其实部,Tn个表示其虚部,再进行Tn点FFT,即

// FFT 计算
DSPF_sp_fftSPxSP(Tn,CFFT_In,Cw,CFFT_Out,brev,rad,0,Tn);

那么请问得到的CFFT_Out[2*Tn+4]是对应的有Tn个实部,Tn个虚部吗?
作者: 希望缄默    时间: 2016-4-7 14:04
shuo 发表于 2016-4-7 09:59
// 复数 FFT
        for (i=0;i


输入信号可以是实数也可以是复数的
作者: shuo    时间: 2016-4-7 21:10
已解决,谢谢
作者: 萧寒    时间: 2016-5-3 20:10
希望缄默 发表于 2016-4-7 08:59
为了数据对齐或者防止计算过程中越界

能给点 关于数据对齐的资料参考吗?
在arm或者其他编译器里,数据对齐一次就可以了,为什么这里每定义一个变量都要对齐一次,等候您的回答。  
作者: 萧寒    时间: 2016-5-3 20:12
// FFT 计算
DSPF_sp_fftSPxSP(Tn,CFFT_In,Cw,CFFT_Out,brev,rad,0,Tn);

里面的那个brev 矩阵 是怎么生成的呢,有没有参考资料了,谢谢 帮忙回答
#pragma DATA_ALIGN (brev, 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
};

作者: 希望缄默    时间: 2016-5-9 11:32
萧寒 发表于 2016-5-3 20:12
// FFT 计算
DSPF_sp_fftSPxSP(Tn,CFFT_In,Cw,CFFT_Out,brev,rad,0,Tn);

[attach]756[/attach]

作者: 希望缄默    时间: 2016-5-9 11:33
萧寒 发表于 2016-5-3 20:12
// FFT 计算
DSPF_sp_fftSPxSP(Tn,CFFT_In,Cw,CFFT_Out,brev,rad,0,Tn);

参考下那篇文档 讲原理的~




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4