音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(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ī)
求救,關(guān)于FFT的程序
我用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;&sup1;&ETH;ò×&Oacute;&sup3;&Igrave;&ETH;ò
*****************************************************/
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;÷&Oacute;&Atilde;&MICRO;&frac12;&ETH;ò×&Oacute;&sup3;&Igrave;&ETH;ò
   
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樓: >>參與討論
艾森豪威爾
你這么直接在51上做浮點(diǎn)數(shù)運(yùn)算能行嗎?
 
3樓: >>參與討論
jinbos
可以的,我在C8051就用float做過fft
 
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
含淚求助一個(gè)很急的問題,在線等待回復(fù)!。。
為什么SP指針很多時(shí)候都MOV SP,#5FH???
那位模擬高手上來就晶體管的二次擊穿發(fā)表點(diǎn)意見??
討論低功耗產(chǎn)品的電源管理問題!
protel99se有條這樣的題目 看看誰會(huì)做!
免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)