想测试一下fft的执行时间,该用那个函数测时间?
想测试一下fft算法的时间,看了42章有各种算法的单独时间测量,但是我想把自己的一些算法时间也测一下,不知该用那个函数,或者要开启一个timer?谢谢 可以在FFT前后加上个IO翻转,用示波器测试。 好吧,我承认这是最简单有效的方法。
F767全速206MHz,连续跑3组复数FFT1024,时间3.2ms。
增加了int16到float的转换程序。
回 kylongmu 的帖子
kylongmu:好吧,我承认这是最简单有效的方法。F767全速206MHz,连续跑3组复数FFT1024,时间3.2ms。
增加了int16到float的转换程序。 (2016-11-12 11:03) images/back.gif
跑的那个函数 可以用DWT测试吧
回 fswyt 的帖子
fswyt:可以用DWT测试吧 (2016-11-12 12:44) images/back.gif没问题。 void Do_FFT(q15_t* ADC_Val){
for(uint32_t i=0;i<3;i++){
arm_q15_to_float(ADC_Val+i*ADC_FFT_SIZE*2,testInput_f32_1Mhz+i*ADC_FFT_SIZE*2,ADC_FFT_SIZE*2);
/* Process the data through the CFFT/CIFFT module */
arm_cfft_f32(&arm_cfft_sR_f32_len1024, testInput_f32_1Mhz+i*ADC_FFT_SIZE*2, ifftFlag, doBitReverse);
}
}
包含了双通道ADC采样转换。
回 kylongmu 的帖子
kylongmu:void Do_FFT(q15_t* ADC_Val){for(uint32_t i=0;i<3;i++){
arm_q15_to_float(ADC_Val+i*ADC_FFT_SIZE*2,testInput_f32_1Mhz+i*ADC_FFT_SIZE*2,ADC_FFT_SIZE*2);
&nbs .. (2016-11-12 20:40) images/back.gif
感觉3.5ms时间稍有点长,你可以单独测试下函数 arm_cfft_f32,1024点的时间是多少。 FFT输出顺序有影响,bitReversed改为0后总时间是2.74ms,还是等H7才能实现二维FFT计算。
回 kylongmu 的帖子
kylongmu:FFT输出顺序有影响,bitReversed改为0后总时间是2.74ms,还是等H7才能实现二维FFT计算。 images/back.gif
F407测试函数 arm_cfft_f321024点是
可能是我2组ADC与1组DAC的DMA同时启动连续工作的原因,总线调度上效率降低的。
实际使用中肯定是我这个时间更准,因为ADC后需要转换为浮点,DMA也要开启,单纯测FFT的时间参考价值不大。
回 kylongmu 的帖子
kylongmu:可能是我2组ADC与1组DAC的DMA同时启动连续工作的原因,总线调度上效率降低的。实际使用中肯定是我这个时间更准,因为ADC后需要转换为浮点,DMA也要开启,单纯测FFT的时间参考价值不大。
(2016-11-13 13:59) images/back.gif
不需要的,直接代入就行了,可以看我们做的示波器例子。三路ADC1,ADC2和ADC3同时开启,三路DMA同时开启,定时器1的三个通道同时开启。
除非你的项目有特别需要,需要将求出的幅频响应转换成实际数值大小。即使全部转换,速度也相当快的。你可以测试下转换速度。
===================================================
我估计你的这个慢是因为你是用的双精度浮点库。 直接代入就行了?FFT函数的输入与输出是同一个存储区,16it的ADC值不转换的话估计得DMA上把目的地址的增加值对齐32bit了。
问题是我的2路ADC是同步采样(IQ),2个通道合并到一个32bit里面的。
回 kylongmu 的帖子
kylongmu:直接代入就行了?FFT函数的输入与输出是同一个存储区,16it的ADC值不转换的话估计得DMA上把目的地址的增加值对齐32bit了。问题是我的2路ADC是同步采样(IQ),2个通道合并到一个32bit里面的。 (2016-11-14 01:14) images/back.gif
同步采样使用我们V5板子的方案,两个ADC分别使用同一个定时器的两个通道进行触发,非常方便,简单好用。 用ADC分别使用同一个定时器触发是个好办法,不过仍然有问题:
1:16bit定点直接可以当32bit浮点用吗?
2:2个通道的ADC数据组成复数的实部虚部,CFFT要求的数据格式是——实虚实虚实虚实虚……排列的,2个通道的DMA如何直接组织成这样的数据格式?
回 kylongmu 的帖子
kylongmu:用ADC分别使用同一个定时器触发是个好办法,不过仍然有问题:1:16bit定点直接可以当32bit浮点用吗?
2:2个通道的ADC数据组成复数的实部虚部,CFFT要求的数据格式是——实虚实虚实虚实虚……排列的,2个通道的DMA如何直接组织成这样的数据格式? (2016-11-14 13:09) images/back.gif
1. 没问题,你想多了
2. 不需要,实部填ADC,虚部填0即可。 多谢解惑,不过虚部填不了0的,因为我是IQ采样,一个AD通道是实部,另外一个是虚部。 kylongmu 发表于 2016-11-12 11:03
好吧,我承认这是最简单有效的方法。
F767全速206MHz,连续跑3组复数FFT1024,时间3.2ms。
增加了int16到fl ...
SYSTICK 1ms中断一次,计数值加一。计算FFT前后都读取一下计数值, 两次计数相减。就是运行时间。单位ms. 精度基本够用。
页:
[1]