|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
求救,關(guān)于FFT的程序 |
| 作者:calmsea_tc 欄目:單片機(jī) |
我用C8051F005做CPU的,但是這個(gè)程序在執(zhí)行到循環(huán)語句時(shí),L總是在1或者2之間跳,根本到不了N-1,不知什么原因?是不是仿真器的問題,用U-EC3的JTAG調(diào)試的。程序是 #include <c8051f000.h> #include <math.h> #define uCHAR unsigned CHAR float PI=3.1415926; float ham_r[64]; float ham[64]; /***************************************************** &MICRO;¹Ðò×Ó³ÌÐò *****************************************************/ void Invert(float xr[],float xi[],uCHAR N) {uCHAR LH,N1,I,J,K; float T; LH=N/2; J=LH; N1=N-2; for(I=1;I<=N1;I++) {if(I<J) {T=xr[I];xr[I]=xr[J]; xr[J]=T; T=xi[I];xi[I]=xi[J]; xi[J]=T; } K=LH; while(J>=K) {J-=K; K=(uCHAR)(K/2+0.5); } J+=K; } } void Fft_fun (float xr[],float xi[],uCHAR N,uCHAR M) { uCHAR i,j,k,inc,AB,TEMP; uCHAR L; float rParKB,iParKB; float rCf[64],iCf[64]; // float TEMP1,TEMP2; for (i=0;i<N;i++) {rCf[i]=cos(2*i*PI/N); iCf[i]=-sin(2*i*PI/N); } Invert(xr,xi,N);//&MICRO;÷ÓÃ&MICRO;½Ðò×Ó³ÌÐò for(L=1;L<=M;L++) { AB=1; AB<<=L-1; for(j=0;j<=AB-1;j++) { k=(j<<(M-L)); inc=1; inc<<=L; for(TEMP=j;TEMP<=N-1;TEMP+=inc) { rParKB=xr[TEMP+AB]*rCf[k]-xi[TEMP+AB]*iCf[k]; iParKB=xi[TEMP+AB]*rCf[k]+xr[TEMP+AB]*iCf[k]; xr[TEMP+AB]=xr[TEMP]-rParKB; xi[TEMP+AB]=xi[TEMP]-iParKB; xr[TEMP]=xr[TEMP]+rParKB; xi[TEMP]=xi[TEMP]+iParKB; } } } } void main (void) { uCHAR i,j; float ham_i[64]; for(i=0;i<64;i++) {ham_r[i]=10+sin(2*PI*i/64);ham_i[i]=0;} Fft_fun(ham_r, ham_i,64,6); for(j=0;j<64;j++) {ham[j]=sqrt(pow(ham_r[j],2)+pow(ham_i[j],2));} while(1) { }; } |
| 2樓: | >>參與討論 |
| 作者: 艾森豪威爾 于 2005/12/9 10:01:00 發(fā)布:
你這么直接在51上做浮點(diǎn)數(shù)運(yùn)算能行嗎? |
|
| 3樓: | >>參與討論 |
| 作者: jinbos 于 2005/12/9 16:42:00 發(fā)布:
可以的,我在C8051就用float做過fft |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |