2812用FFT库计算时间要多久
查资料128个点76.7us,256个点也才150us不到,我开了个10us的定时器,怎么就计时到277左右了呢。。。。各个函数单步运行计时
RFFT32_brev(ipcb,ipcb,N); 30*10 = 300us这一步就花好多时间啊。。。。
fft.calc(&fft);(178-30)*10=1480us 变成毫秒级了。。。
fft.split(&fft);(232-178)*10 =540us 还能再长点么
fft.mag(&fft); (262-232)*10 = 300us
和网上查的一点都不符合啊
128点 用时(us)
1步倒序(RFFT32_brev) 10.8
2步计算(fft.cal) 39
3步实部虚部分离(fft.split) 13.1
4步计算幅值(fft.mag) 13.8
总用时 76.7
不知道原因啊 你再确认定时器的配置 本帖最后由 吃肉的考拉 于 2014-5-7 18:32 编辑
zhangmangui 发表于 2014-5-6 22:43 https://bbs.21ic.com/static/image/common/back.gif
不知道原因啊 你再确认定时器的配置
GpioDataRegs.GPBSET.bit.GPIOB0 = 1;//高电平
EvaTimer2InterruptCount = 0;
while(EvaTimer2InterruptCount < 10);//0.1m
GpioDataRegs.GPBCLEAR.bit.GPIOB0 = 1;//低电平
fft_init(ipcb1);
fft_subroutine(ipcb1);
// fft_init(ipcb3);
// fft_subroutine(ipcb3);
// fft_init(ipcb2);
// fft_subroutine(ipcb2);
// fft_init(ipcb4);
// fft_subroutine(ipcb4);
GpioDataRegs.GPBSET.bit.GPIOB0 = 1;//高电平
EvaTimer2InterruptCount = 0;
while(EvaTimer2InterruptCount < 30);//
GpioDataRegs.GPBCLEAR.bit.GPIOB0 = 1;//低电平
void fft_init(long *ipcb)
{
/*****FFT init*******/
fft.ipcbptr = ipcb;
fft.magptr = mag;
fft.init(&fft);
}
void fft_subroutine(long *ipcb)
{
int i;
mag_temp = 0;
freq = 0;
RFFT32_brev(ipcb,ipcb,N);
fft.calc(&fft);
fft.split(&fft);
fft.mag(&fft);
for(i=2;i<(N/2+1);i++)
{
if(mag > mag_temp)
{
mag_temp = mag;
freq = i;
}
}
max_mag = 2*(float)sqrt(mag_temp)/sqrt(64)*3/4095;
freq =(float) 124/N*freq+0.0;
}
用示波器测了,还是3ms左右
和系统的频率有关系! 大秦正声 发表于 2014-5-8 12:27 static/image/common/back.gif
和系统的频率有关系!
系统频率设置的是150M,原来的ipcb是存放在外部存储器的 现在放到片上SRAM里速度就快了 不到500us,虽然还达不到官方的数据 本帖最后由 icekoor 于 2014-8-13 12:25 编辑
最近写了个160点的FFT程序,采用P*Q=N的方式,P=10,Q=16,经过FFT运算后时间是167ms,用的是6713,主频是225M。不知道楼主找到原因了吗? 用TMS320C6713,主频是225M,分析128点,采用TI自带的FFT库函数,混合基分析,时间为750us。 TI自带的fft库函数是DSPF_sp_fftSPxSP (Mixed Radix Forward FFT with Bit Reversal)这个吗?最近在搞FFT。。请指教
页:
[1]