附3:电路图图纸
电源系统
前级放大和AD转换
Atmega16控制板
附4:程序清单
/*///////////////////////////////////////////////////////////////////////////////////////////////// FFT转换函数,dataR:实部,datai:虚部,
////////////////////////////////////////////////////////////////////////////////////////////////*/ void FFT(float *dataR,float *dataI,int n) {
int i,L,j,k,b,p,xx,qq; int x[11]={0}; float TR,TI,temp; float QQ;
//////////////////////////////////位倒置//////////////////////////////////////////////////// for(i=0;i for(j=0;j for(j=0;j {x[j]=(i/count[j])&0x01;} for(j=0;j {xx=xx+x[j]*count[n-j-1];} dataI[xx]=dataR[i]; } for(i=0;i } ////////////////////////////////////蝶形运算//////////////////////////////////////// for(L=1;L<=n;L++) { b=1; i=L-1; while(i>0) { b=b*2; i--; } for(j=0;j<=b-1;j++) { p=1; i=n-L; while(i>0) { p=p*2; i--;} p=p*j; for(k=j;k TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b]; QQ=2*pi*p/count[n]; qq=p*count[11-n]; dataR[k]=dataR[k]+dataR[k+b]*cos_tab[qq]+dataI[k+b]*sin_tab[qq]; dataI[k]=dataI[k]-dataR[k+b]*sin_tab[qq]+dataI[k+b]*cos_tab[qq]; dataR[k+b]=TR-dataR[k+b]*cos_tab[qq]-dataI[k+b]*sin_tab[qq]; //查表运算 dataI[k+b]=TI+temp*sin_tab[qq]-dataI[k+b]*cos_tab[qq]; } } } for(i=0;i { w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]); w[i]=w[i]/count[n-1]; } w[0]=w[0]/2; } ///////////////////////////回放数据///////////////////////// void viewdata(void) { unsigned int key,page,i; page=0; LCD_PenColor=0x1F; //红色 LCD_WriteChineseString(font5,2,40,0); LCD_PenColor=0xFC; //蓝色 while(1){ key=getkey(); if(key!=0xFF) { if(key==4) {SystemState=fft_mode;return;} //返回 if(key==2) { LCD_ClearScreen(); LCD_WriteChineseString(font3,2,10,0);LCD_WriteChineseString(font4,2,60,0); i=page*4+1; p3510(Re[i],0,15); print3510(Im[i]*mode,50,15); p3510(Re[i+1],0,26); print3510(Im[i+1]*mode,50,25); p3510(Re[i+2],0,38); print3510(Im[i+2]*mode,50,35); p3510(Re[i+3],0,50); print3510(Im[i+3]*mode,50,50); if(page>0) page--; delay_nms(8000000); } //上翻页 if(key==1) { LCD_ClearScreen(); LCD_WriteChineseString(font3,2,10,0);LCD_WriteChineseString(font4,2,60,0); i=page*4+1; p3510(Re[i],0,15); print3510(Im[i]*mode,50,15); p3510(Re[i+1],0,26); print3510(Im[i+1]*mode,50,25); p3510(Re[i+2],0,38); print3510(Im[i+2]*mode,50,35); p3510(Re[i+3],0,50); print3510(Im[i+3]*mode,50,50); page++;if(page>=SampleNum/4) page=0; delay_nms(8000000); } //下翻页 } } } ////////////////////////////失真度计算/////////////////////// void distortion(void) { LCD_ClearScreen(); LCD_WriteChineseString(font6,3,10,20); unsigned int key; int fr; while(1) { ////////////获取频率//////////////////// log_2_N=11;SampleNum=SampleTab[log_2_N]; reset_timer(0); init_timer0(40960); New_Flag=0; enable_timer(0); ////////////////////等待采样完成/////////////////////////// while(!FFT_Flag); disable_timer(0); //关定时器0 //////////////////////FFT运算///////////////////////////////// FFT(Re,Im,log_2_N); ////////////////频域功率//////////////////////////////////// for(i=1;i for(i=1;i sort(&Re[1],&Im[1],SampleNum/2-1); fr=1000000/fre; if(Tflag) {LCD_WriteChineseString(font7,1,50,20);LCD_WriteEnglishString(\ \else {LCD_WriteEnglishString(\ \ ////////////////////按键扫描///////////////////////////// key=getkey(); if(key!=0xFF) {