快速傅立葉算法的C語言實現(xiàn)0001_第1頁
快速傅立葉算法的C語言實現(xiàn)0001_第2頁
快速傅立葉算法的C語言實現(xiàn)0001_第3頁
快速傅立葉算法的C語言實現(xiàn)0001_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、快速傅立葉算法的語言實現(xiàn)#include math.hvoid kfft(pr,pi,n,k,fr,fi,l,il)int n,k,l,il;double pr,pi,fr,fi; int it,m,is,i,j,nv,l0;double p,q,s,vr,vi,poddr,poddi;for (it=0; it=n-1; it+) m=it; is=0;for (i=0; i=k-1; i+) j=m/2; is=2*is+(m-2*j); m=j; frit=pris; fiit=piis;pr0=1.0; pi0=0.0; p=6.283185306/(1.0*n); pr1=cos(p

2、); pi1=-sin(p);if (l!=0) pi1=-pi1;for (i=2; i=n-1; i+) p=pri-1*pr1; q=pii-1*pi1; s=(pri-1+pii-1)*(pr1+pi1); pri=p-q; pii=s-p-q;for (it=0; it=0; l0-) m=m/2; nv=2*nv;for (it=0; it=(m-1)*nv; it=it+nv) for (j=0; j=(nv/2)-1; j+) p=prm*j*frit+j+nv/2; q=pim*j*fiit+j+nv/2; s=prm*j+pim*j; s=s*(frit+j+nv/2+fi

3、it+j+nv/2); poddr=p-q; poddi=s-p-q; frit+j+nv/2=frit+j-poddr; fiit+j+nv/2=fiit+j-poddi; frit+j=frit+j+poddr; fiit+j=fiit+j+poddi;if (l!=0)for (i=0; i=n-1; i+) fri=fri/(1.0*n);fii=fii/(1.0*n);if (il!=0)for (i=0; i=n-1; i+) pri=sqrt(fri*fri+fii*fii);if (fabs(fri)0) pii=90.0;else pii=-90.0;elsepii=atan

4、(fii/fri)*360.0/6.283185306;return;這是在 PIC18F458 里用的 FFT 程序/* * 函 數(shù) 名:void ADCHD()* 功能描述 :單通道高頻采樣 ,數(shù)據(jù)處理 ,顯示 .*/void ADCHD()long D,SHU; / 數(shù)據(jù) .int n_x,k_x,i; / 循環(huán)參數(shù) .float Ur,Ui,Urn,Uin; / 數(shù)據(jù)處理中間變量 . ADWORDS=ADCAN+7; / 確定 MAX197 控制字 . for(ADD=0;ADD64;ADD+) / 采樣 .OUTADC(ADWORDS); / 送控制字 .DELAY(0); / 延時

5、 .DA TA0ADD=INADC(); / 讀取數(shù)據(jù) . for(ADD=0;ADD64;ADD+) / 顯示波形 .D=(int)(40.0*DATA0ADD/4096.0); / 取數(shù)據(jù) .LCDPIEX(ADD+64,40-D); / 顯示 .for(n_x=0;n_x5;n_x+) / 計算 .Urn=0.0; / 實部 .Uin=0.0; / 虛部 .for(k_x=0;k_x32;k_x+) /n_x 次諧波 .D=DATA0k_x; / 取數(shù)據(jù)計算 .Urn=Urn+D/409.6*cos(2*n_x+1)*(k_x+1)*0.196);Uin=Uin+D/409.6*sin(

6、2*n_x+1)*(k_x+1)*0.196); Ur=Urn/16.0; /Ui=Uin/16.0; /SHU=(long)(100*sqrt(Ur*Ur+Ui*Ui);UI0n_x=SHU; / 第 n_x 次諧波幅值 .UI05=SHU*SHU+UI05; /UI05=(long)sqrt(UI05); / 總幅值 . for(i=0;i5;i+) /SHU=UI0i*1000; /SHU=SHU/(UI05); /UP0i=SHU; / 第 i 次諧波占有率 . SHU=1000*(UI05-UI00); /UP05=SHU/UI05;/畸變率 .LCDCLEAN(12,2,126,7

7、); / 清除數(shù)據(jù)顯示區(qū) . for(i=0;i6;i+)OUTNUM(UI0i,1,28,2+i); / 顯示幅值 .OUTNUM(UP0i,3,56,2+i); / 顯示占有率 . ADWORDS=ADCAN; / 還原控制字 .* 函 數(shù) 名:void XBFX()* 功能描述 : 全周波傅立葉積分計算各次諧波的幅值,并返回結果 void XBFX()long D,SHU; / 數(shù)據(jù) . int n_x,k_x,i,n; / 循環(huán)參數(shù) .float Ur,Ui,Urn,Uin,UIL2; / 數(shù)據(jù)處理中間變量 for(n=0;n2;n+) / 兩路信號 .for(n_x=0;n_x5;n

8、_x+) / 計算 .Urn=0.0; / 實部 .Uin=0.0; / 虛部 . for(k_x=0;k_x32;k_x+) /n_x 次諧波 .D=DATACHAN*2+nk_x; / 取數(shù)據(jù)計算 . Urn=Urn+D/409.6*cos(2*n_x+1)*(k_x+1)*0.196);Uin=Uin+D/409.6*sin(2*n_x+1)*(k_x+1)*0.196); Ur=Urn/16.0; /Ui=Uin/16.0; SHU=(long)(760*sqrt(Ur*Ur+Ui*Ui); / UInn_x=SHU; /UIn5=SHU*SHU+UIn5; / 第 n_x 次諧波幅值 if(n_x=0)UILn=atan(Ui/Ur);/相位 . UIn5=(long)sqrt(UIn5); / 總幅值 . for(i=0;i5;i+) /SHU=UIni*1000; /SHU=SHU/(UIn5); /UPni=SHU; / 第 i 次諧波占有率 . SHU=1000*(UIn5-UIn0); / UPn5=SHU/UIn5;/畸變率 .功率因數(shù)角 LCHAN=abs(long)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論