FFT在单片机上的实现 下载本文

河南科技大学毕业设计(论文)

data2[p].re=data1[i];

data2[p].im=0;} for(mm=0;mm<5;mm++) { Nz=pow(2,mm+1); u.re=1;u.im=0;

WN.re=cos(-2*3.1416/Nz); WN.im=sin(-2*3.1416/Nz); for(j=0;j

{ for(k=j;k<32;k=k+Nz) { kp=k+Nz/2;

t=productComplex(data2[kp],u); data2[kp].re=data2[k].re-t.re; data2[kp].im=data2[k].im-t.im; data2[k].re=data2[k].re+t.re; data2[k].im=data2[k].im+t.im; }

u=productComplex(u,WN); }

}

for(ii=0;ii<16;ii++)

frq1[ii]=sqrt(data2[ii+1].re*data2[ii+1].re+data2[ii+1].im*data2[ii+1].im)/4; }

/************函数功能:AD采样32个点,放入data1中***************/ void AD_res(void) interrupt 5 {

if(!(point%2)) temp=ADC_RES; else }

data1[point/2]=(ADC_RES+temp)/2; point++;

if(point==64) {point=0; AD_flag=1; }

33

河南科技大学毕业设计(论文)

/**************************主函数**************************/ void main(void) {

LcdInt(); delay(10); CgInt(); delay(10);

P1ASF = 0x0x06; AUXR1&= 0xfb; EADC=1;

PADC=1;

ADC_CONTR=0x8a; NOP5;

AUXR = 0x80; TMOD = 0x01; TL0 = T1MS; TH0 = T1MS>>8; TR0 = 1;ET0 = 1;

EA = 1; while(1) {

if(AD_flag) {fftgo(); AD_flag=0; } } }

//调用LCD初始化函数

//P1.1 P1.2口作为AD输入

//11111011 ADRJ=0,高八位放在ADC_RES中

//AD、定时器初始化 //开总中断 34

河南科技大学毕业设计(论文)

二、原理图

图 附-1 系统原理总图

35