首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

测出FFT(快速傅里叶变换)计算一个周期所花费的时间,该怎么处理

2012-03-04 
测出FFT(快速傅里叶变换)计算一个周期所花费的时间工作上要先计算出FFT(提供的是FFT的一个库,有些函数我们

测出FFT(快速傅里叶变换)计算一个周期所花费的时间
工作上要先计算出FFT(提供的是FFT的一个库,有些函数我们可以调用库)计算一个周期所花费的时间,决定是否采用凌阳的CPU。项目大概是这样的:有一个FM接收器,另外一个凌阳MCU包括A/D转换器(主要是用来控制的),现在要先测试FFT运行的时间,表格如下:
  采样点
  64 128 256 512

  2

采样频率 4
 
单位:KHz)8

  16

中间要填入的就是FFT运行的时间。请问采样点是怎样输入到FFT,如果是从A/D寄存器输入,又要怎样输入128,256个这么多点。还是输入FFT的必须为连续信号,也就是说:不能输入128个离散的呢,它的时间又是怎样测出来呢?我这有一段代码(仅仅是演示怎么用FFT库)
int *P_IOB_Data = 0x7005;
int *P_IOB_Dir = 0x7007;  
int *P_IOB_Attrib = 0x7008;

int main()
{
int i, j, addr;
unsigned short k, max, sum, *port, *gOut;
int maxID;
*P_IOB_Dir = 0xFFFF;
*P_IOB_Attrib = 0xFFFF;
*P_IOB_Data = 0x0000;

SystemInitial();
maxID = Get_FFT256_Version();
InitFFT();
while(1)
{
addr = GetFFT();
max = maxID = 0;
gOut = addr;
while (*gOut == 1)
{
gOut+=2;
for(i=1;i<128; i++)
{
sum = *gOut++;

if(sum > max) 
{
max = sum;
maxID = i;
}
}
(int)port = 0x7000;
*port = maxID;
}

*P_IOB_Data = 0xFFFF;
FFTServiceLoop();
*P_IOB_Data = 0x0000;
}

return 0;
}
   
另外一个是system.asm,我认为有用,就贴出来了。其中r1 = C_Timer_Setting_8K 估计是设定采样频率的,为什么采样点就没有看到在函数中设定呢?还是要怎样设定
.include GPCE.inc

.text
.public_SystemInitial
_SystemInitial:.proc

int off
fiq off

r1 = C_49MHz// 49MHz, Fcpu=Fosc
  [P_SystemClock] = r1
  r1 = 0x0030 // TimerA CKA=Fosc/2 CKB=1 Tout:off
  [P_TimerA_Ctrl] = r1// Initial Timer A
  r1 = C_Timer_Setting_8K // 8K
  [P_TimerA_Data] = r1 

  r1 = 0xffff  
  [P_INT_Clear] = r1 // Clear interrupt occuiped events
   
  r1 = [P_INT_Ctrl]
  r1 |= C_FIQ_TMA// Enable Timer A FIQ
  [P_INT_Ctrl] = r1
   
  fiq on//
   
  r1 = [P_ADC_Ctrl]// enable AGC,MIC,AD
r1 |= 0x0005
[P_ADC_Ctrl] = r1
r1 = [P_DAC_Ctrl]
r1 |= 0x0008
[P_DAC_Ctrl] = r1  

r1 = 0
[P_IOA_Data] = r1
r1 = 0xffff
[P_IOA_Dir] = r1
[P_IOA_Attrib] = r1
   
retf
.endp

//---------------------------------------
// Get FFT Sample process
// User have to implement this according to get data from mic or line in
// return r1 = FFT sample
//
.public F_GetFFTSample
F_GetFFTSample:.proc

L_WaitADCRdy:
r1 = [P_ADC_Ctrl]
r1 |= 0x8000
jz L_WaitADCRdy

r1 = [P_ADC]

retf
.endp  


想了很久,还是不知道怎样测试FFT运行的时间,所以就请教高手帮忙看看了,谢谢

[解决办法]
什么凌阳CPU确实不知道,也没时间去了解.
如果你真得想得到帮助可以把你的问题简化抽象出来.

[解决办法]
计算后时间-计算前时间=计算时间。
我对嵌入式开发不懂,不知道用的什么平台,应该有计算时间的API吧。
[解决办法]
我现在也在做类似工作,不过是在PPC上使用FFTW来做FFT,你说的周期是指的是你信号的周期还是FFT计算周期,关于通过一个IO口来计算时间
先将PORT_A设置为高,然后执行FFT算法,执行完成以后,在将PORT_B设置为低,你可以通过示波器来读PORT_A高电平的时间,或者通过单片机的计数器数个数,应该比较简单呀!
[解决办法]
还是你想测出 FFT 在 凌阳上 运行的时间??

我实验室这边有一个人做过一个凌阳的信号处理方面的东西,

SPCE61A 22K采样率 256点 时间要秒级别的。。。
------解决方案--------------------


时间还不好取吗 用中断什么的 仔细看看凌阳的说明文档 你不就是想看看这款cpu的fft性能吗 我虽然没做过 但感觉应该不是很难
[解决办法]
直接测算FFT函数的时钟数,其他的输入和输出估计一下,应该就可以了

热点排行