版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、C語言、MATLAB實現(xiàn)FFT幾種方法 總結(jié)前人經(jīng)驗,僅供參考 III 一、 / IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIc語言程序 / / #i nclude #i nclude vintrin sics.h #in clude #defi ne PI 3.1415926535897932384626433832795028841971 / 定義圓周率值 #defi ne FFT_N 128/定義福利葉變換的點數(shù) struct compx float real,imag;/ 定義一個復(fù)數(shù)結(jié)構(gòu) struct compx s
2、FFT_N; /FFT輸入和輸出:從S1開始存放,根據(jù)大小自己定義 I* 函數(shù)原型:struct compx EE(struct compx b1,struct compx b2) 函數(shù)功能:對兩個復(fù)數(shù)進行乘法運算 輸入?yún)?shù):兩個以聯(lián)合體定義的復(fù)數(shù)a,b 輸出參數(shù):a和b的乘積,以聯(lián)合體的形式輸出 */ struct compx EE(struct compx a,struct compx b) struct compx c; c.real=a.real*b.real-a.imag*b.imag; c.imag=a.real*b.imag+a.imag*b.real; return(c); I
3、* 函數(shù)原型:void FFT(struct compx *xi n,int N) 函數(shù)功能:對輸入的復(fù)數(shù)組進行快速傅里葉變換(FFT) 輸入?yún)?shù):*xin復(fù)數(shù)結(jié)構(gòu)體組的首地址指針,struct型 */ void FFT(struct compx *xi n) int f,m, nv2, nm1,i,k,l,j=0; struct compx u,w,t; n v2=FFT_N/2;變址運算,即把自然順序變成倒位序,采用雷德算法 nm仁 FFT_N-1; for(i=0;i n m1;i+) if(ivj) t=xi nj; xi nj=x in i; xi ni=t; k=nv2; whil
4、e(k=j) j=j-k; k=k/2; 某個位為0 j=j+k; /如果ij,即進行變址 /求j的下一個倒位序 /如果k=j,表示j的最咼位為1 /把最高位變成0 /k/2,比較次咼位,依次類推,逐個比較,直到 /把0改為1 int le,lei,ip; f=FFT_N; for(l=1;(f=f/2)!=1;l+) /FFT運算核,使用蝶形運算完成FFT運算 /計算1的值,即計算蝶形級數(shù) J for(m=1;m=l;m+) le=2(m-1); lei=le/2; u.real=1.0; u.imag=0.0; /控制蝶形結(jié)級數(shù) /m表示第m級蝶形,l為蝶形級總數(shù)l=log (2) N /
5、le蝶形結(jié)距離,即第m級蝶形的蝶形結(jié)相距l(xiāng)e點 /同一蝶形結(jié)中參加運算的兩點的距離 /u為蝶形結(jié)運算系數(shù),初始值為1 w.real=cos(PI/lei);llw為系數(shù)商,即當(dāng)前系數(shù)與前一個系數(shù)的商 w.imag=-si n( PI/lei); for(j=0;jv=lei-1;j+)/控制計算不同種蝶形結(jié),即計算系數(shù)不同的蝶形結(jié) for(i=j;iv=FFT_N-1;i=i+le) /控制同一蝶形結(jié)運算,即計算系數(shù)相同蝶形結(jié) ip=i+lei;/i,ip分別表示參加蝶形運算的兩個節(jié)點 t=EE(x in ip,u);/蝶形運算,詳見公式 xi nip.real=x in i.real-t.r
6、eal; xi nip.imag=x in i.imag-t.imag; xin i.real=x in i.real+t.real; xi ni.imag=x in i.imag+t.imag; u=EE(u,w);/改變系數(shù),進行下一個蝶形運算 /* 函數(shù)原型:void mai n() 函數(shù)功能:測試FFT變換,演示函數(shù)使用方法 輸入?yún)?shù):無 輸出參數(shù):無 */ void mai n() int i; for(i=0;iFFT_N;i+)給結(jié)構(gòu)體賦值 si.real=sin(2*3.141592653589793*i/FFT_N); /實部為正弦波 FFT_N 點采 樣,賦值為1 si.i
7、mag=0;/虛部為 0 FFT(s);/進行快速福利葉變換 for(i=0;iN)break; else p=X(i1)*W; X(i1)=X(i)-p; X(i)=X(i)+p; end end W=W*dw; %做蝶形運算的兩個數(shù)之間的距離 %同一級之下蝶形結(jié)之間的距離 %蝶形運算系數(shù)的初始值 %蝶形運算系數(shù)的增加量 % %判斷是否超出范圍 %蝶形運算 %蝶形運算系數(shù)的變化 endend subplot(2,2,1); t=0:0.0000001:N*T; plot(t,si n(2*pi*f*t); subplot(2,2,2); stem(k,x); subplot(2,2,3);
8、stem(k,abs(X)/max(abs(X); subplot(2,2,4); %畫原曲線 %畫采樣后的離散信號 %畫自己的fft的運算結(jié)果 stem(k,abs(fft(x)/max(abs(fft(x); %調(diào)用系統(tǒng)的函數(shù)繪制結(jié)果,與自己的結(jié)果進 行比較 / 三、 / / /FFT 的 C 語言算法實現(xiàn) / 程序如下: /* CCT* */ #i nclude #in elude #in elude #defi neN 1000 typedef struct double real; double img; complex; void fft(); /*快速傅里葉變換*/ void i
9、fft(); /*快速傅里葉逆變換 */ void in itW(); void cha nge(); void add(complex ,complex ,complex *) ;/*復(fù)數(shù)加法*/ void mul(complex ,complex ,complex * );/*復(fù)數(shù)乘法*/ void sub(complex ,complex ,complex *) ;/*復(fù)數(shù)減法*/ void divi(complex complex complex *);/* 復(fù)數(shù)除法 */ void output(); /* 輸出結(jié)果 */ complex xN,*W;/* 輸出序列的值 */ int
10、size_x=0;/*輸入序列的長度,只限2的N次方*/ double PI; int mai n() int i,method; system(cls); PI=ata n( 1)*4; prin tf(Pleasein put the size of x:n); /*輸入序列的長度*/ scan f(%d, prin tf(Pleasein put the data in xN:(such as:5 6)n); /*輸入序列對應(yīng)的值*/ for(i=0;isize_x;i+) scan f(%lf %lf, ini tW(); /*選擇FFT或逆FFT運算*/ prin tf(UseFFT
11、(0) or IFFT(1)?n); scan f(%d, if(method=0) fft(); else ifft(); output(); return 0; /*進行基-2 FFT運算*/ void fft() int i=0,j=0,k=0,l=0; complex up,dow n,product; cha nge(); for(i=0;i log(size_x)/log(2) ;i+) l=1i; for(j=0;jsize_x;j+= 2*l) for(k=0;kl;k+) mul(xj+k+l,Wsize_x*k/2/l, add(xj+k,product, sub(xj+k
12、,product, xj+k=up; xj+k+l=dow n; void ifft() int i=0,j=0,k=0,l=size_x; );i+) /*蝶形運算*/ complexup,dow n; for(i=0;i (int)(log(size_x)/log (2) l/=2; for(j=0;jsize_x;j+= 2*l) for(k=0;kl;k+) add(xj+k , xj+k+l, up.real/=2;up.img/=2; sub(xj+k,xj+k+l, dow n.real/=2;dow n.img/=2; divi(dow n,Wsize_x*k/2/l, xj+
13、k=up; xj+k+l=dow n; cha nge(); void ini tW() size_x); int i; W=(complex *)malloc(sizeof(complex) for(i=0;isize_x;i+) Wi.real=cos(2*PI/size_x*i); Wi.img=-1*si n(2*PI/size_x*i); voidcha nge() complex temp; un sig nedshort i=0,j=0,k=0; double t; for(i=0;i0) j=j1; if(ji) temp=xi; xi=xj; xj=temp; void ou
14、tput()/* 輸出結(jié)果 */ int i; prin tf(The result are as followsn); for(i=0;i=0.0001) prin tf(+%.4fjn,xi.img); else if(fabs(xi.img)real=a.real+b.real; c-img=a.img+b.img; void mul(complex c-real=a.real*b.real c-img=a.real*b.img void sub(complex c-real=a.real-b.real; c-img=a.img-b.img; a,complex b,complex a,
15、complex b,complex - a.img*b.img; + a.img*b.real; a,complex b,complex *c) *c) *c) void divi(complex a,complex b,complex *c) c-real=( a.real*b.real+a.img*b.img )/( b.real*b.real+b.img*b.img); c-img=( a.img*b.real-a.real*b.img)/(b.real*b.real+b.img*b.img); / 四、 / / %/ 選帶傅里葉變換(zoom-fft) MATLAB %移頻(將選帶的中
16、心頻率移動到零頻) %數(shù)字低通濾波器(防止頻率混疊) %重新采樣(將采樣的數(shù)據(jù)再次間隔采樣,間隔的數(shù)據(jù)取決于分析的帶寬,就 是放大倍數(shù)) %復(fù)FFT (由于經(jīng)過了移頻,所以數(shù)據(jù)不是實數(shù)了) %頻率調(diào)整(將負(fù)半軸的頻率成分移到正半軸) fun cti on f, y = zfft(x, fi, fa, fs) %x為采集的數(shù)據(jù) % fi為分析的起始頻率 % fa為分析的截止頻率 % fs為采集數(shù)據(jù)的采樣頻率 % f為輸出的頻率序列 % y為輸出的幅值序列(實數(shù)) fO = (fi + fa) / 2;% 中心頻率 N = len gth(x);%數(shù)據(jù)長度 r = 0:N-1; b = 2*pi*f0.*r ./ fs; x1 = x * exp(-1j * b);% 移頻 bw = fa - fi; B = fir1(32, bw / fs);% 濾波 截止頻率為 0.5bw x2 = filter(B, 1, x1); c = x2(1:floor(fs/bw):N); % 重新采樣 N1 = len gth(c); f = lin space(fi, fa, N1); y = abs(fft(c) ./ N1 * 2; y = circs
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年心理咨詢師題庫附參考答案ab卷 (一)
- 2024美容院美容產(chǎn)品網(wǎng)絡(luò)營銷合同范本2篇
- 環(huán)保設(shè)備與設(shè)計課程設(shè)計
- 2025年物業(yè)管理公司合同管理實施細(xì)則與社區(qū)圖書館運營合同3篇
- 2025年智能廠房租賃合同范本及設(shè)備安裝服務(wù)條款3篇
- 2025年度智慧農(nóng)業(yè)合伙經(jīng)營合同4篇
- 思想?yún)R報黨史競賽4模版課件
- 2025年度智能家居系統(tǒng)全國代理商合作協(xié)議范本4篇
- 二零二五版新型城鎮(zhèn)化建設(shè)項目合伙承包合同模板3篇
- 二零二五年度美發(fā)店員工離職補償及安置合同4篇
- 2024年工程咨詢服務(wù)承諾書
- 青桔單車保險合同條例
- 車輛使用不過戶免責(zé)協(xié)議書范文范本
- 《獅子王》電影賞析
- 2023-2024學(xué)年天津市部分區(qū)九年級(上)期末物理試卷
- DB13-T 5673-2023 公路自愈合瀝青混合料薄層超薄層罩面施工技術(shù)規(guī)范
- 河北省保定市定州市2025屆高二數(shù)學(xué)第一學(xué)期期末監(jiān)測試題含解析
- 哈爾濱研學(xué)旅行課程設(shè)計
- 2024 smart汽車品牌用戶社區(qū)運營全案
- 中醫(yī)護理人文
- 2024-2030年中國路亞用品市場銷售模式與競爭前景分析報告
評論
0/150
提交評論