如何使用TIC6713DSP库函数中的fft函数做ifft变换?
我使用的是TI的C6713DSP,在例程中有一个simfft的例程,仿照这个历程可以对音频信号进行FFT变换,其中使用的就是dspc67x.lib库函数中的DSPF_sp_cfftr2_dit()FFT变换函数,它采用的是基2的时间抽取算法,我用这个实现了信号的FFT变换,现在想用它实现IFFT变换,即由频谱还原回原始信号,这要怎么做呢?我的程序如下,可是结果总是不对,希望知情者给解答一下,谢谢!//fft开始
for(i=0;i<NX;i++)
{
input_l=Buffer_iir_l;//时域信号的实部
input_l=0;//时域信号的虚部,设为0
}
DSPF_sp_cfftr2_dit(input_l, w, NX);//fft变换,结果以位倒序形式存放
DSPF_sp_bitrev_cplx(input_l,iData,NX); //再对结果进行倒序
for(i=0;i<NX/2+1;i++)
{
//计算频谱的模值
rlt=sqrtf(input_l*input_l+input_l*input_l);
}
//fft结束,ifft开始
for(i=0;i<NX;i++)
{
output_l=input_l;
output_l=0;
}
DSPF_sp_cfftr2_dit(output_l, w, NX);//w为旋转因子,已从例程中得到
DSPF_sp_bitrev_cplx(input_l,iData,NX);
//位倒序函数,iData已知,但具体含义不太明白
for(i=0;i<NX;i++)
{
Buffer_iir_l=output_l;//取实部作为输出信号
}
for(i=0;i<512;i++)
{
gBufferXmtPing=(int)(Buffer_iir_l);
}
//ifft结束 //fft结束,ifft开始
for(i=0;i<NX;i++)
{
output_l=input_l;
output_l=0; // 应该是output_l = input_l
} aresc 发表于 2011-7-19 12:35 static/image/common/back.gif
//fft结束,ifft开始
for(i=0;i
呵呵 我也没变回来 。。。。两年了都没人回你的贴。。。估计我的也没人回我了 。。。
但还是要说 同问啊 !!!!!!!!!!!!!!!!!!!! 楼主,这个ifft没变出来,FFT变出来了吗? 本帖最后由 aresc 于 2014-12-9 20:44 编辑
jackblank 发表于 2014-12-9 20:28 static/image/common/back.gif
楼主,这个ifft没变出来,FFT变出来了吗?
又看了一下,如果是时域抽取的方式,那应该是先做bit reverse,后做butterfly运算。
所以估计楼主的那个FFT也出来的不对。
应该把下面两行颠倒一下:
DSPF_sp_cfftr2_dit(input_l, w, NX);//fft变换,结果以位倒序形式存放
DSPF_sp_bitrev_cplx(input_l,iData,NX); //再对结果进行倒序
dit的意思是Decimation In Time-domain.
如果是频域抽取那bit-reverse和butterfly顺序是对的,但要用DSPF_sp_cfftr2_dif替换DSPF_sp_cfftr2_dit。
dif的意思是Decimation In Frequency-domain. aresc 发表于 2014-12-9 20:39 static/image/common/back.gif
又看了一下,如果是时域抽取的方式,那应该是先做bit reverse,后做butterfly运算。
所以估计楼主的那个F ...
你好,我正在用库函数算FFT,我不明白
DSPF_sp_cfftr2_dit(input_l, w,NX);DSPF_sp_bitrev_cplx(input_l,iData,NX);这两个函数的参数是什么意义?或者每个参数代表什么?谢谢 jackblank 发表于 2014-12-9 21:38 static/image/common/back.gif
你好,我正在用库函数算FFT,我不明白
DSPF_sp_cfftr2_dit(input_l, w,NX);DSPF_sp_bitrev_cplx(input_l, ...
DSPF_sp_cfftr2_dit(input_l, w,NX);
input_I是输入数据buffer,应该是复数形式,复数的实部占数组的偶数下标,虚部占数组的计数下标。
w应该是旋转因子,就是一个cos、sin数组表格,NX是复数的个数,应该为2的n次方。
DSPF_sp_bitrev_cplx(input_l,iData,NX);
FFT之后Input_I里结果变成FFT的结果,也都是复数,iData应该是bitreverse之后正常顺序后的FFT结果。
NX同上。 aresc 发表于 2014-12-9 22:11 static/image/common/back.gif
DSPF_sp_cfftr2_dit(input_l, w,NX);
input_I是输入数据buffer,应该是复数形式,复数的实部占数组的偶 ...
好的,我想问下那个w旋转因子是TI给的吗?还是要自己写?谢谢
最好是找到TI相关的文档,针对具体的函数说明去设置这些参数。否则可能还是有偏差。
我也没有用过TI的这几个函数,只是以我的经验结合楼主的那个代码来解释的。 找到相关文件,手册 里面有使用说明很详细的使用说明
页:
[1]